This is an automated email from the ASF dual-hosted git repository.

danny0405 pushed a commit to branch release-1.1.2
in repository https://gitbox.apache.org/repos/asf/hudi.git


The following commit(s) were added to refs/heads/release-1.1.2 by this push:
     new d36ea27b4301 fix(ci): repair Java 8 mocking, Trino SPI dependencies 
and HDFS startup
d36ea27b4301 is described below

commit d36ea27b4301ba5bfe45aeb46b848a1f256bb99b
Author: danny0405 <[email protected]>
AuthorDate: Fri Oct 9 20:43:02 2026 +0800

    fix(ci): repair Java 8 mocking, Trino SPI dependencies and HDFS startup
---
 hudi-client/hudi-java-client/pom.xml               | 23 ++++++
 hudi-trino-plugin/pom.xml                          |  1 -
 packaging/bundle-validation/Dockerfile             |  4 +-
 .../docker_java17/docker_java17_test.sh            | 96 +++++++++++-----------
 4 files changed, 72 insertions(+), 52 deletions(-)

diff --git a/hudi-client/hudi-java-client/pom.xml 
b/hudi-client/hudi-java-client/pom.xml
index c301adda4b74..299d6893ad38 100644
--- a/hudi-client/hudi-java-client/pom.xml
+++ b/hudi-client/hudi-java-client/pom.xml
@@ -186,4 +186,27 @@
         </resources>
     </build>
 
+    <profiles>
+        <profile>
+            <id>java8-test-attach</id>
+            <activation>
+                <jdk>[1.8,1.9)</jdk>
+            </activation>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-surefire-plugin</artifactId>
+                        <configuration>
+                            <!-- JOL and Mockito must share the Java 8 Attach 
API classloader. -->
+                            <additionalClasspathElements>
+                                
<additionalClasspathElement>${java.home}/../lib/tools.jar</additionalClasspathElement>
+                            </additionalClasspathElements>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>
+
 </project>
diff --git a/hudi-trino-plugin/pom.xml b/hudi-trino-plugin/pom.xml
index 45a3e8a3ff6d..3a30e4750d82 100644
--- a/hudi-trino-plugin/pom.xml
+++ b/hudi-trino-plugin/pom.xml
@@ -202,7 +202,6 @@
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
             <artifactId>jackson-annotations</artifactId>
-            <scope>provided</scope>
         </dependency>
 
         <dependency>
diff --git a/packaging/bundle-validation/Dockerfile 
b/packaging/bundle-validation/Dockerfile
index 995e11ef828b..e917a1075ce8 100644
--- a/packaging/bundle-validation/Dockerfile
+++ b/packaging/bundle-validation/Dockerfile
@@ -54,5 +54,5 @@ ENV HDFS_SECONDARYNAMENODE_USER root
 ENV YARN_RESOURCEMANAGER_USER root
 ENV YARN_NODEMANAGER_USER root
 
