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

lukasz pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra-analytics.git


The following commit(s) were added to refs/heads/trunk by this push:
     new a3552ea5 CASSANALYTICS-106: Setup CI Pipeline with GitHub Actions 
Patched by Lukasz Antoniak; Reviewed by Francisco Guerrero for CASSANALYTICS-106
a3552ea5 is described below

commit a3552ea5a349629bf9603085716c10dce1f8f76c
Author: Lukasz Antoniak <[email protected]>
AuthorDate: Thu Nov 13 14:20:17 2025 +0100

    CASSANALYTICS-106: Setup CI Pipeline with GitHub Actions
    Patched by Lukasz Antoniak; Reviewed by Francisco Guerrero for 
CASSANALYTICS-106
---
 .github/workflows/test.yaml                        | 211 +++++++++++++++++++++
 CHANGES.txt                                        |   1 +
 .../distributed/impl/CassandraCluster.java         |  28 +++
 .../org/apache/cassandra/testing/TestUtils.java    |  12 ++
 .../BulkWriteDownInstanceMultipleTokensTest.java   |  12 ++
 .../BulkWriteDownSidecarMultipleTokensTest.java    |  12 ++
 ...CassandraAnalyticsSimpleMultipleTokensTest.java |  12 ++
 .../cassandra/analytics/RandomPartitionerTest.java |  12 ++
 .../analytics/data/ClearSnapshotTest.java          |   6 +
 ...kWriteS3CompatModeSimpleMultipleTokensTest.java |  12 ++
 10 files changed, 318 insertions(+)

diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml
new file mode 100644
index 00000000..d5235fd8
--- /dev/null
+++ b/.github/workflows/test.yaml
@@ -0,0 +1,211 @@
+# 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: Test
+
+on:
+  push:
+    branches: [ "trunk" ]
+  pull_request:
+    branches: [ "trunk" ]
+  # Allows you to run this workflow manually from the Actions tab
+  workflow_dispatch:
+
+jobs:
+  build:
+    name: Compile and build
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v4
+      - name: Setup JDK
+        uses: actions/setup-java@v4
+        with:
+          distribution: 'temurin'
+          java-version: 11
+      - run: |
+          sudo apt-get update
+          
+          if [ -f /etc/ssl/certs/java/cacerts/cacerts ]; then
+              sudo mv /etc/ssl/certs/java/cacerts/ 
/etc/ssl/certs/java/cacerts-old
+              sudo mv /etc/ssl/certs/java/cacerts-old/cacerts 
/etc/ssl/certs/java/
+              sudo rmdir /etc/ssl/certs/java/cacerts-old
+          fi
+          
+          apt-get download ant ant-optional
+          sudo dpkg --force-all -i ant*.deb
+          rm ant*.deb
+          
+          sudo bash -c 'for i in {2..20}; do echo 127.0.0.${i} localhost${i} 
>> /etc/hosts; done'
+          
+          for i in {2..20}
+          do
+            sudo ip addr add "127.0.0.${i}" dev lo
+            sudo route add -host "127.0.0.${i}" dev lo;
+          done
+          
+          CASSANDRA_USE_JDK11=true ./scripts/build-dependencies.sh
+          
+          ./gradlew codeCheckTasks
+      - name: Cache Maven repository
+        uses: actions/cache@v4
+        with:
+          path: ~/.m2
+          key: maven-repo-${{ github.sha }}
+      - name: Cache workspace
+        id: cache-build-save
+        uses: actions/cache/save@v4
+        with:
+          path: ${{ github.workspace }}
+          key: build-${{ github.sha }}
+
+  unit-test:
+    name: Unit test
+    needs: build
+    runs-on: ubuntu-latest
+    strategy:
+      matrix:
+        scala: [ '2.12', '2.13' ]
+      fail-fast: false
+    steps:
+      - name: Setup JDK
+        uses: actions/setup-java@v4
+        with:
+          distribution: 'temurin'
+          java-version: 11
+      - run: |
+          sudo bash -c 'for i in {2..20}; do echo 127.0.0.${i} localhost${i} 
>> /etc/hosts; done'
+          for i in {2..20}
+          do
+            sudo ip addr add "127.0.0.${i}" dev lo
+            sudo route add -host "127.0.0.${i}" dev lo;
+          done
+      - name: Cache Maven repository
+        uses: actions/cache@v4
+        with:
+          path: ~/.m2
+          key: maven-repo-${{ github.sha }}
+      - name: Cache workspace
+        id: cache-build-restore
+        uses: actions/cache/restore@v4
+        with:
+          path: ${{ github.workspace }}
+          key: build-${{ github.sha }}
+      - run: |
+          export SPARK_VERSION="3"
+          export SCALA_VERSION="${{ matrix.scala }}"
+          export JDK_VERSION="11"
+          export INTEGRATION_MAX_PARALLEL_FORKS=1
+          export INTEGRATION_MAX_HEAP_SIZE="1500M"
+          export CASSANDRA_USE_JDK11=true
+          
+          ./gradlew --stacktrace clean assemble check -x 
cassandra-analytics-integration-tests:test
+
+  integration-test:
+    name: Integration test
+    needs: build
+    runs-on: ubuntu-latest
+    strategy:
+      matrix:
+        scala: [ '2.12', '2.13' ]
+        cassandra: [ '4.0.17', '4.1.4', '5.0.5' ]
+        job_index: [ 0, 1, 2, 3, 4 ]
+        job_total: [ 5 ]
+        exclude:
+          - scala: "2.12"
+            cassandra: "5.0.5"
+          - scala: "2.12"
+            cassandra: "4.1.4"
+          - scala: "2.13"
+            cassandra: "4.0.17"
+      fail-fast: false
+    steps:
+      - name: Setup JDK
+        uses: actions/setup-java@v4
+        with:
+          distribution: 'temurin'
+          java-version: 11
+      - run: |
+          sudo bash -c 'for i in {2..20}; do echo 127.0.0.${i} localhost${i} 
>> /etc/hosts; done'
+          for i in {2..20}
+          do
+            sudo ip addr add "127.0.0.${i}" dev lo
+            sudo route add -host "127.0.0.${i}" dev lo;
+          done
+      - name: Cache Maven repository
+        uses: actions/cache@v4
+        with:
+          path: ~/.m2
+          key: maven-repo-${{ github.sha }}
+      - name: Cache workspace
+        id: cache-build-restore
+        uses: actions/cache/restore@v4
+        with:
+          path: ${{ github.workspace }}
+          key: build-${{ github.sha }}
+      - run: |
+          export SPARK_VERSION="3"
+          export SCALA_VERSION="${{ matrix.scala }}"
+          export JDK_VERSION="11"
+          export INTEGRATION_MAX_PARALLEL_FORKS=1
+          export INTEGRATION_MAX_HEAP_SIZE="4096M"
+          export CASSANDRA_USE_JDK11=true
+          
+          export DTEST_JAR="dtest-${{ matrix.cassandra }}.jar"
+          export CASSANDRA_VERSION=$(echo ${{ matrix.cassandra }} | cut -d'.' 
-f 1,2)
+          
+          ./gradlew --stacktrace clean assemble
+          
+          cd cassandra-analytics-integration-tests/src/test/java
+          CLASSNAMES=$(find . -name '*Test.java' | sort | cut -c 3- | sed 
's@/@.@g' | sed 's/.\{5\}$//' | awk 'NR % ${{ matrix.job_total }} == ${{ 
matrix.job_index }}')
+          cd ../../../..
+          
+          EXIT_STATUS=0
+          # Execution of "gradle test --test $TEST_NAME" returns non-zero exit 
code when commend did not run any test
+          # (e.g. when all tests are ignored). Currently there is no option to 
change Gradle behaviour.
+          # Workaround the issue by explicitly skipping test classes that 
cannot be executed on Cassandra 4.0.
+          
C40_EXCLUSIONS=("org.apache.cassandra.analytics.BulkWriteDownInstanceMultipleTokensTest"
 "org.apache.cassandra.analytics.BulkWriteDownSidecarMultipleTokensTest" 
"org.apache.cassandra.analytics.CassandraAnalyticsSimpleMultipleTokensTest" 
"org.apache.cassandra.analytics.RandomPartitionerTest" 
"org.apache.cassandra.analytics.testcontainer.BulkWriteS3CompatModeSimpleMultipleTokensTest"
 "org.apache.cassandra.analytics.data.ClearSnapshotTest")
