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

voonhous pushed a commit to tag rfc-105-pre-cleanup
in repository https://gitbox.apache.org/repos/asf/hudi.git

commit 72b78687d6bac3a37141ebc44229c4f6515cb994
Author: voon <[email protected]>
AuthorDate: Thu May 21 19:24:38 2026 +0800

    feat(trino): wire hudi-trino-plugin and bundle for RFC-105 shim split
    
    Configures the Hudi-side build to publish org.apache.hudi:hudi-trino-bundle
    as the artifact consumed by the Trino-side HudiPlugin shim:
    
    - Rewrite hudi-trino-plugin/pom.xml as a regular Hudi module (parent
      org.apache.hudi:hudi, packaging jar, ${project.version} for hudi-* deps);
      import io.trino:trino-root:472 as a BOM for Trino/Airlift version mgmt;
      enforce JDK 25 for compile and runtime.
    - Add -Phudi-trino profile gating both hudi-trino-plugin and
      packaging/hudi-trino-bundle so default builds are unaffected; remove the
      obsolete RAT exclusion for hudi-trino-plugin/**; add 
trino.connector.version
      property to the root pom.
    - Update hudi-trino-bundle to depend on hudi-trino-plugin and shade its
      classes into the published jar (io.trino.plugin.hudi.* stays at its
      canonical FQN).
    - Add hudi_trino_ci.yml (build + test under JDK 25, asserts
      HudiConnectorFactory is present in the bundle jar) and
      hudi_trino_compat.yml (nightly SPI-drift compile against trinodb/trino
      master).
    
    Connector source porting to Hudi 1.3.0-SNAPSHOT APIs is a separate 
follow-up.
---
 .github/workflows/hudi_trino_ci.yml     |  50 +++++++++++++++
 .github/workflows/hudi_trino_compat.yml |  55 +++++++++++++++++
 hudi-trino-plugin/pom.xml               | 104 +++++++++++++++++++++++---------
 packaging/hudi-trino-bundle/pom.xml     |   6 ++
 pom.xml                                 |  13 +++-
 5 files changed, 199 insertions(+), 29 deletions(-)

diff --git a/.github/workflows/hudi_trino_ci.yml 
b/.github/workflows/hudi_trino_ci.yml
new file mode 100644
index 000000000000..82910688c81e
--- /dev/null
+++ b/.github/workflows/hudi_trino_ci.yml
@@ -0,0 +1,50 @@
+name: Hudi Trino Connector CI
+
+on:
+  push:
+    branches:
+      - master
+      - 'release-*'
+    paths:
+      - 'hudi-trino-plugin/**'
+      - 'packaging/hudi-trino-bundle/**'
+      - '.github/workflows/hudi_trino_ci.yml'
+  pull_request:
+    branches:
+      - master
+      - 'release-*'
+    paths:
+      - 'hudi-trino-plugin/**'
+      - 'packaging/hudi-trino-bundle/**'
+      - '.github/workflows/hudi_trino_ci.yml'
+  workflow_dispatch:
+
+concurrency:
+  group: hudi-trino-ci-${{ github.ref }}
+  cancel-in-progress: ${{ !contains(github.ref, 'master') && 
!contains(github.ref, 'release-') }}
+
+env:
+  MVN_ARGS: -e -ntp -B -V -Dgpg.skip -Djacoco.skip -Pwarn-log
+
+jobs:
+  build-and-test:
+    name: Build and Test (JDK 25)
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v5
+      - name: Set up JDK 25
+        uses: actions/setup-java@v5
+        with:
+          java-version: '25'
+          distribution: 'temurin'
+          cache: maven
+      - name: Build connector and bundle
+        run: ./mvnw $MVN_ARGS -Phudi-trino -pl 
hudi-trino-plugin,packaging/hudi-trino-bundle -am install -DskipTests
+      - name: Verify bundle contains connector classes
+        run: |
+          BUNDLE_JAR=$(ls 
packaging/hudi-trino-bundle/target/hudi-trino-bundle-*.jar | grep -v sources | 
head -n 1)
+          echo "Inspecting $BUNDLE_JAR"
+          jar tf "$BUNDLE_JAR" | grep -E 
'io/trino/plugin/hudi/HudiConnectorFactory\.class$' \
+            || (echo "ERROR: HudiConnectorFactory not present in bundle"; exit 
1)
+      - name: Run connector tests
+        run: ./mvnw $MVN_ARGS -Phudi-trino -pl hudi-trino-plugin test
diff --git a/.github/workflows/hudi_trino_compat.yml 
b/.github/workflows/hudi_trino_compat.yml
new file mode 100644
index 000000000000..97162d2fe214
--- /dev/null
+++ b/.github/workflows/hudi_trino_compat.yml
@@ -0,0 +1,55 @@
+name: Hudi Trino SPI Compatibility
+
+on:
+  schedule:
+    - cron: '17 4 * * *'
+  workflow_dispatch:
+
+env:
+  MVN_ARGS: -e -ntp -B -V -Dgpg.skip -Djacoco.skip
+
+jobs:
+  compile-against-trino-master:
+    name: Compile hudi-trino-plugin against trinodb/trino master
+    runs-on: ubuntu-latest
+    steps:
+      - name: Checkout Hudi
+        uses: actions/checkout@v5
+        with:
+          path: hudi
+      - name: Checkout trinodb/trino master
+        uses: actions/checkout@v5
+        with:
+          repository: trinodb/trino
+          ref: master
+          path: trino
+      - name: Set up JDK 25
+        uses: actions/setup-java@v5
+        with:
+          java-version: '25'
+          distribution: 'temurin'
+          cache: maven
+      - name: Read Trino SPI version
+        id: trino-version
+        run: |
+          # trinodb/trino's root pom declares <version>NNN-SNAPSHOT</version>; 
strip the suffix.
+          VERSION=$(grep -m1 '<version>' trino/pom.xml | sed -E 
's|.*<version>([0-9]+)(-SNAPSHOT)?</version>.*|\1|')
+          echo "trino_version=$VERSION" >> "$GITHUB_OUTPUT"
+          echo "Detected Trino version: $VERSION"
+      - name: Compile hudi-trino-plugin against current Trino SPI
+        working-directory: hudi
+        run: |
+          ./mvnw $MVN_ARGS -Phudi-trino \
+            -Dtrino.connector.version=${{ 
steps.trino-version.outputs.trino_version }} \
+            -pl hudi-trino-plugin -am compile
+      - name: Open issue on failure
+        if: failure()
+        uses: actions/github-script@v7
+        with:
+          script: |
+            github.rest.issues.create({
+              owner: context.repo.owner,
+              repo: context.repo.repo,
+              title: `hudi-trino-plugin SPI drift detected against Trino ${{ 
steps.trino-version.outputs.trino_version }}`,
+              body: `Nightly compatibility build failed. See run 
${context.runId}.`
+            });
diff --git a/hudi-trino-plugin/pom.xml b/hudi-trino-plugin/pom.xml
index c67ab6a07f51..be6f3a324369 100644
--- a/hudi-trino-plugin/pom.xml
+++ b/hudi-trino-plugin/pom.xml
@@ -1,28 +1,63 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+<!--
+  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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
     <modelVersion>4.0.0</modelVersion>
 
     <parent>
-        <groupId>io.trino</groupId>
-        <artifactId>trino-root</artifactId>
-        <version>472</version>
-        <!-- Stop looking for the parent on local file system -->
-        <relativePath />
+        <groupId>org.apache.hudi</groupId>
+        <artifactId>hudi</artifactId>
+        <version>1.3.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
     </parent>
 
-    <artifactId>trino-hudi</artifactId>
-    <packaging>trino-plugin</packaging>
-    <description>Trino - Hudi connector</description>
+    <artifactId>hudi-trino-plugin</artifactId>
+    <packaging>jar</packaging>
+    <description>Hudi connector for Trino (RFC-105)</description>
 
     <properties>
-        <air.compiler.fail-warnings>true</air.compiler.fail-warnings>
-        <dep.hudi.version>1.0.2</dep.hudi.version>
+        <!-- Trino SPI / library version this connector compiles against. 
Bumped via root pom. -->
+        <dep.trino.version>${trino.connector.version}</dep.trino.version>
         <trino.parquet.version>1.15.2</trino.parquet.version>
+        <!-- Connector requires JDK 25 to compile and run (matches Trino 
runtime requirement). -->
+        <hudi.trino.java.version>25</hudi.trino.java.version>
+        <main.basedir>${project.parent.basedir}</main.basedir>
+        <checkstyle.skip>true</checkstyle.skip>
     </properties>
 
+    <dependencyManagement>
+        <dependencies>
+            <!-- Import Trino's parent POM as a BOM. This pulls in version 
mgmt for io.trino:*,
+                 io.airlift:*, jackson, opentelemetry, slice, guice, 
jakarta.validation, etc.
+                 Per RFC-105, Trino versions are authoritative for shared 
deps. -->
+            <dependency>
+                <groupId>io.trino</groupId>
+                <artifactId>trino-root</artifactId>
+                <version>${dep.trino.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
     <dependencies>
         <dependency>
-            <!--Used to test execution in task executor after de-serializing-->
+            <!-- Used to test execution in task executor after de-serializing 
-->
             <groupId>com.esotericsoftware</groupId>
             <artifactId>kryo</artifactId>
             <version>4.0.2</version>
@@ -132,7 +167,7 @@
         <dependency>
             <groupId>org.apache.hudi</groupId>
             <artifactId>hudi-common</artifactId>
-            <version>${dep.hudi.version}</version>
+            <version>${project.version}</version>
             <exclusions>
                 <exclusion>
                     <groupId>io.dropwizard.metrics</groupId>
@@ -156,7 +191,7 @@
         <dependency>
             <groupId>org.apache.hudi</groupId>
             <artifactId>hudi-hive-sync</artifactId>
-            <version>${dep.hudi.version}</version>
+            <version>${project.version}</version>
             <exclusions>
                 <exclusion>
                     <groupId>org.apache.hudi</groupId>
@@ -168,7 +203,7 @@
         <dependency>
             <groupId>org.apache.hudi</groupId>
             <artifactId>hudi-io</artifactId>
-            <version>${dep.hudi.version}</version>
+            <version>${project.version}</version>
             <exclusions>
                 <exclusion>
                     <groupId>com.google.protobuf</groupId>
@@ -180,7 +215,7 @@
         <dependency>
             <groupId>org.apache.hudi</groupId>
             <artifactId>hudi-sync-common</artifactId>
-            <version>${dep.hudi.version}</version>
+            <version>${project.version}</version>
             <exclusions>
                 <exclusion>
                     <groupId>org.apache.hudi</groupId>
@@ -380,7 +415,7 @@
         <dependency>
             <groupId>org.apache.hudi</groupId>
             <artifactId>hudi-client-common</artifactId>
-            <version>${dep.hudi.version}</version>
+            <version>${project.version}</version>
             <scope>test</scope>
             <exclusions>
                 <exclusion>
@@ -393,7 +428,7 @@
         <dependency>
             <groupId>org.apache.hudi</groupId>
             <artifactId>hudi-hadoop-common</artifactId>
-            <version>${dep.hudi.version}</version>
+            <version>${project.version}</version>
             <scope>test</scope>
             <exclusions>
                 <exclusion>
@@ -406,7 +441,7 @@
         <dependency>
             <groupId>org.apache.hudi</groupId>
             <artifactId>hudi-java-client</artifactId>
-            <version>${dep.hudi.version}</version>
+            <version>${project.version}</version>
             <scope>test</scope>
             <exclusions>
                 <exclusion>
@@ -463,19 +498,34 @@
     <build>
         <plugins>
             <plugin>
-                <groupId>org.basepom.maven</groupId>
-                <artifactId>duplicate-finder-maven-plugin</artifactId>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
                 <configuration>
-                    <ignoredResourcePatterns>
-                        <!-- org.apache.hudi:hudi-client-common and 
org.apache.hudi:hudi-java-client log4j.properties duplicates -->
-                        
<ignoredResourcePattern>log4j.properties</ignoredResourcePattern>
-                        
<ignoredResourcePattern>log4j-surefire.properties</ignoredResourcePattern>
-                    </ignoredResourcePatterns>
+                    <!-- Override Hudi parent's Java 11 target. Trino SPI 
requires recent JDK. -->
+                    <source>${hudi.trino.java.version}</source>
+                    <target>${hudi.trino.java.version}</target>
+                    <release>${hudi.trino.java.version}</release>
                 </configuration>
             </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
+                <artifactId>maven-enforcer-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>enforce-jdk25</id>
+                        <goals>
+                            <goal>enforce</goal>
+                        </goals>
+                        <configuration>
+                            <rules>
+                                <requireJavaVersion>
+                                    
<version>[${hudi.trino.java.version},)</version>
+                                    <message>hudi-trino-plugin requires JDK 
${hudi.trino.java.version} or newer.</message>
+                                </requireJavaVersion>
+                            </rules>
+                        </configuration>
+                    </execution>
+                </executions>
             </plugin>
         </plugins>
     </build>
diff --git a/packaging/hudi-trino-bundle/pom.xml 
b/packaging/hudi-trino-bundle/pom.xml
index 691e2cce38e2..c58d7ae3c80b 100644
--- a/packaging/hudi-trino-bundle/pom.xml
+++ b/packaging/hudi-trino-bundle/pom.xml
@@ -67,6 +67,7 @@
               </transformers>
               <artifactSet>
                 <includes combine.children="append">
+                  <include>org.apache.hudi:hudi-trino-plugin</include>
                   <include>org.apache.hudi:hudi-hadoop-common</include>
                   <include>org.apache.hudi:hudi-common</include>
                   <include>org.apache.hudi:hudi-client-common</include>
@@ -168,6 +169,11 @@
 
   <dependencies>
     <!-- Hoodie -->
+    <dependency>
+      <groupId>org.apache.hudi</groupId>
+      <artifactId>hudi-trino-plugin</artifactId>
+      <version>${project.version}</version>
+    </dependency>
     <dependency>
       <groupId>org.apache.hudi</groupId>
       <artifactId>hudi-hadoop-mr-bundle</artifactId>
diff --git a/pom.xml b/pom.xml
index bc2f12137830..fbefb7577389 100644
--- a/pom.xml
+++ b/pom.xml
@@ -59,7 +59,6 @@
     <module>packaging/hudi-utilities-bundle</module>
     <module>packaging/hudi-utilities-slim-bundle</module>
     <module>packaging/hudi-timeline-server-bundle</module>
-    <module>packaging/hudi-trino-bundle</module>
     <module>hudi-examples</module>
     <module>hudi-flink-datasource</module>
     <module>hudi-kafka-connect</module>
@@ -130,6 +129,8 @@
     <hive.avro.version>1.11.4</hive.avro.version>
     <presto.version>0.273</presto.version>
     <trino.version>390</trino.version>
+    <!-- Trino SPI version that hudi-trino-plugin (RFC-105) compiles against. 
-->
+    <trino.connector.version>472</trino.connector.version>
     <hive.exec.classifier>core</hive.exec.classifier>
     <metrics.version>4.1.1</metrics.version>
     <orc.spark.version>1.6.0</orc.spark.version>
@@ -682,7 +683,6 @@
               <!-- local files not in version control -->
               <exclude>**/*.iml</exclude>
               <exclude>.mvn/**</exclude>
-              <exclude>hudi-trino-plugin/**</exclude>
             </excludes>
           </configuration>
           <executions>
@@ -2271,6 +2271,15 @@
         <module>packaging/hudi-metaserver-server-bundle</module>
       </modules>
     </profile>
+    <profile>
+      <!-- RFC-105: builds the Trino connector and its publishable shaded 
bundle.
+           Excluded from default builds because it requires JDK 25 and the 
Trino SPI. -->
+      <id>hudi-trino</id>
+      <modules>
+        <module>hudi-trino-plugin</module>
+        <module>packaging/hudi-trino-bundle</module>
+      </modules>
+    </profile>
     <profile>
       <id>integration-tests</id>
       <activation>

Reply via email to