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

asf-gitbox-commits pushed a commit to branch cassandra-6.0
in repository https://gitbox.apache.org/repos/asf/cassandra.git


The following commit(s) were added to refs/heads/cassandra-6.0 by this push:
     new bc6e4a2b63 Fix flaky test DropAccordTableTest
bc6e4a2b63 is described below

commit bc6e4a2b63652c4779ddcee77bb17186428fa2c1
Author: David Capwell <[email protected]>
AuthorDate: Wed May 27 13:28:05 2026 -0700

    Fix flaky test DropAccordTableTest
    
    patch by David Capwell; reviewed by Caleb Rackliffe for CASSANDRA-21397
---
 .../apache/cassandra/utils/AbstractTypeGenerators.java  | 11 +++++++++--
 .../org/apache/cassandra/utils/CassandraGenerators.java | 17 ++++++++++++++++-
 2 files changed, 25 insertions(+), 3 deletions(-)

diff --git a/test/unit/org/apache/cassandra/utils/AbstractTypeGenerators.java 
b/test/unit/org/apache/cassandra/utils/AbstractTypeGenerators.java
index 7ff9683d45..bde6482e91 100644
--- a/test/unit/org/apache/cassandra/utils/AbstractTypeGenerators.java
+++ b/test/unit/org/apache/cassandra/utils/AbstractTypeGenerators.java
@@ -828,16 +828,19 @@ public final class AbstractTypeGenerators
         return userTypeGen(elementGen, sizeGen, ksGen, nameGen, BOOLEAN_GEN);
     }
 
-    private static ThreadLocal<String> OVERRIDE_KEYSPACE = new ThreadLocal<>();
+    private static final ThreadLocal<String> OVERRIDE_KEYSPACE = new 
ThreadLocal<>();
+    private static final ThreadLocal<Set<String>> SEEN_UDT_NAMES = new 
ThreadLocal<>();
 
     public static void overrideUDTKeyspace(String ks)
     {
         OVERRIDE_KEYSPACE.set(ks);
+        SEEN_UDT_NAMES.set(new HashSet<>());
     }
 
     public static void clearUDTKeyspace()
     {
         OVERRIDE_KEYSPACE.remove();
+        SEEN_UDT_NAMES.remove();
     }
 
     public interface UserTypeFieldsGen
@@ -876,7 +879,11 @@ public final class AbstractTypeGenerators
             String ks = OVERRIDE_KEYSPACE.get();
             if (ks == null)
                 ks = ksGen.generate(rnd);
-            String name = nameGen.generate(rnd);
+            Set<String> seenNames = SEEN_UDT_NAMES.get();
+            Gen<String> localNameGen = nameGen;
+            if (seenNames != null)
+                localNameGen = Generators.filter(nameGen, seenNames::add);
+            String name = localNameGen.generate(rnd);
             ByteBuffer nameBB = AsciiType.instance.decompose(name);
 
             for (int i = 0; i < numElements; i++)
diff --git a/test/unit/org/apache/cassandra/utils/CassandraGenerators.java 
b/test/unit/org/apache/cassandra/utils/CassandraGenerators.java
index 651b85022a..e3d4017744 100644
--- a/test/unit/org/apache/cassandra/utils/CassandraGenerators.java
+++ b/test/unit/org/apache/cassandra/utils/CassandraGenerators.java
@@ -1750,6 +1750,7 @@ public final class CassandraGenerators
         Set<UserType> udts = CassandraGenerators.extractUDTs(metadata);
         if (!udts.isEmpty())
         {
+            List<UserType> ordered = new ArrayList<>();
             Deque<UserType> pending = new ArrayDeque<>(udts);
             Set<ByteBuffer> visited = new HashSet<>();
             while (!pending.isEmpty())
@@ -1759,8 +1760,22 @@ public final class CassandraGenerators
                 subTypes.remove(next); // it includes self
                 if (subTypes.isEmpty() || subTypes.stream().allMatch(t -> 
visited.contains(t.name)))
                 {
-                    fn.accept(next);
+                    try 
+                    {
+                        fn.accept(next);
+                    } 
+                    catch (Throwable t) 
+                    {
+                        StringBuilder sb = new StringBuilder();
+                        sb.append("Unable to add type 
").append(next.toCqlString(false, false, false));
+                        sb.append("\nHistory:");
+                        for (var udt : ordered)
+                            sb.append("\n\t").append(udt.toCqlString(false, 
false, false));
+                        AssertionError e = new AssertionError(sb.toString(), 
t);
+                        throw e;
+                    }
                     visited.add(next.name);
+                    ordered.add(next);
                 }
                 else
                 {


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

Reply via email to