+          for TEST_NAME in $CLASSNAMES; do
+            SKIP="false"
+            for C40_EXCLUSION in "${C40_EXCLUSIONS[@]}";
+            do
+              if [[ "$CASSANDRA_VERSION" == "4.0" && "$TEST_NAME" == 
${C40_EXCLUSION} ]]; then
+                SKIP="true"
+                break
+              fi
+            done
+
+            test_id=$(date +%H%M%S)
+            mkdir -p test-reports/$test_id
+
+            if [ $SKIP == "false" ]; then
+              echo Executing test $TEST_NAME
+              ./gradlew --stacktrace 
cassandra-analytics-integration-tests:test --tests $TEST_NAME --no-daemon || 
EXIT_STATUS=$?;
+              mv build/test-reports/* test-reports/$test_id
+            else
+              echo "Skipping test $TEST_NAME"
+            fi
+          done;
+          
+          tar czf integration-tests.tar.gz test-reports/*
+          
+          exit $EXIT_STATUS
+      - name: Publish test results
+        uses: actions/upload-artifact@v4
+        if: (!cancelled())
+        with:
+          name: integration-tests-${{ matrix.scala }}-${{ matrix.cassandra 
}}-${{ matrix.job_index }}
+          path: integration-tests.tar.gz
\ No newline at end of file
diff --git a/CHANGES.txt b/CHANGES.txt
index 53e81fd2..b2e71b6e 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,5 +1,6 @@
 0.4.0
 -----
+ * Setup CI Pipeline with GitHub Actions (CASSANALYTICS-106)
  * Flush event consumer before persisting CDC state to prevent data loss on 
failure (CASSANALYTICS-126)
  * Fix ReadStatusTracker to distinguish clean completion from error 
termination in BufferingCommitLogReader (CASSANALYTICS-129)
  * Adding CDC support for Cassandra 5.0 Commit Logs (CASSANALYTICS-60)
diff --git 
a/cassandra-analytics-integration-framework/src/main/java/org/apache/cassandra/distributed/impl/CassandraCluster.java
 
b/cassandra-analytics-integration-framework/src/main/java/org/apache/cassandra/distributed/impl/CassandraCluster.java
index 42bac995..93a877ea 100644
--- 
a/cassandra-analytics-integration-framework/src/main/java/org/apache/cassandra/distributed/impl/CassandraCluster.java
+++ 
b/cassandra-analytics-integration-framework/src/main/java/org/apache/cassandra/distributed/impl/CassandraCluster.java
@@ -20,6 +20,8 @@
 package org.apache.cassandra.distributed.impl;
 
 import java.io.IOException;
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
 import java.net.InetSocketAddress;
 import java.util.Arrays;
 import java.util.Iterator;
@@ -94,6 +96,11 @@ public class CassandraCluster<I extends IInstance> 
implements IClusterExtension<
         int originalNodeCount = nodesPerDc * dcCount;
         int finalNodeCount = dcCount * (nodesPerDc + newNodesPerDc);
 
+        if (requestedVersion.version.isLowerThan("4.1"))
+        {
+            updateCassandra40DTestSharedClasses();
+        }
+
         UpgradeableCluster.Builder clusterBuilder = 
UpgradeableCluster.build(originalNodeCount);
         clusterBuilder.withVersion(requestedVersion)
                       
.withDynamicPortAllocation(configuration.dynamicPortAllocation) // to allow 
parallel test runs
@@ -159,6 +166,27 @@ public class CassandraCluster<I extends IInstance> 
implements IClusterExtension<
         return (AbstractCluster<I>) cluster;
     }
 
+    /**
+     * CASSANDRA-16931 has not been backported to Cassandra 4.0, so we cannot
+     * configure shared classes. Applying a workaround with reflection.
+     */
+    private static void updateCassandra40DTestSharedClasses()
+    {
+        try
+        {
+            Field field = 
AbstractCluster.class.getDeclaredField("SHARED_PREDICATE");
+            field.setAccessible(true);
+            Field modifiersField = Field.class.getDeclaredField("modifiers");
+            modifiersField.setAccessible(true);
+            modifiersField.setInt(field, field.getModifiers() & 
~Modifier.FINAL);
+            field.set(null, ((Predicate<String>) field.get(null)).or(EXTRA));
+        }
+        catch (Exception e)
+        {
+            throw new IllegalStateException("Failed to adjust Cassandra 4.0 
DTest shared classes", e);
+        }
+    }
+
     // IClusterExtension methods
 
     @Override
diff --git 
a/cassandra-analytics-integration-framework/src/main/java/org/apache/cassandra/testing/TestUtils.java
 
b/cassandra-analytics-integration-framework/src/main/java/org/apache/cassandra/testing/TestUtils.java
index e98b5f32..a233d377 100644
--- 
a/cassandra-analytics-integration-framework/src/main/java/org/apache/cassandra/testing/TestUtils.java
+++ 
b/cassandra-analytics-integration-framework/src/main/java/org/apache/cassandra/testing/TestUtils.java
@@ -24,6 +24,8 @@ import java.util.concurrent.atomic.AtomicInteger;
 
 import com.google.common.collect.ImmutableMap;
 
+import com.vdurmont.semver4j.Semver;
+import org.apache.cassandra.distributed.shared.Versions;
 import org.apache.cassandra.sidecar.testing.QualifiedName;
 
 /**
@@ -130,4 +132,14 @@ public final class TestUtils
 
         System.setProperty("cassandra.minimum_replication_factor", "1");
     }
+
+    /**
+     * Utility method to know Cassandra cluster version before it is being 
initialized.
+     */
+    public static Semver getDTestClusterVersion()
+    {
+        Versions versions = Versions.find();
+        TestVersion testVersion = 
TestVersionSupplier.testVersions().findFirst().orElseThrow();
+        return versions.getLatest(new Semver(testVersion.version(), 
Semver.SemverType.LOOSE)).version;
+    }
 }
diff --git 
a/cassandra-analytics-integration-tests/src/test/java/org/apache/cassandra/analytics/BulkWriteDownInstanceMultipleTokensTest.java
 
b/cassandra-analytics-integration-tests/src/test/java/org/apache/cassandra/analytics/BulkWriteDownInstanceMultipleTokensTest.java
index 3351d546..fcd3de66 100644
--- 
a/cassandra-analytics-integration-tests/src/test/java/org/apache/cassandra/analytics/BulkWriteDownInstanceMultipleTokensTest.java
+++ 
b/cassandra-analytics-integration-tests/src/test/java/org/apache/cassandra/analytics/BulkWriteDownInstanceMultipleTokensTest.java
@@ -18,7 +18,11 @@
 
 package org.apache.cassandra.analytics;
 
+import com.vdurmont.semver4j.Semver;
 import org.apache.cassandra.testing.ClusterBuilderConfiguration;
+import org.apache.cassandra.testing.TestUtils;
+
+import static org.assertj.core.api.Assumptions.assumeThat;
 
 public class BulkWriteDownInstanceMultipleTokensTest extends 
BulkWriteDownInstanceTest
 {
@@ -28,4 +32,12 @@ public class BulkWriteDownInstanceMultipleTokensTest extends 
BulkWriteDownInstan
         return super.testClusterConfiguration()
                     .tokenCount(4);
     }
+
+    @Override
+    protected void beforeClusterProvisioning()
+    {
+        
assumeThat(TestUtils.getDTestClusterVersion().isGreaterThanOrEqualTo(new 
Semver("4.1", Semver.SemverType.LOOSE)))
+        .describedAs("Cassandra 4.0 DTest does not support v-nodes")
+        .isTrue();
+    }
 }
diff --git 
a/cassandra-analytics-integration-tests/src/test/java/org/apache/cassandra/analytics/BulkWriteDownSidecarMultipleTokensTest.java
 
b/cassandra-analytics-integration-tests/src/test/java/org/apache/cassandra/analytics/BulkWriteDownSidecarMultipleTokensTest.java
index 57e98920..645fc076 100644
--- 
a/cassandra-analytics-integration-tests/src/test/java/org/apache/cassandra/analytics/BulkWriteDownSidecarMultipleTokensTest.java
+++ 
b/cassandra-analytics-integration-tests/src/test/java/org/apache/cassandra/analytics/BulkWriteDownSidecarMultipleTokensTest.java
@@ -18,7 +18,11 @@
 
 package org.apache.cassandra.analytics;
 
+import com.vdurmont.semver4j.Semver;
 import org.apache.cassandra.testing.ClusterBuilderConfiguration;
+import org.apache.cassandra.testing.TestUtils;
+
+import static org.assertj.core.api.Assumptions.assumeThat;
 
 public class BulkWriteDownSidecarMultipleTokensTest extends 
BulkWriteDownSidecarTest
 {
@@ -28,4 +32,12 @@ public class BulkWriteDownSidecarMultipleTokensTest extends 
BulkWriteDownSidecar
         return super.testClusterConfiguration()
                     .tokenCount(4);
     }
+
+    @Override
+    protected void beforeClusterProvisioning()
+    {
+        
assumeThat(TestUtils.getDTestClusterVersion().isGreaterThanOrEqualTo(new 
Semver("4.1", Semver.SemverType.LOOSE)))
+        .describedAs("Cassandra 4.0 DTest does not support v-nodes")
+        .isTrue();
+    }
 }
diff --git 
a/cassandra-analytics-integration-tests/src/test/java/org/apache/cassandra/analytics/CassandraAnalyticsSimpleMultipleTokensTest.java
 
b/cassandra-analytics-integration-tests/src/test/java/org/apache/cassandra/analytics/CassandraAnalyticsSimpleMultipleTokensTest.java
index b5e9cf78..efd5b3ad 100644
--- 
a/cassandra-analytics-integration-tests/src/test/java/org/apache/cassandra/analytics/CassandraAnalyticsSimpleMultipleTokensTest.java
+++ 
b/cassandra-analytics-integration-tests/src/test/java/org/apache/cassandra/analytics/CassandraAnalyticsSimpleMultipleTokensTest.java
@@ -18,7 +18,11 @@
 
 package org.apache.cassandra.analytics;
 
+import com.vdurmont.semver4j.Semver;
 import org.apache.cassandra.testing.ClusterBuilderConfiguration;
+import org.apache.cassandra.testing.TestUtils;
+
+import static org.assertj.core.api.Assumptions.assumeThat;
 
 public class CassandraAnalyticsSimpleMultipleTokensTest extends 
CassandraAnalyticsSimpleTest
 {
@@ -28,4 +32,12 @@ public class CassandraAnalyticsSimpleMultipleTokensTest 
extends CassandraAnalyti
         return super.testClusterConfiguration()
                     .tokenCount(4);
     }
+
+    @Override
+    protected void beforeClusterProvisioning()
+    {
+        
assumeThat(TestUtils.getDTestClusterVersion().isGreaterThanOrEqualTo(new 
Semver("4.1", Semver.SemverType.LOOSE)))
+        .describedAs("Cassandra 4.0 DTest does not support v-nodes")
+        .isTrue();
+    }
 }
diff --git 
a/cassandra-analytics-integration-tests/src/test/java/org/apache/cassandra/analytics/RandomPartitionerTest.java
 
b/cassandra-analytics-integration-tests/src/test/java/org/apache/cassandra/analytics/RandomPartitionerTest.java
index 6f7dfa06..9705568f 100644
--- 
a/cassandra-analytics-integration-tests/src/test/java/org/apache/cassandra/analytics/RandomPartitionerTest.java
+++ 
b/cassandra-analytics-integration-tests/src/test/java/org/apache/cassandra/analytics/RandomPartitionerTest.java
@@ -19,7 +19,11 @@
 
 package org.apache.cassandra.analytics;
 
+import com.vdurmont.semver4j.Semver;
 import org.apache.cassandra.testing.ClusterBuilderConfiguration;