-# for RocksDb
-RUN apk add --no-cache libstdc++
+# RocksDB needs libstdc++; Hadoop's daemon scripts need procps (ps -p).
+RUN apk add --no-cache libstdc++ procps
diff --git a/packaging/bundle-validation/docker_java17/docker_java17_test.sh 
b/packaging/bundle-validation/docker_java17/docker_java17_test.sh
index 37aa745f3cd9..dfbb427c6713 100755
--- a/packaging/bundle-validation/docker_java17/docker_java17_test.sh
+++ b/packaging/bundle-validation/docker_java17/docker_java17_test.sh
@@ -47,63 +47,62 @@ use_default_java_runtime () {
 }
 
 start_datanode () {
-  DN=$1
-
-  echo "::warning::docker_test_java17.sh starting datanode:"$DN
-
-  cat $HADOOP_HOME/hadoop/etc/hdfs-site.xml
-  cat $HADOOP_HOME/hadoop/etc/core-site.xml
-
-  DN_DIR_PREFIX=$DOCKER_TEST_DIR/additional_datanode/
-  PID_DIR=$DOCKER_TEST_DIR/pid/$1
-
-  if [ -z $DN_DIR_PREFIX ]; then
-    mkdir -p $DN_DIR_PREFIX
-  fi
-
-  if [ -z $PID_DIR ]; then
-    mkdir -p $PID_DIR
-  fi
-
-  export HADOOP_PID_DIR=$PID_PREFIX
-  DN_CONF_OPTS="\
-  -Dhadoop.tmp.dir=$DN_DIR_PREFIX$DN\
-  -Ddfs.datanode.address=localhost:5001$DN \
-  -Ddfs.datanode.http.address=localhost:5008$DN \
-  -Ddfs.datanode.ipc.address=localhost:5002$DN"
-  $HADOOP_HOME/bin/hdfs --daemon start datanode $DN_CONF_OPTS
-  $HADOOP_HOME/bin/hdfs dfsadmin -report
+  local dn=$1
+  local data_dir="$DOCKER_TEST_DIR/additional_datanode/$dn"
+  local pid_dir="$DOCKER_TEST_DIR/pid/datanode-$dn"
+
+  echo "::warning::docker_test_java17.sh starting datanode:$dn"
+  mkdir -p "$data_dir" "$pid_dir" || return 1
+  HADOOP_PID_DIR="$pid_dir" "$HADOOP_HOME/bin/hdfs" --daemon start datanode \
+    -Dhadoop.tmp.dir="$data_dir" \
+    -Ddfs.datanode.address="localhost:5001$dn" \
+    -Ddfs.datanode.http.address="localhost:5008$dn" \
+    -Ddfs.datanode.ipc.address="localhost:5002$dn"
 }
 
 setup_hdfs () {
   echo "::warning::docker_test_java17.sh copying hadoop conf"
-  mv /opt/bundle-validation/tmp-conf-dir/hdfs-site.xml 
$HADOOP_HOME/etc/hadoop/hdfs-site.xml
-  mv /opt/bundle-validation/tmp-conf-dir/core-site.xml 
$HADOOP_HOME/etc/hadoop/core-site.xml
-
-  $HADOOP_HOME/bin/hdfs namenode -format
-  $HADOOP_HOME/bin/hdfs --daemon start namenode
-  echo "::warning::docker_test_java17.sh starting hadoop hdfs"
-  $HADOOP_HOME/sbin/start-dfs.sh
-
-  # start datanodes
-  for i in $(seq 1 3)
-  do
-    start_datanode $i
+  cp "$WORKDIR/tmp-conf-dir/hdfs-site.xml" 
"$HADOOP_HOME/etc/hadoop/hdfs-site.xml" || return 1
+  cp "$WORKDIR/tmp-conf-dir/core-site.xml" 
"$HADOOP_HOME/etc/hadoop/core-site.xml" || return 1
+
+  mkdir -p "$DOCKER_TEST_DIR/pid/namenode" || return 1
+  "$HADOOP_HOME/bin/hdfs" namenode -format || return 1
+  HADOOP_PID_DIR="$DOCKER_TEST_DIR/pid/namenode" "$HADOOP_HOME/bin/hdfs" 
--daemon start namenode || return 1
+
+  # All daemons run in this container. Avoid the SSH/su worker dispatch in 
start-dfs.sh.
+  local i
+  for i in 1 2 3; do
+    start_datanode "$i" || return 1
   done
 
-  echo "::warning::docker_test_java17.sh starting hadoop hdfs, hdfs report"
-  $HADOOP_HOME/bin/hdfs dfs -mkdir -p /user/root
-  $HADOOP_HOME/bin/hdfs dfs -ls /user/
-  if [ "$?" -ne 0 ]; then
-    echo "::error::docker_test_java17.sh Failed setting up HDFS!"
-    exit 1
-  fi
+  # Starting a daemon only forks it; wait for all replicas before running the 
tests.
+  local report
+  for i in $(seq 1 30); do
+    if report=$("$HADOOP_HOME/bin/hdfs" dfsadmin 
-Dipc.client.connect.max.retries=0 -report 2>&1) \
+        && printf '%s\n' "$report" | grep -q 'Live datanodes (3)'; then
+      printf '%s\n' "$report"
+      "$HADOOP_HOME/bin/hdfs" dfsadmin -safemode wait || return 1
+      "$HADOOP_HOME/bin/hdfs" dfs -mkdir -p /user/root || return 1
+      "$HADOOP_HOME/bin/hdfs" dfs -ls /user/
+      return $?
+    fi
+    sleep 2
+  done
+
+  printf '%s\n' "$report"
+  echo "::error::docker_test_java17.sh Failed waiting for three live HDFS 
datanodes!"
+  tail -n 100 "$HADOOP_HOME"/logs/*.log "$HADOOP_HOME"/logs/*.out
+  return 1
 }
 
 stop_hdfs() {
   use_default_java_runtime
   echo "::warning::docker_test_java17.sh stopping hadoop hdfs"
-  $HADOOP_HOME/sbin/stop-dfs.sh
+  local i
+  for i in 1 2 3; do
+    HADOOP_PID_DIR="$DOCKER_TEST_DIR/pid/datanode-$i" "$HADOOP_HOME/bin/hdfs" 
--daemon stop datanode
+  done
+  HADOOP_PID_DIR="$DOCKER_TEST_DIR/pid/namenode" "$HADOOP_HOME/bin/hdfs" 
--daemon stop namenode
 }
 
 build_hudi () {
@@ -171,7 +170,8 @@ echo "::warning::docker_test_java17.sh Building Hudi"
 build_hudi
 echo "::warning::docker_test_java17.sh Done building Hudi"
 
-setup_hdfs
+trap stop_hdfs EXIT
+setup_hdfs || exit 1
 
 echo "::warning::docker_test_java17.sh Running tests with Java 17"
 run_docker_tests
@@ -179,5 +179,3 @@ if [ "$?" -ne 0 ]; then
   exit 1
 fi
 echo "::warning::docker_test_java17.sh Done running tests with Java 17"
-
-stop_hdfs

Reply via email to