Skip to content

Reject duplicate segment names before batch push #4203

Reject duplicate segment names before batch push

Reject duplicate segment names before batch push #4203

#
# 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.
#
name: Pinot Java 11 Client Compatibility
on:
push:
branches:
- master
paths-ignore:
- "contrib/**"
- "docs/**"
- "docker/**"
- "kubernetes/**"
- "licenses/**"
- "licenses-binary/**"
- "**.md"
pull_request:
branches:
- master
paths-ignore:
- "contrib/**"
- "docs/**"
- "docker/**"
- "kubernetes/**"
- "licenses/**"
- "licenses-binary/**"
- "**.md"
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
# pinot-spi, pinot-segment-spi, pinot-timeseries-spi, pinot-common, pinot-java-client and
# pinot-jdbc-client hard-code <release>11</release> so that third-party plugins and applications
# embedding the Java/JDBC client are not forced onto the JDK that Pinot's services require.
#
# --release 11 keeps Pinot's own code in those modules Java 11 clean, but nothing checks their
# transitive dependency closure. A routine dependency bump can drop a Java 17+ jar into the client
# classpath, and today the first sign of that would be a user reporting
# UnsupportedClassVersionError. This job loads and exercises the clients on a real Java 11 JVM.
java11-client-compatibility:
if: github.repository == 'apache/pinot'
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
# build-java is the JDK the artifacts are compiled with; the verifier always runs on the
# Java version the clients are pinned to.
build-java: [ 25 ]
distribution: [ "temurin" ]
name: Pinot Java 11 Client Compatibility (built on JDK ${{ matrix.build-java }}-${{ matrix.distribution }})
steps:
- uses: actions/checkout@v7.0.1
# Installed first so that the build JDK below ends up as JAVA_HOME. setup-java also exports
# JAVA_HOME_11_<arch>, which the script falls back on if this step's output is unavailable.
- name: Set up Java 11 (verification runtime)
id: java11
uses: actions/setup-java@v6
with:
java-version: 11
distribution: ${{ matrix.distribution }}
- name: Set up JDK ${{ matrix.build-java }} (build)
uses: actions/setup-java@v6
with:
java-version: ${{ matrix.build-java }}
distribution: ${{ matrix.distribution }}
cache: 'maven'
- uses: actions/cache@v6
env:
SEGMENT_DOWNLOAD_TIMEOUT_MINS: 10
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
- name: Verify the Java 11 clients on a Java 11 JVM
timeout-minutes: 40
env:
JAVA11_HOME: ${{ steps.java11.outputs.path }}
DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
# Same download hardening the other Maven jobs use, so a transient Central hiccup retries
# here too instead of failing the job.
#
# Only JVM arguments and -D system properties belong here: MAVEN_OPTS is handed to the JVM
# that runs Maven, not to Maven itself. The peer jobs also list -B and -ntp, which the JVM
# rejects outright ("Unrecognized option: -B") and which only survive there because those
# jobs additionally pass -XX:+IgnoreUnrecognizedVMOptions. The script passes -B -ntp on the
# mvn command line where they belong, so they are left out rather than masked.
#
# Deliberately no -DskipShade either: the script passes -Dshade.phase.prop=none, which
# disables shading for both client modules (-DskipShade only covers pinot-jdbc-client).
MAVEN_OPTS: >
-Xmx2G -DfailIfNoTests=false -Dmaven.wagon.httpconnectionManager.ttlSeconds=25
-Dmaven.wagon.http.retryHandler.count=30 -Dhttp.keepAlive=false -Dmaven.wagon.http.pool=false
run: |
.github/workflows/scripts/.pinot_java11_client_compat.sh