+import org.apache.cassandra.testing.TestUtils;
+
+import static org.assertj.core.api.Assumptions.assumeThat;
 
 /**
  * Runs test from {@link CassandraAnalyticsSimpleTest} with the {@code 
RandomPartitioner}.
@@ -37,4 +41,12 @@ class RandomPartitionerTest extends 
CassandraAnalyticsSimpleTest
     {
         return 
super.testClusterConfiguration().partitioner("org.apache.cassandra.dht.RandomPartitioner");
     }
+
+    @Override
+    protected void beforeClusterProvisioning()
+    {
+        // Cassandra 4.0 DTest uses TokenSupplier#token(int) method, which 
fails for big integer token.
+        assumeThat(TestUtils.getDTestClusterVersion()
+                            .isGreaterThanOrEqualTo(new Semver("4.1", 
Semver.SemverType.LOOSE))).isTrue();
+    }
 }
diff --git 
a/cassandra-analytics-integration-tests/src/test/java/org/apache/cassandra/analytics/data/ClearSnapshotTest.java
 
b/cassandra-analytics-integration-tests/src/test/java/org/apache/cassandra/analytics/data/ClearSnapshotTest.java
index 261502a9..ebb89a5f 100644
--- 
a/cassandra-analytics-integration-tests/src/test/java/org/apache/cassandra/analytics/data/ClearSnapshotTest.java
+++ 
b/cassandra-analytics-integration-tests/src/test/java/org/apache/cassandra/analytics/data/ClearSnapshotTest.java
@@ -31,16 +31,19 @@ import java.util.stream.Stream;
 
 import org.junit.jupiter.api.Test;
 
+import com.vdurmont.semver4j.Semver;
 import org.apache.cassandra.analytics.SharedClusterSparkIntegrationTestBase;
 import org.apache.cassandra.distributed.api.ConsistencyLevel;
 import org.apache.cassandra.distributed.shared.Uninterruptibles;
 import org.apache.cassandra.sidecar.testing.QualifiedName;
+import org.apache.cassandra.testing.TestUtils;
 import org.apache.spark.sql.DataFrameReader;
 import org.apache.spark.sql.Row;
 
 import static org.apache.cassandra.testing.TestUtils.DC1_RF1;
 import static org.apache.cassandra.testing.TestUtils.TEST_KEYSPACE;
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assumptions.assumeThat;
 
 class ClearSnapshotTest extends SharedClusterSparkIntegrationTestBase
 {
@@ -117,6 +120,9 @@ class ClearSnapshotTest extends 
SharedClusterSparkIntegrationTestBase
     @Override
     protected void beforeClusterProvisioning()
     {
+        
assumeThat(TestUtils.getDTestClusterVersion().isGreaterThanOrEqualTo(new 
Semver("4.1", Semver.SemverType.LOOSE)))
+        .describedAs("TTL support for snapshot was added to Cassandra 4.1 as 
part of CASSANDRA-16789")
+        .isTrue();
         
System.setProperty("cassandra.snapshot.ttl_cleanup_initial_delay_seconds", "0");
         System.setProperty("cassandra.snapshot.ttl_cleanup_period_seconds", 
"1");
         System.setProperty("cassandra.snapshot.min_allowed_ttl_seconds", "5");
diff --git 
a/cassandra-analytics-integration-tests/src/test/java/org/apache/cassandra/analytics/testcontainer/BulkWriteS3CompatModeSimpleMultipleTokensTest.java
 
b/cassandra-analytics-integration-tests/src/test/java/org/apache/cassandra/analytics/testcontainer/BulkWriteS3CompatModeSimpleMultipleTokensTest.java
index c75ba488..8a0f4fdf 100644
--- 
a/cassandra-analytics-integration-tests/src/test/java/org/apache/cassandra/analytics/testcontainer/BulkWriteS3CompatModeSimpleMultipleTokensTest.java
+++ 
b/cassandra-analytics-integration-tests/src/test/java/org/apache/cassandra/analytics/testcontainer/BulkWriteS3CompatModeSimpleMultipleTokensTest.java
@@ -18,7 +18,11 @@
 
 package org.apache.cassandra.analytics.testcontainer;
 
+import com.vdurmont.semver4j.Semver;
 import org.apache.cassandra.testing.ClusterBuilderConfiguration;
+import org.apache.cassandra.testing.TestUtils;
+
+import static org.assertj.core.api.Assumptions.assumeThat;
 
 public class BulkWriteS3CompatModeSimpleMultipleTokensTest extends 
BulkWriteS3CompatModeSimpleTest
 {
@@ -28,4 +32,12 @@ public class BulkWriteS3CompatModeSimpleMultipleTokensTest 
extends BulkWriteS3Co
         return super.testClusterConfiguration()
                     .tokenCount(4);
     }
+
+    @Override
+    protected void beforeClusterProvisioning()
+    {
+        
assumeThat(TestUtils.getDTestClusterVersion().isGreaterThanOrEqualTo(new 
Semver("4.1", Semver.SemverType.LOOSE)))
+        .describedAs("Cassandra 4.0 DTest does not support v-nodes")
+        .isTrue();
+    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to