Skip to content

build: enable Parquet modular encryption and zstd in vendored Arrow - #989

Merged
wgtmac merged 5 commits into
apache:mainfrom
shangxinli:pr/01-build
Oct 15, 2026
Merged

wgtmac merged 5 commits into
apache:mainfrom
shangxinli:pr/01-build

Conversation

@shangxinli

@shangxinli shangxinli commented Oct 9, 2026 •

Copy link
Copy Markdown
Contributor

Part of #988.

Adds the ICEBERG_ENCRYPTION CMake option (default on), which builds the vendored Arrow with Parquet modular encryption and zstd and links OpenSSL into the bundle library. This makes the crypto available for the following table encryption steps; there is no behavior change for tables.

shangxinli and others added 2 commits October 9, 2026 10:00
Table encryption needs Parquet modular encryption for data and delete
files, and AES-GCM for the AGS1 streams of manifests and manifest lists.

- Add the ICEBERG_ENCRYPTION option (default ON). When enabled, find
  OpenSSL before the vendored Arrow is configured (with a Homebrew hint
  on macOS), build Arrow with PARQUET_REQUIRE_ENCRYPTION, and link the
  bundle library with OpenSSL::Crypto.
- Build the vendored Arrow with zstd, the default Parquet codec of both
  Java and C++, so tables written by Java can be read.
- Record the OpenSSL root in iceberg-config.cmake for consumers.
- Install OpenSSL in CI (libssl-dev on Ubuntu, vcpkg on Windows).
- Add a smoke test for encrypted Parquet with the settings Iceberg uses
  (encrypted footer, AAD prefix not stored in the file).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
On Windows the Parquet encryption sources are compiled in parquet_static
rather than parquet_objlib, so they did not find the OpenSSL headers.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

@wgtmac wgtmac left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I found three package/build integration issues and two scope/default-value concerns in this build-only step. Details are attached inline.

Comment thread cmake_modules/IcebergThirdpartyToolchain.cmake Outdated
Comment thread src/iceberg/iceberg-config.cmake.in Outdated
Comment thread cmake_modules/IcebergThirdpartyToolchain.cmake Outdated
Comment thread cmake_modules/IcebergThirdpartyToolchain.cmake
Comment thread CMakeLists.txt Outdated
shangxinli and others added 3 commits October 14, 2026 10:24
- Register OpenSSL in ICEBERG_SYSTEM_DEPENDENCIES for both vendored and
  system Arrow, since the bundle exports OpenSSL::Crypto in both modes.
- Stop exporting the build machine's OpenSSL root from the installed
  package so consumers resolve OpenSSL from their own toolchain.
- Restrict the Parquet include injection to vendored Arrow targets and
  skip ALIAS targets, which target_include_directories cannot modify.
- Default ICEBERG_ENCRYPTION to OFF and enable it on the Ubuntu and macOS
  test jobs, so the encryption build, parquet_encryption_test, and the
  Homebrew keg-only OpenSSL lookup all stay covered.
- Document why zstd is enabled in the vendored Arrow build.
# Conflicts:
#	.github/workflows/test.yml
@wgtmac
wgtmac merged commit 1b6d6a3 into apache:main Oct 15, 2026
19 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants