Skip to content

Commit bc6e4a2

Browse files
committed
Fix flaky test DropAccordTableTest
patch by David Capwell; reviewed by Caleb Rackliffe for CASSANDRA-21397
1 parent bf711a0 commit bc6e4a2

2 files changed

Lines changed: 25 additions & 3 deletions

File tree

test/unit/org/apache/cassandra/utils/AbstractTypeGenerators.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -828,16 +828,19 @@ public static Gen<UserType> userTypeGen(Gen<AbstractType<?>> elementGen, Gen<Int
828828
return userTypeGen(elementGen, sizeGen, ksGen, nameGen, BOOLEAN_GEN);
829829
}
830830

831-
private static ThreadLocal<String> OVERRIDE_KEYSPACE = new ThreadLocal<>();
831+
private static final ThreadLocal<String> OVERRIDE_KEYSPACE = new ThreadLocal<>();
832+
private static final ThreadLocal<Set<String>> SEEN_UDT_NAMES = new ThreadLocal<>();
832833

833834
public static void overrideUDTKeyspace(String ks)
834835
{
835836
OVERRIDE_KEYSPACE.set(ks);
837+
SEEN_UDT_NAMES.set(new HashSet<>());
836838
}
837839

838840
public static void clearUDTKeyspace()
839841
{
840842
OVERRIDE_KEYSPACE.remove();
843+
SEEN_UDT_NAMES.remove();
841844
}
842845

843846
public interface UserTypeFieldsGen
@@ -876,7 +879,11 @@ public static Gen<UserType> userTypeGen(UserTypeFieldsGen fieldNamesGen, Gen<Abs
876879
String ks = OVERRIDE_KEYSPACE.get();
877880
if (ks == null)
878881
ks = ksGen.generate(rnd);
879-
String name = nameGen.generate(rnd);
882+
Set<String> seenNames = SEEN_UDT_NAMES.get();
883+
Gen<String> localNameGen = nameGen;
884+
if (seenNames != null)
885+
localNameGen = Generators.filter(nameGen, seenNames::add);
886+
String name = localNameGen.generate(rnd);
880887
ByteBuffer nameBB = AsciiType.instance.decompose(name);
881888

882889
for (int i = 0; i < numElements; i++)

test/unit/org/apache/cassandra/utils/CassandraGenerators.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1750,6 +1750,7 @@ public static void visitUDTs(TableMetadata metadata, Consumer<UserType> fn)
17501750
Set<UserType> udts = CassandraGenerators.extractUDTs(metadata);
17511751
if (!udts.isEmpty())
17521752
{
1753+
List<UserType> ordered = new ArrayList<>();
17531754
Deque<UserType> pending = new ArrayDeque<>(udts);
17541755
Set<ByteBuffer> visited = new HashSet<>();
17551756
while (!pending.isEmpty())
@@ -1759,8 +1760,22 @@ public static void visitUDTs(TableMetadata metadata, Consumer<UserType> fn)
17591760
subTypes.remove(next); // it includes self
17601761
if (subTypes.isEmpty() || subTypes.stream().allMatch(t -> visited.contains(t.name)))
17611762
{
1762-
fn.accept(next);
1763+
try
1764+
{
1765+
fn.accept(next);
1766+
}
1767+
catch (Throwable t)
1768+
{
1769+
StringBuilder sb = new StringBuilder();
1770+
sb.append("Unable to add type ").append(next.toCqlString(false, false, false));
1771+
sb.append("\nHistory:");
1772+
for (var udt : ordered)
1773+
sb.append("\n\t").append(udt.toCqlString(false, false, false));
1774+
AssertionError e = new AssertionError(sb.toString(), t);
1775+
throw e;
1776+
}
17631777
visited.add(next.name);
1778+
ordered.add(next);
17641779
}
17651780
else
17661781
{

0 commit comments

Comments
 (0)