From dfc6062134b884019d7dea38ee655eb97ab821ed Mon Sep 17 00:00:00 2001 From: Yifan Cai Date: Thu, 19 Mar 2026 21:53:14 -0700 Subject: [PATCH 1/3] CASSANALYTICS-137: Add end to end test with BTI format sstable Patch by Yifan Cai; Reviewed by TBD for CASSANALYTICS-137 --- .../CassandraAnalyticsSimpleBtiTest.java | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 cassandra-analytics-integration-tests/src/test/java/org/apache/cassandra/analytics/CassandraAnalyticsSimpleBtiTest.java diff --git a/cassandra-analytics-integration-tests/src/test/java/org/apache/cassandra/analytics/CassandraAnalyticsSimpleBtiTest.java b/cassandra-analytics-integration-tests/src/test/java/org/apache/cassandra/analytics/CassandraAnalyticsSimpleBtiTest.java new file mode 100644 index 00000000..1cb239b2 --- /dev/null +++ b/cassandra-analytics-integration-tests/src/test/java/org/apache/cassandra/analytics/CassandraAnalyticsSimpleBtiTest.java @@ -0,0 +1,47 @@ +/* + * 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. + */ + +package org.apache.cassandra.analytics; + +import java.util.HashMap; +import java.util.Map; + +import org.apache.cassandra.testing.ClusterBuilderConfiguration; + +/** + * A simple test that runs a sample read/write Cassandra Analytics job using BTI format SSTable. + */ +class CassandraAnalyticsSimpleBtiTest extends CassandraAnalyticsSimpleTest +{ + static + { + System.setProperty("spark.cassandra_analytics.cassandra.version", "5.0.0"); + System.setProperty("cassandra.analytics.bridges.sstable_format", "bti"); + } + + @Override + protected ClusterBuilderConfiguration testClusterConfiguration() + { + ClusterBuilderConfiguration conf = super.testClusterConfiguration(); + Map additionalConf = new HashMap<>(conf.additionalInstanceConfig); + additionalConf.put("sstable", Map.of("selected_format", "bti")); + conf.additionalInstanceConfig(additionalConf); + return conf; + } +} From 84cca2c8606f4746a9c07f66ff5b69c173a63ac3 Mon Sep 17 00:00:00 2001 From: Yifan Cai Date: Mon, 23 Mar 2026 13:03:55 -0700 Subject: [PATCH 2/3] address comments --- .../cassandra/bridge/CassandraVersion.java | 8 ++++++-- .../CassandraAnalyticsSimpleBtiTest.java | 17 ++++++++++++++++- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/cassandra-analytics-common/src/main/java/org/apache/cassandra/bridge/CassandraVersion.java b/cassandra-analytics-common/src/main/java/org/apache/cassandra/bridge/CassandraVersion.java index 167039ef..f524f7bd 100644 --- a/cassandra-analytics-common/src/main/java/org/apache/cassandra/bridge/CassandraVersion.java +++ b/cassandra-analytics-common/src/main/java/org/apache/cassandra/bridge/CassandraVersion.java @@ -20,7 +20,6 @@ package org.apache.cassandra.bridge; import java.util.Arrays; -import java.util.HashSet; import java.util.Optional; import java.util.Set; @@ -50,7 +49,7 @@ public enum CassandraVersion this.number = number; this.name = name; this.jarBaseName = jarBaseName; - this.sstableFormats = new HashSet<>(Arrays.asList(sstableFormats)); + this.sstableFormats = Set.copyOf(Arrays.asList(sstableFormats)); } public int versionNumber() @@ -68,6 +67,11 @@ public String jarBaseName() return jarBaseName; } + public Set supportedSSTableFormats() + { + return sstableFormats; + } + private static final String sstableFormat; private static final CassandraVersion[] implementedVersions; private static final String[] supportedVersions; diff --git a/cassandra-analytics-integration-tests/src/test/java/org/apache/cassandra/analytics/CassandraAnalyticsSimpleBtiTest.java b/cassandra-analytics-integration-tests/src/test/java/org/apache/cassandra/analytics/CassandraAnalyticsSimpleBtiTest.java index 1cb239b2..0aca727b 100644 --- a/cassandra-analytics-integration-tests/src/test/java/org/apache/cassandra/analytics/CassandraAnalyticsSimpleBtiTest.java +++ b/cassandra-analytics-integration-tests/src/test/java/org/apache/cassandra/analytics/CassandraAnalyticsSimpleBtiTest.java @@ -22,7 +22,12 @@ import java.util.HashMap; import java.util.Map; +import org.apache.cassandra.bridge.CassandraVersion; import org.apache.cassandra.testing.ClusterBuilderConfiguration; +import org.apache.cassandra.testing.TestUtils; + +import static org.assertj.core.api.Assumptions.assumeThat; + /** * A simple test that runs a sample read/write Cassandra Analytics job using BTI format SSTable. @@ -31,10 +36,20 @@ class CassandraAnalyticsSimpleBtiTest extends CassandraAnalyticsSimpleTest { static { - System.setProperty("spark.cassandra_analytics.cassandra.version", "5.0.0"); System.setProperty("cassandra.analytics.bridges.sstable_format", "bti"); } + @Override + protected void beforeClusterProvisioning() + { + String version = TestUtils.getDTestClusterVersion().getValue(); + assumeThat(CassandraVersion.fromVersion(version) + .orElseThrow() + .supportedSSTableFormats()) + .as("BTI SSTable format is not supported in %s", version) + .contains("bti"); + } + @Override protected ClusterBuilderConfiguration testClusterConfiguration() { From 46d49e0d83a2873defa2aa1357559e8d1255be14 Mon Sep 17 00:00:00 2001 From: Yifan Cai Date: Mon, 23 Mar 2026 13:04:09 -0700 Subject: [PATCH 3/3] Update schema to use clustering key --- .../src/main/java/org/apache/cassandra/testing/TestUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 a233d377..b78ce415 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 @@ -54,7 +54,7 @@ public final class TestUtils * read repairs. */ public static final String CREATE_TEST_TABLE_STATEMENT = - "CREATE TABLE IF NOT EXISTS %s (id int, course text, marks int, PRIMARY KEY (id)) WITH read_repair='NONE';"; + "CREATE TABLE IF NOT EXISTS %s (id int, course text, marks int, PRIMARY KEY (id, course)) WITH read_repair='NONE';"; private TestUtils() {