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

absurdfarce pushed a commit to branch 4.x
in repository https://gitbox.apache.org/repos/asf/cassandra-java-driver.git


The following commit(s) were added to refs/heads/4.x by this push:
     new 1492d6ced CASSANDRA-19292: Enable Jenkins to test against Cassandra 
4.1.x
1492d6ced is described below

commit 1492d6ced9d54bdd68deb043a0bfe232eaa2a8fc
Author: absurdfarce <bret.mcgu...@datastax.com>
AuthorDate: Fri Mar 29 00:46:46 2024 -0500

    CASSANDRA-19292: Enable Jenkins to test against Cassandra 4.1.x
    
    patch by Bret McGuire; reviewed by Bret McGuire, Alexandre Dutra for 
CASSANDRA-19292
---
 Jenkinsfile                                        | 20 ++++---
 .../com/datastax/oss/driver/api/core/Version.java  |  1 +
 .../oss/driver/core/metadata/SchemaIT.java         | 13 +++++
 .../oss/driver/api/testinfra/ccm/CcmBridge.java    | 61 ++++++++++++++++++++--
 4 files changed, 86 insertions(+), 9 deletions(-)

diff --git a/Jenkinsfile b/Jenkinsfile
index 8d2b74c5b..0bfa4ca7f 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -256,8 +256,10 @@ pipeline {
       choices: ['2.1',       // Legacy Apache CassandraⓇ
                 '2.2',       // Legacy Apache CassandraⓇ
                 '3.0',       // Previous Apache CassandraⓇ
-                '3.11',      // Current Apache CassandraⓇ
-                '4.0',       // Development Apache CassandraⓇ
+                '3.11',      // Previous Apache CassandraⓇ
+                '4.0',       // Previous Apache CassandraⓇ
+                '4.1',       // Current Apache CassandraⓇ
+                '5.0',       // Development Apache CassandraⓇ
                 'dse-4.8.16',   // Previous EOSL DataStax Enterprise
                 'dse-5.0.15',   // Long Term Support DataStax Enterprise
                 'dse-5.1.35',   // Legacy DataStax Enterprise
@@ -291,7 +293,11 @@ pipeline {
                         </tr>
                         <tr>
                           <td><strong>4.0</strong></td>
-                          <td>Apache Cassandra&reg; v4.x (<b>CURRENTLY UNDER 
DEVELOPMENT</b>)</td>
+                          <td>Apache Cassandra&reg; v4.0.x</td>
+                        </tr>
+                        <tr>
+                          <td><strong>4.1</strong></td>
+                          <td>Apache Cassandra&reg; v4.1.x</td>
                         </tr>
                         <tr>
                           <td><strong>dse-4.8.16</strong></td>
@@ -445,7 +451,7 @@ pipeline {
           axis {
             name 'SERVER_VERSION'
             values '3.11',     // Latest stable Apache CassandraⓇ
-                   '4.0',      // Development Apache CassandraⓇ
+                   '4.1',      // Development Apache CassandraⓇ
                    'dse-6.8.30' // Current DataStax Enterprise
           }
           axis {
@@ -554,8 +560,10 @@ pipeline {
             name 'SERVER_VERSION'
             values '2.1',       // Legacy Apache CassandraⓇ
                    '3.0',       // Previous Apache CassandraⓇ
-                   '3.11',      // Current Apache CassandraⓇ
-                   '4.0',       // Development Apache CassandraⓇ
+                   '3.11',      // Previous Apache CassandraⓇ
+                   '4.0',       // Previous Apache CassandraⓇ
+                   '4.1',       // Current Apache CassandraⓇ
+                   '5.0',       // Development Apache CassandraⓇ
                    'dse-4.8.16',   // Previous EOSL DataStax Enterprise
                    'dse-5.0.15',   // Last EOSL DataStax Enterprise
                    'dse-5.1.35',   // Legacy DataStax Enterprise
diff --git a/core/src/main/java/com/datastax/oss/driver/api/core/Version.java 
b/core/src/main/java/com/datastax/oss/driver/api/core/Version.java
index cc4931fe2..3f12c54fa 100644
--- a/core/src/main/java/com/datastax/oss/driver/api/core/Version.java
+++ b/core/src/main/java/com/datastax/oss/driver/api/core/Version.java
@@ -52,6 +52,7 @@ public class Version implements Comparable<Version>, 
Serializable {
   @NonNull public static final Version V2_2_0 = 
Objects.requireNonNull(parse("2.2.0"));
   @NonNull public static final Version V3_0_0 = 
Objects.requireNonNull(parse("3.0.0"));
   @NonNull public static final Version V4_0_0 = 
Objects.requireNonNull(parse("4.0.0"));
+  @NonNull public static final Version V4_1_0 = 
Objects.requireNonNull(parse("4.1.0"));
   @NonNull public static final Version V5_0_0 = 
Objects.requireNonNull(parse("5.0.0"));
   @NonNull public static final Version V6_7_0 = 
Objects.requireNonNull(parse("6.7.0"));
   @NonNull public static final Version V6_8_0 = 
Objects.requireNonNull(parse("6.8.0"));
diff --git 
a/integration-tests/src/test/java/com/datastax/oss/driver/core/metadata/SchemaIT.java
 
b/integration-tests/src/test/java/com/datastax/oss/driver/core/metadata/SchemaIT.java
index caa96a647..6495b451d 100644
--- 
a/integration-tests/src/test/java/com/datastax/oss/driver/core/metadata/SchemaIT.java
+++ 
b/integration-tests/src/test/java/com/datastax/oss/driver/core/metadata/SchemaIT.java
@@ -265,6 +265,19 @@ public class SchemaIT {
                   + "    total bigint,\n"
                   + "    unit text,\n"
                   + "    PRIMARY KEY (keyspace_name, table_name, task_id)\n"
+                  + "); */",
+              // Cassandra 4.1
+              "/* VIRTUAL TABLE system_views.sstable_tasks (\n"
+                  + "    keyspace_name text,\n"
+                  + "    table_name text,\n"
+                  + "    task_id timeuuid,\n"
+                  + "    completion_ratio double,\n"
+                  + "    kind text,\n"
+                  + "    progress bigint,\n"
+                  + "    sstables int,\n"
+                  + "    total bigint,\n"
+                  + "    unit text,\n"
+                  + "    PRIMARY KEY (keyspace_name, table_name, task_id)\n"
                   + "); */");
       // ColumnMetadata is as expected
       ColumnMetadata cm = tm.getColumn("progress").get();
diff --git 
a/test-infra/src/main/java/com/datastax/oss/driver/api/testinfra/ccm/CcmBridge.java
 
b/test-infra/src/main/java/com/datastax/oss/driver/api/testinfra/ccm/CcmBridge.java
index 5f845243b..98739e771 100644
--- 
a/test-infra/src/main/java/com/datastax/oss/driver/api/testinfra/ccm/CcmBridge.java
+++ 
b/test-infra/src/main/java/com/datastax/oss/driver/api/testinfra/ccm/CcmBridge.java
@@ -236,12 +236,33 @@ public class CcmBridge implements AutoCloseable {
           Arrays.stream(nodes).mapToObj(n -> "" + 
n).collect(Collectors.joining(":")),
           createOptions.stream().collect(Collectors.joining(" ")));
 
+      Version cassandraVersion = getCassandraVersion();
       for (Map.Entry<String, Object> conf : cassandraConfiguration.entrySet()) 
{
-        execute("updateconf", String.format("%s:%s", conf.getKey(), 
conf.getValue()));
+        String originalKey = conf.getKey();
+        Object originalValue = conf.getValue();
+        execute(
+            "updateconf",
+            String.join(
+                ":",
+                getConfigKey(originalKey, originalValue, cassandraVersion),
+                getConfigValue(originalKey, originalValue, cassandraVersion)));
       }
-      if (getCassandraVersion().compareTo(Version.V2_2_0) >= 0) {
-        execute("updateconf", "enable_user_defined_functions:true");
+
+      // If we're dealing with anything more recent than 2.2 explicitly enable 
UDF... but run it
+      // through our conversion process to make
+      // sure more recent versions don't have a problem.
+      if (cassandraVersion.compareTo(Version.V2_2_0) >= 0) {
+        String originalKey = "enable_user_defined_functions";
+        Object originalValue = "true";
+        execute(
+            "updateconf",
+            String.join(
+                ":",
+                getConfigKey(originalKey, originalValue, cassandraVersion),
+                getConfigValue(originalKey, originalValue, cassandraVersion)));
       }
+
+      // Note that we aren't performing any substitution on DSE key/value 
props (at least for now)
       if (DSE_ENABLEMENT) {
         for (Map.Entry<String, Object> conf : dseConfiguration.entrySet()) {
           execute("updatedseconf", String.format("%s:%s", conf.getKey(), 
conf.getValue()));
@@ -463,6 +484,40 @@ public class CcmBridge implements AutoCloseable {
     return Optional.empty();
   }
 
+  private static String IN_MS_STR = "_in_ms";
+  private static int IN_MS_STR_LENGTH = IN_MS_STR.length();
+  private static String ENABLE_STR = "enable_";
+  private static int ENABLE_STR_LENGTH = ENABLE_STR.length();
+  private static String IN_KB_STR = "_in_kb";
+  private static int IN_KB_STR_LENGTH = IN_KB_STR.length();
+
+  @SuppressWarnings("unused")
+  private String getConfigKey(String originalKey, Object originalValue, 
Version cassandraVersion) {
+
+    // At least for now we won't support substitutions on nested keys.  This 
requires an extra
+    // traversal of the string
+    // but we'll live with that for now
+    if (originalKey.contains(".")) return originalKey;
+    if (cassandraVersion.compareTo(Version.V4_1_0) < 0) return originalKey;
+    if (originalKey.endsWith(IN_MS_STR))
+      return originalKey.substring(0, originalKey.length() - IN_MS_STR_LENGTH);
+    if (originalKey.startsWith(ENABLE_STR))
+      return originalKey.substring(ENABLE_STR_LENGTH) + "_enabled";
+    if (originalKey.endsWith(IN_KB_STR))
+      return originalKey.substring(0, originalKey.length() - IN_KB_STR_LENGTH);
+    return originalKey;
+  }
+
+  private String getConfigValue(
+      String originalKey, Object originalValue, Version cassandraVersion) {
+
+    String originalValueStr = originalValue.toString();
+    if (cassandraVersion.compareTo(Version.V4_1_0) < 0) return 
originalValueStr;
+    if (originalKey.endsWith(IN_MS_STR)) return originalValueStr + "ms";
+    if (originalKey.endsWith(IN_KB_STR)) return originalValueStr + "KiB";
+    return originalValueStr;
+  }
+
   public static Builder builder() {
     return new Builder();
   }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org

Reply via email to