This is an automated email from the ASF dual-hosted git repository.
hello-stephen pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new 8026894b8df [fix](thirdparty) order Paimon codec dependencies (#67158)
8026894b8df is described below
commit 8026894b8df8596e0e9f7f733e314e2858652454
Author: Gabriel <[email protected]>
AuthorDate: Fri Aug 28 20:44:45 2026 +0800
[fix](thirdparty) order Paimon codec dependencies (#67158)
### What problem does this PR solve?
A clean parallel Paimon C++ build can start compiling the object library
before bundled codec external projects install their headers. This makes
block_compression_factory.cpp fail with a missing codec header depending
on the build graph state.
### What is changed and how does it work?
- Add the zstd, snappy, and lz4 targets to the Paimon object library
dependencies so their ExternalProject install steps finish before codec
sources compile.
- Keep existing complete Paimon prebuilts compatible because dependency
ordering does not change installed artifacts.
- Add a focused regression test that applies the Doris patch and
verifies all three codec dependencies, and run it in the Arrow/Paimon
workflow.
---
.github/workflows/build-thirdparty.yml | 8 ++-
regression-test/pipeline/external/conf/fe.conf | 2 +-
thirdparty/arrow-paimon-vars.sh | 4 +-
.../paimon-cpp-buildutils-static-deps.patch | 17 +++++
thirdparty/test/adbc-jni-config-test.sh | 35 ++++++++++
thirdparty/test/paimon-codec-dependency-test.sh | 78 ++++++++++++++++++++++
6 files changed, 141 insertions(+), 3 deletions(-)
diff --git a/.github/workflows/build-thirdparty.yml
b/.github/workflows/build-thirdparty.yml
index 7ae7cb2d43e..03244548080 100644
--- a/.github/workflows/build-thirdparty.yml
+++ b/.github/workflows/build-thirdparty.yml
@@ -58,7 +58,10 @@ jobs:
- 'thirdparty/paimon-cpp-cache.cmake'
- 'thirdparty/patches/apache-arrow-*.patch'
- 'thirdparty/patches/paimon-cpp-*.patch'
+ - 'regression-test/pipeline/external/conf/fe.conf'
- 'thirdparty/test/arrow-paimon-lifecycle-test.sh'
+ - 'thirdparty/test/adbc-jni-config-test.sh'
+ - 'thirdparty/test/paimon-codec-dependency-test.sh'
- '.github/workflows/build-thirdparty.yml'
arrow_paimon_lifecycle_test:
@@ -71,7 +74,10 @@ jobs:
uses: actions/checkout@v4
- name: Test focused thirdparty lifecycle
- run: thirdparty/test/arrow-paimon-lifecycle-test.sh
+ run: |
+ thirdparty/test/arrow-paimon-lifecycle-test.sh
+ thirdparty/test/adbc-jni-config-test.sh
+ thirdparty/test/paimon-codec-dependency-test.sh
script_test:
name: Thirdparty Script Test
diff --git a/regression-test/pipeline/external/conf/fe.conf
b/regression-test/pipeline/external/conf/fe.conf
index d5c3e734433..4466998ae67 100644
--- a/regression-test/pipeline/external/conf/fe.conf
+++ b/regression-test/pipeline/external/conf/fe.conf
@@ -28,7 +28,7 @@ DATE = `date +%Y%m%d-%H%M%S`
JAVA_OPTS="-Xmx4096m -XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=$DORIS_HOME/log/fe.jmap -XX:+UseMembar -XX:SurvivorRatio=8
-XX:MaxTenuringThreshold=7 -XX:+PrintGCDateStamps -XX:+PrintGCDetails
-XX:+PrintClassHistogramAfterFullGC -XX:+UseConcMarkSweepGC -XX:+UseParNewGC
-XX:+CMSClassUnloadingEnabled -XX:-CMSParallelRemarkEnabled
-XX:CMSInitiatingOccupancyFraction=80 -XX:SoftRefLRUPolicyMSPerMB=0
-Xloggc:$DORIS_HOME/log/fe.gc.log.$DATE
-Dcom.mysql.cj.disableAbandonedConnectionCleanup=true"
# For jdk 17+, this JAVA_OPTS will be used as default JVM options
-# Use Doris' compatible ADBC JNI build because the Maven-bundled library
requires a newer glibc.
+# External deployment replaces the packaged fe.conf, so keep Doris'
glibc-compatible ADBC JNI build.
JAVA_OPTS_FOR_JDK_17="-Dfile.encoding=UTF-8
-Djavax.security.auth.useSubjectCredsOnly=false -Xmx4096m -XX:+UseG1GC
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$LOG_DIR
-Xlog:gc*,classhisto*=trace:$LOG_DIR/fe.gc.log.$CUR_DATE:time,uptime:filecount=10,filesize=50M
-Darrow.enable_null_check_for_get=false
-Darrow.adbc.driver.jni.library.path=${DORIS_HOME}/lib
--add-opens=java.base/java.lang=ALL-UNNAMED
--add-opens=java.base/java.lang.invoke=ALL-UNNAMED
--add-opens=java.base/java.lang.re [...]
##
diff --git a/thirdparty/arrow-paimon-vars.sh b/thirdparty/arrow-paimon-vars.sh
index e6f8cfb7c6f..d532a740e63 100644
--- a/thirdparty/arrow-paimon-vars.sh
+++ b/thirdparty/arrow-paimon-vars.sh
@@ -61,7 +61,9 @@ PAIMON_BUILD_SCHEMA_VERSION="1"
# mandatory before reuse. Delete the lists once master has published a
prebuilt that
# carries the semantic marker itself.
ARROW_LEGACY_COMPATIBLE_SEMANTIC_FINGERPRINT="ab79ab0bbfbf93f9860050fb751b20fee9e40d96"
-PAIMON_LEGACY_COMPATIBLE_SEMANTIC_FINGERPRINT="cb82e41ba46f534e611cdd52e66b53c227d49bf8"
+# Dependency ordering does not change the installed Paimon artifacts, so
existing
+# complete prebuilts remain compatible with the corrected clean-build graph.
+PAIMON_LEGACY_COMPATIBLE_SEMANTIC_FINGERPRINT="9887cf1ec13106da4250f8d7ea931a258879089c"
ARROW_LEGACY_BUILD_FINGERPRINTS=(
# published 2026-08-19, master after apache/doris#66842
8356a3a464b93f3a59a6bdae6a51258947ab35d2
diff --git a/thirdparty/patches/paimon-cpp-buildutils-static-deps.patch
b/thirdparty/patches/paimon-cpp-buildutils-static-deps.patch
index fc1fe155312..213cc279f52 100644
--- a/thirdparty/patches/paimon-cpp-buildutils-static-deps.patch
+++ b/thirdparty/patches/paimon-cpp-buildutils-static-deps.patch
@@ -343,3 +343,20 @@ diff --git a/src/paimon/format/blob/blob_format_writer.cpp
b/src/paimon/format/b
+ list(GET Thrift_VERSION_LIST 0 Thrift_VERSION_MAJOR)
+ list(GET Thrift_VERSION_LIST 1 Thrift_VERSION_MINOR)
+ list(GET Thrift_VERSION_LIST 2 Thrift_VERSION_PATCH)
+
+diff --git a/src/paimon/CMakeLists.txt b/src/paimon/CMakeLists.txt
+index 76dd03b..9317324 100644
+--- a/src/paimon/CMakeLists.txt
++++ b/src/paimon/CMakeLists.txt
+@@ -281,6 +281,11 @@ add_paimon_lib(paimon
+ ${PAIMON_COMMON_SRCS}
+ ${PAIMON_CORE_SRCS}
+ DEPENDENCIES
++ # Codec headers come from ExternalProject install steps, so
object
++ # compilation must not race those steps in clean parallel
builds.
++ zstd
++ snappy
++ lz4
+ arrow
+ tbb
+ glog
diff --git a/thirdparty/test/adbc-jni-config-test.sh
b/thirdparty/test/adbc-jni-config-test.sh
new file mode 100755
index 00000000000..6f2cf074e3c
--- /dev/null
+++ b/thirdparty/test/adbc-jni-config-test.sh
@@ -0,0 +1,35 @@
+#!/usr/bin/env bash
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+set -euo pipefail
+
+ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." &>/dev/null && pwd)"
+EXTERNAL_FE_CONF="${ROOT}/regression-test/pipeline/external/conf/fe.conf"
+# shellcheck disable=SC2016 # Match the literal option before fe.conf expands
DORIS_HOME.
+JNI_LIBRARY_OPTION='-Darrow.adbc.driver.jni.library.path=${DORIS_HOME}/lib'
+
+# External Regression replaces the packaged FE configuration instead of
merging it.
+# Keep the JNI override in that replacement so ADBC cannot fall back to the
jar binary.
+java_opts_assignment="$(grep '^JAVA_OPTS_FOR_JDK_17=' "${EXTERNAL_FE_CONF}" ||
true)"
+if [[ " ${java_opts_assignment} " != *" ${JNI_LIBRARY_OPTION} "* ]]; then
+ echo "FAIL: ${EXTERNAL_FE_CONF} drops the packaged ADBC JNI library path."
>&2
+ echo "Add ${JNI_LIBRARY_OPTION} to its FE JVM options." >&2
+ exit 1
+fi
+
+echo "PASS"
diff --git a/thirdparty/test/paimon-codec-dependency-test.sh
b/thirdparty/test/paimon-codec-dependency-test.sh
new file mode 100755
index 00000000000..4d3b92458b8
--- /dev/null
+++ b/thirdparty/test/paimon-codec-dependency-test.sh
@@ -0,0 +1,78 @@
+#!/usr/bin/env bash
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+set -eo pipefail
+
+ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." &>/dev/null && pwd)"
+
+fail() {
+ echo "FAIL: $*" >&2
+ exit 1
+}
+
+tmpdir="$(mktemp -d)"
+trap 'rm -rf "${tmpdir}"' EXIT
+
+fixture="${tmpdir}/paimon-codec-dependency"
+focused_patch="${fixture}/codec-dependency.patch"
+mkdir -p "${fixture}/src/paimon"
+{
+ printf '%s\n' 'add_paimon_lib(paimon'
+ printf '%s\n' ' SOURCES'
+ printf '%s\n' ' ${PAIMON_COMMON_SRCS}'
+ printf '%s\n' ' ${PAIMON_CORE_SRCS}'
+ printf '%s\n' ' DEPENDENCIES'
+ printf '%s\n' ' arrow'
+ printf '%s\n' ' tbb'
+ printf '%s\n' ' glog'
+ printf '%s\n' ' fmt'
+ printf '%s\n' ' roaring_bitmap'
+ printf '%s\n' ' xxhash'
+ printf '%s\n' ' Threads::Threads'
+ printf '%s\n' ' RapidJSON'
+ printf '%s\n' ' STATIC_LINK_LIBS'
+ printf '%s\n' ' arrow)'
+} >"${fixture}/src/paimon/CMakeLists.txt"
+
+awk '
+ /^diff --git / {
+ if (found) {
+ exit
+ }
+ if ($0 == "diff --git a/src/paimon/CMakeLists.txt
b/src/paimon/CMakeLists.txt") {
+ found = 1
+ }
+ }
+ found { print }
+' "${ROOT}/patches/paimon-cpp-buildutils-static-deps.patch" >"${focused_patch}"
+[[ -s "${focused_patch}" ]] || fail "the Paimon codec dependency patch is
missing"
+(
+ cd "${fixture}"
+ patch -s -p1 <"${focused_patch}"
+) || fail "the Paimon codec dependency patch did not apply"
+
+dependencies="$(sed -n
'/^[[:space:]]*DEPENDENCIES$/,/^[[:space:]]*STATIC_LINK_LIBS$/p' \
+ "${fixture}/src/paimon/CMakeLists.txt")"
+grep -Eq '^[[:space:]]+zstd$' <<<"${dependencies}" ||
+ fail "paimon_objlib does not wait for the ZSTD headers"
+grep -Eq '^[[:space:]]+snappy$' <<<"${dependencies}" ||
+ fail "paimon_objlib does not wait for the Snappy headers"
+grep -Eq '^[[:space:]]+lz4$' <<<"${dependencies}" ||
+ fail "paimon_objlib does not wait for the LZ4 headers"
+
+echo "PASS"
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]