Skip to content

Add Arrow and Parquet C++ to the Rocky build images - #2155

Merged
MisterRaindrop merged 1 commit into
apache:mainfrom
MisterRaindrop:feature/build-image-arrow
Oct 21, 2026
Merged

MisterRaindrop merged 1 commit into
apache:mainfrom
MisterRaindrop:feature/build-image-arrow

Conversation

@MisterRaindrop

Copy link
Copy Markdown
Contributor

What does this PR do?

Installs Arrow and Parquet C++ in the Rocky 8, 9 and 10 build images, so contrib/datalake_fdw (#2044) can build against them without each CI job installing them itself.

  • From the Arrow project's own repository, pinned: 22.0.0 on Rocky 8, the last release whose headers are C++17 (from 23 on they need C++20, which gcc 8 does not have), and 26.0.0 on Rocky 9 and 10. This is the split agreed in datalake_fdw: storage I/O over S3 and pluggable storage backends #2044.
  • The repository is left disabled afterwards, as EPEL is, so nothing moves the version but a change to the Dockerfile.
  • Testinfra checks that pkg-config --modversion reports the pinned version for arrow and parquet.
  • The job timeout goes from 60 to 90 minutes (see below).

The Ubuntu images are not changed: Apache's libarrow-dev pulls in libcurl4-openssl-dev, which removes the libcurl4-gnutls-dev that the deb packaging (devops/build/packaging/deb/ubuntu*/control) depends on. That needs its own discussion.

Type of Change

  • Bug fix (non-breaking change)
  • New feature (non-breaking change)
  • Breaking change (fix or feature with breaking changes)
  • Documentation update

Test Plan

Image Job total Arrow layer, amd64 Arrow layer, arm64 (QEMU)
Rocky 8 43 min 48 s 4.1 min
Rocky 9 41 min 47 s 3.9 min
Rocky 10 53 min 33 s 3.0 min

Why the timeout changes. The first fork run had Rocky 9 cancelled at 60 minutes while exporting its arm64 image. Its Arrow layer took 12 minutes under QEMU, eight of them spent loading repository metadata for a release package that needs none; it now installs with --disablerepo='*'. But the part of the build that does not involve Arrow varies a lot on its own: the arm64 main layer took 30 to 41 minutes across these runs, and the Rocky jobs took 35 to 60 minutes before this change. So 60 leaves no margin.

Impact

Dependencies:
Image size grows by about 440–540 MB per Rocky image. Most of it is the static libraries in arrow-devel (libarrow_bundled_dependencies.a 150 MB, libarrow.a 70 MB) and boost-devel, which thrift-devel requires. datalake_fdw links the shared libraries, so the static ones could be deleted in the same layer if the size matters; I left them so the image stays a plain package install.

Checklist

Additional Context

Once the published images carry Arrow, a follow-up changes the datalake job in build-cloudberry.yml to use it and drops the Arrow install there.

contrib/datalake_fdw builds against Arrow and Parquet C++.  Install them
in the Rocky 8, 9 and 10 build images from the Arrow project's own
repository, pinned so the version moves only with a change here: 22.0.0
on Rocky 8, the last release whose headers are C++17 (from 23 on they
need C++20, which gcc 8 does not have), and 26.0.0 on Rocky 9 and 10.
The repository is left disabled afterwards, as EPEL is.

The release package goes in with every repository disabled: it needs
nothing from them, and loading their metadata under QEMU took eight
minutes of an arm64 build.

Testinfra checks that pkg-config reports the pinned version of both.

The arm64 half of each build runs under QEMU, and the Rocky builds
already took 35 to 60 minutes before Arrow joined them, so the job
timeout goes from 60 to 90 minutes.

The Ubuntu images are left alone: Apache's libarrow-dev pulls in
libcurl4-openssl-dev, which replaces the libcurl4-gnutls-dev the deb
packaging depends on.
@MisterRaindrop
MisterRaindrop merged commit e0289c9 into apache:main Oct 21, 2026
127 checks passed
yjhjstz pushed a commit that referenced this pull request Oct 22, 2026
The Rocky build images now ship Arrow and Parquet C++ themselves (#2155):
22.0.0 on Rocky 8 and 26.0.0 on Rocky 9 and 10, with the Arrow repository
left disabled.  The ic-datalake-fdw step still installed its own copy, so
once the images were rebuilt it failed before building anything: on Rocky
9 and 10 EPEL's libarrow-devel conflicts with the image's arrow-devel over
the same headers, and on Rocky 8 the pinned 17.0.0 is no longer reachable.
The step now installs nothing and builds against the image's Arrow.

Arrow 23 moved its headers to C++20 (std::span, std::bit_width), so the
Makefile picks -std=c++20 when Arrow is 23 or newer and keeps C++17 below
that.  C++20 deprecates ++ and -- on a volatile, which the server's own
HOLD_INTERRUPTS does, so -Wvolatile is off with it.

Arrow 26 removed the FileReader::GetRecordBatchReader overload that
returns its reader through an out parameter.  The Result-returning form
exists from Arrow 19, so the reader uses it from there and keeps the old
spelling for older versions.
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.

4 participants