diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml
index 5c684e90b2a..d974d768ea3 100644
--- a/integration-tests/pom.xml
+++ b/integration-tests/pom.xml
@@ -242,6 +242,8 @@
8
${project.build.directory}/failsafe-reports/failsafe-summary-parallelized.xml
${skipParallelizableITs}
+ ${blockhound.argline}
+ ${testing.jvm}/bin/java
@@ -253,6 +255,7 @@
com.datastax.oss.driver.categories.ParallelizableTests, com.datastax.oss.driver.categories.IsolatedTests
${project.build.directory}/failsafe-reports/failsafe-summary-serial.xml
${skipSerialITs}
+ ${blockhound.argline}
${testing.jvm}/bin/java
diff --git a/integration-tests/src/test/java/com/datastax/dse/driver/api/core/auth/DseProxyAuthenticationIT.java b/integration-tests/src/test/java/com/datastax/dse/driver/api/core/auth/DseProxyAuthenticationIT.java
index 126a110da1a..a3f1c04afc0 100644
--- a/integration-tests/src/test/java/com/datastax/dse/driver/api/core/auth/DseProxyAuthenticationIT.java
+++ b/integration-tests/src/test/java/com/datastax/dse/driver/api/core/auth/DseProxyAuthenticationIT.java
@@ -29,6 +29,7 @@
import com.datastax.oss.driver.api.core.cql.ResultSet;
import com.datastax.oss.driver.api.core.cql.SimpleStatement;
import com.datastax.oss.driver.api.core.servererrors.UnauthorizedException;
+import com.datastax.oss.driver.api.testinfra.ccm.SchemaChangeSynchronizer;
import com.datastax.oss.driver.api.testinfra.requirement.BackendRequirement;
import com.datastax.oss.driver.api.testinfra.requirement.BackendType;
import com.datastax.oss.driver.api.testinfra.session.SessionUtils;
@@ -57,33 +58,38 @@ public static void addUsers() {
@Before
public void setupRoles() {
- try (CqlSession session = ads.newKeyTabSession()) {
- session.execute(
- "CREATE ROLE IF NOT EXISTS alice WITH PASSWORD = 'fakePasswordForAlice' AND LOGIN = FALSE");
- session.execute(
- "CREATE ROLE IF NOT EXISTS ben WITH PASSWORD = 'fakePasswordForBen' AND LOGIN = TRUE");
- session.execute("CREATE ROLE IF NOT EXISTS 'bob@DATASTAX.COM' WITH LOGIN = TRUE");
- session.execute(
- "CREATE ROLE IF NOT EXISTS 'charlie@DATASTAX.COM' WITH PASSWORD = 'fakePasswordForCharlie' AND LOGIN = TRUE");
- session.execute(
- "CREATE ROLE IF NOT EXISTS steve WITH PASSWORD = 'fakePasswordForSteve' AND LOGIN = TRUE");
- session.execute(
- "CREATE KEYSPACE IF NOT EXISTS aliceks WITH REPLICATION = {'class':'SimpleStrategy', 'replication_factor':'1'}");
- session.execute(
- "CREATE TABLE IF NOT EXISTS aliceks.alicetable (key text PRIMARY KEY, value text)");
- session.execute("INSERT INTO aliceks.alicetable (key, value) VALUES ('hello', 'world')");
- session.execute("GRANT ALL ON KEYSPACE aliceks TO alice");
- session.execute("GRANT EXECUTE ON ALL AUTHENTICATION SCHEMES TO 'ben'");
- session.execute("GRANT EXECUTE ON ALL AUTHENTICATION SCHEMES TO 'bob@DATASTAX.COM'");
- session.execute("GRANT EXECUTE ON ALL AUTHENTICATION SCHEMES TO 'steve'");
- session.execute("GRANT EXECUTE ON ALL AUTHENTICATION SCHEMES TO 'charlie@DATASTAX.COM'");
- session.execute("GRANT PROXY.LOGIN ON ROLE 'alice' TO 'ben'");
- session.execute("GRANT PROXY.LOGIN ON ROLE 'alice' TO 'bob@DATASTAX.COM'");
- session.execute("GRANT PROXY.EXECUTE ON ROLE 'alice' TO 'steve'");
- session.execute("GRANT PROXY.EXECUTE ON ROLE 'alice' TO 'charlie@DATASTAX.COM'");
- // ben and bob are allowed to login as alice, but not execute as alice.
- // charlie and steve are allowed to execute as alice, but not login as alice.
- }
+ SchemaChangeSynchronizer.withLock(
+ () -> {
+ try (CqlSession session = ads.newKeyTabSession()) {
+ session.execute(
+ "CREATE ROLE IF NOT EXISTS alice WITH PASSWORD = 'fakePasswordForAlice' AND LOGIN = FALSE");
+ session.execute(
+ "CREATE ROLE IF NOT EXISTS ben WITH PASSWORD = 'fakePasswordForBen' AND LOGIN = TRUE");
+ session.execute("CREATE ROLE IF NOT EXISTS 'bob@DATASTAX.COM' WITH LOGIN = TRUE");
+ session.execute(
+ "CREATE ROLE IF NOT EXISTS 'charlie@DATASTAX.COM' WITH PASSWORD = 'fakePasswordForCharlie' AND LOGIN = TRUE");
+ session.execute(
+ "CREATE ROLE IF NOT EXISTS steve WITH PASSWORD = 'fakePasswordForSteve' AND LOGIN = TRUE");
+ session.execute(
+ "CREATE KEYSPACE IF NOT EXISTS aliceks WITH REPLICATION = {'class':'SimpleStrategy', 'replication_factor':'1'}");
+ session.execute(
+ "CREATE TABLE IF NOT EXISTS aliceks.alicetable (key text PRIMARY KEY, value text)");
+ session.execute(
+ "INSERT INTO aliceks.alicetable (key, value) VALUES ('hello', 'world')");
+ session.execute("GRANT ALL ON KEYSPACE aliceks TO alice");
+ session.execute("GRANT EXECUTE ON ALL AUTHENTICATION SCHEMES TO 'ben'");
+ session.execute("GRANT EXECUTE ON ALL AUTHENTICATION SCHEMES TO 'bob@DATASTAX.COM'");
+ session.execute("GRANT EXECUTE ON ALL AUTHENTICATION SCHEMES TO 'steve'");
+ session.execute(
+ "GRANT EXECUTE ON ALL AUTHENTICATION SCHEMES TO 'charlie@DATASTAX.COM'");
+ session.execute("GRANT PROXY.LOGIN ON ROLE 'alice' TO 'ben'");
+ session.execute("GRANT PROXY.LOGIN ON ROLE 'alice' TO 'bob@DATASTAX.COM'");
+ session.execute("GRANT PROXY.EXECUTE ON ROLE 'alice' TO 'steve'");
+ session.execute("GRANT PROXY.EXECUTE ON ROLE 'alice' TO 'charlie@DATASTAX.COM'");
+ // ben and bob are allowed to login as alice, but not execute as alice.
+ // charlie and steve are allowed to execute as alice, but not login as alice.
+ }
+ });
}
/**
* Validates that a connection may be successfully made as user 'alice' using the credentials of a
diff --git a/integration-tests/src/test/java/com/datastax/oss/driver/core/cql/AsyncResultSetIT.java b/integration-tests/src/test/java/com/datastax/oss/driver/core/cql/AsyncResultSetIT.java
index 2d01043b46a..e109c28525e 100644
--- a/integration-tests/src/test/java/com/datastax/oss/driver/core/cql/AsyncResultSetIT.java
+++ b/integration-tests/src/test/java/com/datastax/oss/driver/core/cql/AsyncResultSetIT.java
@@ -29,6 +29,7 @@
import com.datastax.oss.driver.api.core.cql.Row;
import com.datastax.oss.driver.api.core.cql.SimpleStatement;
import com.datastax.oss.driver.api.testinfra.ccm.CcmRule;
+import com.datastax.oss.driver.api.testinfra.ccm.SchemaChangeSynchronizer;
import com.datastax.oss.driver.api.testinfra.session.SessionRule;
import com.datastax.oss.driver.api.testinfra.session.SessionUtils;
import com.datastax.oss.driver.categories.ParallelizableTests;
@@ -67,13 +68,16 @@ public class AsyncResultSetIT {
@BeforeClass
public static void setupSchema() {
// create table and load data across two partitions so we can test paging across tokens.
- SESSION_RULE
- .session()
- .execute(
- SimpleStatement.builder(
- "CREATE TABLE IF NOT EXISTS test (k0 text, k1 int, v int, PRIMARY KEY(k0, k1))")
- .setExecutionProfile(SESSION_RULE.slowProfile())
- .build());
+ SchemaChangeSynchronizer.withLock(
+ () -> {
+ SESSION_RULE
+ .session()
+ .execute(
+ SimpleStatement.builder(
+ "CREATE TABLE IF NOT EXISTS test (k0 text, k1 int, v int, PRIMARY KEY(k0, k1))")
+ .setExecutionProfile(SESSION_RULE.slowProfile())
+ .build());
+ });
PreparedStatement prepared =
SESSION_RULE.session().prepare("INSERT INTO test (k0, k1, v) VALUES (?, ?, ?)");
diff --git a/integration-tests/src/test/java/com/datastax/oss/driver/core/cql/BatchStatementIT.java b/integration-tests/src/test/java/com/datastax/oss/driver/core/cql/BatchStatementIT.java
index 04e5798be5a..8b652638729 100644
--- a/integration-tests/src/test/java/com/datastax/oss/driver/core/cql/BatchStatementIT.java
+++ b/integration-tests/src/test/java/com/datastax/oss/driver/core/cql/BatchStatementIT.java
@@ -34,6 +34,7 @@
import com.datastax.oss.driver.api.core.cql.Statement;
import com.datastax.oss.driver.api.core.servererrors.InvalidQueryException;
import com.datastax.oss.driver.api.testinfra.ccm.CcmRule;
+import com.datastax.oss.driver.api.testinfra.ccm.SchemaChangeSynchronizer;
import com.datastax.oss.driver.api.testinfra.requirement.BackendRequirement;
import com.datastax.oss.driver.api.testinfra.requirement.BackendType;
import com.datastax.oss.driver.api.testinfra.session.SessionRule;
@@ -72,13 +73,16 @@ public void createTable() {
"CREATE TABLE counter3 (k0 text PRIMARY KEY, c counter)",
};
- for (String schemaStatement : schemaStatements) {
- sessionRule
- .session()
- .execute(
- SimpleStatement.newInstance(schemaStatement)
- .setExecutionProfile(sessionRule.slowProfile()));
- }
+ SchemaChangeSynchronizer.withLock(
+ () -> {
+ for (String schemaStatement : schemaStatements) {
+ sessionRule
+ .session()
+ .execute(
+ SimpleStatement.newInstance(schemaStatement)
+ .setExecutionProfile(sessionRule.slowProfile()));
+ }
+ });
}
@Test
diff --git a/integration-tests/src/test/java/com/datastax/oss/driver/core/cql/BoundStatementCcmIT.java b/integration-tests/src/test/java/com/datastax/oss/driver/core/cql/BoundStatementCcmIT.java
index 79156fcce50..9e4b62cd230 100644
--- a/integration-tests/src/test/java/com/datastax/oss/driver/core/cql/BoundStatementCcmIT.java
+++ b/integration-tests/src/test/java/com/datastax/oss/driver/core/cql/BoundStatementCcmIT.java
@@ -40,6 +40,7 @@
import com.datastax.oss.driver.api.core.metadata.token.Token;
import com.datastax.oss.driver.api.core.type.codec.TypeCodecs;
import com.datastax.oss.driver.api.testinfra.ccm.CcmRule;
+import com.datastax.oss.driver.api.testinfra.ccm.SchemaChangeSynchronizer;
import com.datastax.oss.driver.api.testinfra.requirement.BackendRequirement;
import com.datastax.oss.driver.api.testinfra.requirement.BackendType;
import com.datastax.oss.driver.api.testinfra.session.SessionRule;
@@ -94,40 +95,44 @@ public class BoundStatementCcmIT {
@Before
public void setupSchema() {
// table where every column forms the primary key.
- sessionRule
- .session()
- .execute(
- SimpleStatement.builder(
- "CREATE TABLE IF NOT EXISTS test (k text, v int, PRIMARY KEY(k, v))")
- .setExecutionProfile(sessionRule.slowProfile())
- .build());
- for (int i = 0; i < 100; i++) {
- sessionRule
- .session()
- .execute(
- SimpleStatement.builder("INSERT INTO test (k, v) VALUES (?, ?)")
- .addPositionalValues(KEY, i)
- .build());
- }
-
- // table with simple primary key, single cell.
- sessionRule
- .session()
- .execute(
- SimpleStatement.builder("CREATE TABLE IF NOT EXISTS test2 (k text primary key, v0 int)")
- .setExecutionProfile(sessionRule.slowProfile())
- .build());
-
- // table with composite partition key
- sessionRule
- .session()
- .execute(
- SimpleStatement.builder(
- "CREATE TABLE IF NOT EXISTS test3 "
- + "(pk1 int, pk2 int, v int, "
- + "PRIMARY KEY ((pk1, pk2)))")
- .setExecutionProfile(sessionRule.slowProfile())
- .build());
+ SchemaChangeSynchronizer.withLock(
+ () -> {
+ sessionRule
+ .session()
+ .execute(
+ SimpleStatement.builder(
+ "CREATE TABLE IF NOT EXISTS test (k text, v int, PRIMARY KEY(k, v))")
+ .setExecutionProfile(sessionRule.slowProfile())
+ .build());
+ for (int i = 0; i < 100; i++) {
+ sessionRule
+ .session()
+ .execute(
+ SimpleStatement.builder("INSERT INTO test (k, v) VALUES (?, ?)")
+ .addPositionalValues(KEY, i)
+ .build());
+ }
+
+ // table with simple primary key, single cell.
+ sessionRule
+ .session()
+ .execute(
+ SimpleStatement.builder(
+ "CREATE TABLE IF NOT EXISTS test2 (k text primary key, v0 int)")
+ .setExecutionProfile(sessionRule.slowProfile())
+ .build());
+
+ // table with composite partition key
+ sessionRule
+ .session()
+ .execute(
+ SimpleStatement.builder(
+ "CREATE TABLE IF NOT EXISTS test3 "
+ + "(pk1 int, pk2 int, v int, "
+ + "PRIMARY KEY ((pk1, pk2)))")
+ .setExecutionProfile(sessionRule.slowProfile())
+ .build());
+ });
}
@Test
diff --git a/integration-tests/src/test/java/com/datastax/oss/driver/core/cql/ExecutionInfoWarningsIT.java b/integration-tests/src/test/java/com/datastax/oss/driver/core/cql/ExecutionInfoWarningsIT.java
index 5907206d11a..edee9723a38 100644
--- a/integration-tests/src/test/java/com/datastax/oss/driver/core/cql/ExecutionInfoWarningsIT.java
+++ b/integration-tests/src/test/java/com/datastax/oss/driver/core/cql/ExecutionInfoWarningsIT.java
@@ -33,6 +33,7 @@
import com.datastax.oss.driver.api.core.cql.SimpleStatement;
import com.datastax.oss.driver.api.core.cql.Statement;
import com.datastax.oss.driver.api.testinfra.ccm.CustomCcmRule;
+import com.datastax.oss.driver.api.testinfra.ccm.SchemaChangeSynchronizer;
import com.datastax.oss.driver.api.testinfra.requirement.BackendRequirement;
import com.datastax.oss.driver.api.testinfra.requirement.BackendType;
import com.datastax.oss.driver.api.testinfra.session.SessionRule;
@@ -88,12 +89,16 @@ public class ExecutionInfoWarningsIT {
@Before
public void createSchema() {
// table with simple primary key, single cell.
- sessionRule
- .session()
- .execute(
- SimpleStatement.builder("CREATE TABLE IF NOT EXISTS test (k int primary key, v text)")
- .setExecutionProfile(sessionRule.slowProfile())
- .build());
+ SchemaChangeSynchronizer.withLock(
+ () -> {
+ sessionRule
+ .session()
+ .execute(
+ SimpleStatement.builder(
+ "CREATE TABLE IF NOT EXISTS test (k int primary key, v text)")
+ .setExecutionProfile(sessionRule.slowProfile())
+ .build());
+ });
for (int i = 0; i < 100; i++) {
sessionRule
.session()
diff --git a/integration-tests/src/test/java/com/datastax/oss/driver/core/cql/PagingStateIT.java b/integration-tests/src/test/java/com/datastax/oss/driver/core/cql/PagingStateIT.java
index dcd801f19a4..6d33f35238a 100644
--- a/integration-tests/src/test/java/com/datastax/oss/driver/core/cql/PagingStateIT.java
+++ b/integration-tests/src/test/java/com/datastax/oss/driver/core/cql/PagingStateIT.java
@@ -30,6 +30,7 @@
import com.datastax.oss.driver.api.core.type.codec.MappingCodec;
import com.datastax.oss.driver.api.core.type.reflect.GenericType;
import com.datastax.oss.driver.api.testinfra.ccm.CcmRule;
+import com.datastax.oss.driver.api.testinfra.ccm.SchemaChangeSynchronizer;
import com.datastax.oss.driver.api.testinfra.session.SessionRule;
import com.datastax.oss.driver.api.testinfra.session.SessionUtils;
import com.datastax.oss.driver.categories.ParallelizableTests;
@@ -55,11 +56,14 @@ public class PagingStateIT {
@Before
public void setupSchema() {
CqlSession session = SESSION_RULE.session();
- session.execute(
- SimpleStatement.builder(
- "CREATE TABLE IF NOT EXISTS foo (k int, cc int, v int, PRIMARY KEY(k, cc))")
- .setExecutionProfile(SESSION_RULE.slowProfile())
- .build());
+ SchemaChangeSynchronizer.withLock(
+ () -> {
+ session.execute(
+ SimpleStatement.builder(
+ "CREATE TABLE IF NOT EXISTS foo (k int, cc int, v int, PRIMARY KEY(k, cc))")
+ .setExecutionProfile(SESSION_RULE.slowProfile())
+ .build());
+ });
for (int i = 0; i < 20; i++) {
session.execute(
SimpleStatement.newInstance("INSERT INTO foo (k, cc, v) VALUES (1, ?, ?)", i, i));
diff --git a/integration-tests/src/test/java/com/datastax/oss/driver/core/cql/PerRequestKeyspaceIT.java b/integration-tests/src/test/java/com/datastax/oss/driver/core/cql/PerRequestKeyspaceIT.java
index 2b418e76f75..9eb883144db 100644
--- a/integration-tests/src/test/java/com/datastax/oss/driver/core/cql/PerRequestKeyspaceIT.java
+++ b/integration-tests/src/test/java/com/datastax/oss/driver/core/cql/PerRequestKeyspaceIT.java
@@ -31,6 +31,7 @@
import com.datastax.oss.driver.api.core.cql.SimpleStatement;
import com.datastax.oss.driver.api.core.cql.Statement;
import com.datastax.oss.driver.api.testinfra.ccm.CcmRule;
+import com.datastax.oss.driver.api.testinfra.ccm.SchemaChangeSynchronizer;
import com.datastax.oss.driver.api.testinfra.requirement.BackendRequirement;
import com.datastax.oss.driver.api.testinfra.requirement.BackendType;
import com.datastax.oss.driver.api.testinfra.session.SessionRule;
@@ -67,13 +68,16 @@ public class PerRequestKeyspaceIT {
@Before
public void setupSchema() {
- sessionRule
- .session()
- .execute(
- SimpleStatement.builder(
- "CREATE TABLE IF NOT EXISTS foo (k text, cc int, v int, PRIMARY KEY(k, cc))")
- .setExecutionProfile(sessionRule.slowProfile())
- .build());
+ SchemaChangeSynchronizer.withLock(
+ () -> {
+ sessionRule
+ .session()
+ .execute(
+ SimpleStatement.builder(
+ "CREATE TABLE IF NOT EXISTS foo (k text, cc int, v int, PRIMARY KEY(k, cc))")
+ .setExecutionProfile(sessionRule.slowProfile())
+ .build());
+ });
}
@Test
@@ -220,27 +224,31 @@ public void should_prepare_statement_with_keyspace() {
@BackendRequirement(type = BackendType.CASSANDRA, minInclusive = "4.0")
public void should_reprepare_statement_with_keyspace_on_the_fly() {
// Create a separate session because we don't want it to have a default keyspace
- try (CqlSession session = SessionUtils.newSession(ccmRule)) {
- executeDdl(
- session,
- String.format(
- "CREATE TABLE IF NOT EXISTS %s.bar (k int primary key)", sessionRule.keyspace()));
- PreparedStatement pst =
- session.prepare(
- SimpleStatement.newInstance("SELECT * FROM bar WHERE k=?")
- .setKeyspace(sessionRule.keyspace()));
+ SchemaChangeSynchronizer.withLock(
+ () -> {
+ try (CqlSession session = SessionUtils.newSession(ccmRule)) {
+ executeDdl(
+ session,
+ String.format(
+ "CREATE TABLE IF NOT EXISTS %s.bar (k int primary key)",
+ sessionRule.keyspace()));
+ PreparedStatement pst =
+ session.prepare(
+ SimpleStatement.newInstance("SELECT * FROM bar WHERE k=?")
+ .setKeyspace(sessionRule.keyspace()));
- // Drop and re-create the table to invalidate the prepared statement server side
- executeDdl(session, String.format("DROP TABLE %s.bar", sessionRule.keyspace()));
- executeDdl(
- session,
- String.format("CREATE TABLE %s.bar (k int primary key)", sessionRule.keyspace()));
- assertThat(preparedStatementExistsOnServer(session, pst.getId())).isFalse();
+ // Drop and re-create the table to invalidate the prepared statement server side
+ executeDdl(session, String.format("DROP TABLE %s.bar", sessionRule.keyspace()));
+ executeDdl(
+ session,
+ String.format("CREATE TABLE %s.bar (k int primary key)", sessionRule.keyspace()));
+ assertThat(preparedStatementExistsOnServer(session, pst.getId())).isFalse();
- // This will re-prepare on the fly
- session.execute(pst.bind(0));
- assertThat(preparedStatementExistsOnServer(session, pst.getId())).isTrue();
- }
+ // This will re-prepare on the fly
+ session.execute(pst.bind(0));
+ assertThat(preparedStatementExistsOnServer(session, pst.getId())).isTrue();
+ }
+ });
}
private void executeDdl(CqlSession session, String query) {
diff --git a/integration-tests/src/test/java/com/datastax/oss/driver/core/cql/PreparedStatementCachingIT.java b/integration-tests/src/test/java/com/datastax/oss/driver/core/cql/PreparedStatementCachingIT.java
index 92c6fd8a12e..05ac3bd0e92 100644
--- a/integration-tests/src/test/java/com/datastax/oss/driver/core/cql/PreparedStatementCachingIT.java
+++ b/integration-tests/src/test/java/com/datastax/oss/driver/core/cql/PreparedStatementCachingIT.java
@@ -30,6 +30,7 @@
import com.datastax.oss.driver.api.core.session.ProgrammaticArguments;
import com.datastax.oss.driver.api.core.session.SessionBuilder;
import com.datastax.oss.driver.api.testinfra.ccm.CustomCcmRule;
+import com.datastax.oss.driver.api.testinfra.ccm.SchemaChangeSynchronizer;
import com.datastax.oss.driver.api.testinfra.session.SessionRule;
import com.datastax.oss.driver.api.testinfra.session.SessionUtils;
import com.datastax.oss.driver.categories.IsolatedTests;
@@ -305,12 +306,19 @@ private void invalidationTestInner(
@Test
public void should_invalidate_cache_entry_on_basic_udt_change_result_set() {
- invalidationResultSetTest(setupCacheEntryTestBasic, ImmutableSet.of("test_type_2"));
+ SchemaChangeSynchronizer.withLock(
+ () -> {
+ invalidationResultSetTest(setupCacheEntryTestBasic, ImmutableSet.of("test_type_2"));
+ });
}
@Test
public void should_invalidate_cache_entry_on_basic_udt_change_variable_defs() {
- invalidationVariableDefsTest(setupCacheEntryTestBasic, false, ImmutableSet.of("test_type_2"));
+ SchemaChangeSynchronizer.withLock(
+ () -> {
+ invalidationVariableDefsTest(
+ setupCacheEntryTestBasic, false, ImmutableSet.of("test_type_2"));
+ });
}
Consumer setupCacheEntryTestCollection =
@@ -325,13 +333,19 @@ public void should_invalidate_cache_entry_on_basic_udt_change_variable_defs() {
@Test
public void should_invalidate_cache_entry_on_collection_udt_change_result_set() {
- invalidationResultSetTest(setupCacheEntryTestCollection, ImmutableSet.of("test_type_2"));
+ SchemaChangeSynchronizer.withLock(
+ () -> {
+ invalidationResultSetTest(setupCacheEntryTestCollection, ImmutableSet.of("test_type_2"));
+ });
}
@Test
public void should_invalidate_cache_entry_on_collection_udt_change_variable_defs() {
- invalidationVariableDefsTest(
- setupCacheEntryTestCollection, true, ImmutableSet.of("test_type_2"));
+ SchemaChangeSynchronizer.withLock(
+ () -> {
+ invalidationVariableDefsTest(
+ setupCacheEntryTestCollection, true, ImmutableSet.of("test_type_2"));
+ });
}
Consumer setupCacheEntryTestTuple =
@@ -346,12 +360,19 @@ public void should_invalidate_cache_entry_on_collection_udt_change_variable_defs
@Test
public void should_invalidate_cache_entry_on_tuple_udt_change_result_set() {
- invalidationResultSetTest(setupCacheEntryTestTuple, ImmutableSet.of("test_type_2"));
+ SchemaChangeSynchronizer.withLock(
+ () -> {
+ invalidationResultSetTest(setupCacheEntryTestTuple, ImmutableSet.of("test_type_2"));
+ });
}
@Test
public void should_invalidate_cache_entry_on_tuple_udt_change_variable_defs() {
- invalidationVariableDefsTest(setupCacheEntryTestTuple, false, ImmutableSet.of("test_type_2"));
+ SchemaChangeSynchronizer.withLock(
+ () -> {
+ invalidationVariableDefsTest(
+ setupCacheEntryTestTuple, false, ImmutableSet.of("test_type_2"));
+ });
}
Consumer setupCacheEntryTestNested =
@@ -366,14 +387,20 @@ public void should_invalidate_cache_entry_on_tuple_udt_change_variable_defs() {
@Test
public void should_invalidate_cache_entry_on_nested_udt_change_result_set() {
- invalidationResultSetTest(
- setupCacheEntryTestNested, ImmutableSet.of("test_type_2", "test_type_4"));
+ SchemaChangeSynchronizer.withLock(
+ () -> {
+ invalidationResultSetTest(
+ setupCacheEntryTestNested, ImmutableSet.of("test_type_2", "test_type_4"));
+ });
}
@Test
public void should_invalidate_cache_entry_on_nested_udt_change_variable_defs() {
- invalidationVariableDefsTest(
- setupCacheEntryTestNested, false, ImmutableSet.of("test_type_2", "test_type_4"));
+ SchemaChangeSynchronizer.withLock(
+ () -> {
+ invalidationVariableDefsTest(
+ setupCacheEntryTestNested, false, ImmutableSet.of("test_type_2", "test_type_4"));
+ });
}
/* ========================= Infrastructure copied from PreparedStatementIT ========================= */
diff --git a/integration-tests/src/test/java/com/datastax/oss/driver/core/cql/reactive/DefaultReactiveResultSetIT.java b/integration-tests/src/test/java/com/datastax/oss/driver/core/cql/reactive/DefaultReactiveResultSetIT.java
index cfb6a56fac2..c00cf064e51 100644
--- a/integration-tests/src/test/java/com/datastax/oss/driver/core/cql/reactive/DefaultReactiveResultSetIT.java
+++ b/integration-tests/src/test/java/com/datastax/oss/driver/core/cql/reactive/DefaultReactiveResultSetIT.java
@@ -32,6 +32,7 @@
import com.datastax.oss.driver.api.core.cql.PreparedStatement;
import com.datastax.oss.driver.api.core.cql.SimpleStatement;
import com.datastax.oss.driver.api.testinfra.ccm.CcmRule;
+import com.datastax.oss.driver.api.testinfra.ccm.SchemaChangeSynchronizer;
import com.datastax.oss.driver.api.testinfra.session.SessionRule;
import com.datastax.oss.driver.categories.ParallelizableTests;
import com.datastax.oss.driver.internal.core.cql.EmptyColumnDefinitions;
@@ -64,20 +65,23 @@ public class DefaultReactiveResultSetIT {
@BeforeClass
public static void initialize() {
CqlSession session = sessionRule.session();
- session.execute("DROP TABLE IF EXISTS test_reactive_read");
- session.execute("DROP TABLE IF EXISTS test_reactive_write");
- session.checkSchemaAgreement();
- session.execute(
- SimpleStatement.builder(
- "CREATE TABLE test_reactive_read (pk int, cc int, v int, PRIMARY KEY ((pk), cc))")
- .setExecutionProfile(sessionRule.slowProfile())
- .build());
- session.execute(
- SimpleStatement.builder(
- "CREATE TABLE test_reactive_write (pk int, cc int, v int, PRIMARY KEY ((pk), cc))")
- .setExecutionProfile(sessionRule.slowProfile())
- .build());
- session.checkSchemaAgreement();
+ SchemaChangeSynchronizer.withLock(
+ () -> {
+ session.execute("DROP TABLE IF EXISTS test_reactive_read");
+ session.execute("DROP TABLE IF EXISTS test_reactive_write");
+ session.checkSchemaAgreement();
+ session.execute(
+ SimpleStatement.builder(
+ "CREATE TABLE test_reactive_read (pk int, cc int, v int, PRIMARY KEY ((pk), cc))")
+ .setExecutionProfile(sessionRule.slowProfile())
+ .build());
+ session.execute(
+ SimpleStatement.builder(
+ "CREATE TABLE test_reactive_write (pk int, cc int, v int, PRIMARY KEY ((pk), cc))")
+ .setExecutionProfile(sessionRule.slowProfile())
+ .build());
+ session.checkSchemaAgreement();
+ });
for (int i = 0; i < 1000; i++) {
session.execute(
SimpleStatement.builder("INSERT INTO test_reactive_read (pk, cc, v) VALUES (0, ?, ?)")
diff --git a/integration-tests/src/test/java/com/datastax/oss/driver/core/metadata/DescribeIT.java b/integration-tests/src/test/java/com/datastax/oss/driver/core/metadata/DescribeIT.java
index d8239f31872..9fbf5e355eb 100644
--- a/integration-tests/src/test/java/com/datastax/oss/driver/core/metadata/DescribeIT.java
+++ b/integration-tests/src/test/java/com/datastax/oss/driver/core/metadata/DescribeIT.java
@@ -28,6 +28,7 @@
import com.datastax.oss.driver.api.core.metadata.schema.KeyspaceMetadata;
import com.datastax.oss.driver.api.core.metadata.schema.TableMetadata;
import com.datastax.oss.driver.api.testinfra.ccm.CcmRule;
+import com.datastax.oss.driver.api.testinfra.ccm.SchemaChangeSynchronizer;
import com.datastax.oss.driver.api.testinfra.session.SessionRule;
import com.datastax.oss.driver.api.testinfra.session.SessionUtils;
import com.datastax.oss.driver.categories.ParallelizableTests;
@@ -224,15 +225,17 @@ private static String getScriptContents() {
private static void setupDatabase() {
List statements = STATEMENT_SPLITTER.splitToList(scriptContents);
-
- // Skip the first statement (CREATE KEYSPACE), we already have a keyspace
- for (int i = 1; i < statements.size(); i++) {
- String statement = statements.get(i);
- try {
- SESSION_RULE.session().execute(statement);
- } catch (Exception e) {
- fail("Error executing statement %s (%s)", statement, e);
- }
- }
+ SchemaChangeSynchronizer.withLock(
+ () -> {
+ // Skip the first statement (CREATE KEYSPACE), we already have a keyspace
+ for (int i = 1; i < statements.size(); i++) {
+ String statement = statements.get(i);
+ try {
+ SESSION_RULE.session().execute(statement);
+ } catch (Exception e) {
+ fail("Error executing statement %s (%s)", statement, e);
+ }
+ }
+ });
}
}
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 6495b451df7..805b2d970cc 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
@@ -278,6 +278,20 @@ public void should_get_virtual_metadata() {
+ " total bigint,\n"
+ " unit text,\n"
+ " PRIMARY KEY (keyspace_name, table_name, task_id)\n"
+ + "); */",
+ // Cassandra 5.0
+ "/* 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"
+ + " target_directory text,\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/integration-tests/src/test/java/com/datastax/oss/driver/core/type/codec/registry/CodecRegistryIT.java b/integration-tests/src/test/java/com/datastax/oss/driver/core/type/codec/registry/CodecRegistryIT.java
index 2f9a0872b37..74472e8bab9 100644
--- a/integration-tests/src/test/java/com/datastax/oss/driver/core/type/codec/registry/CodecRegistryIT.java
+++ b/integration-tests/src/test/java/com/datastax/oss/driver/core/type/codec/registry/CodecRegistryIT.java
@@ -38,6 +38,7 @@
import com.datastax.oss.driver.api.core.type.codec.registry.MutableCodecRegistry;
import com.datastax.oss.driver.api.core.type.reflect.GenericType;
import com.datastax.oss.driver.api.testinfra.ccm.CcmRule;
+import com.datastax.oss.driver.api.testinfra.ccm.SchemaChangeSynchronizer;
import com.datastax.oss.driver.api.testinfra.session.SessionRule;
import com.datastax.oss.driver.api.testinfra.session.SessionUtils;
import com.datastax.oss.driver.categories.ParallelizableTests;
@@ -78,35 +79,39 @@ public class CodecRegistryIT {
@BeforeClass
public static void createSchema() {
- // table with simple primary key, single cell.
- SESSION_RULE
- .session()
- .execute(
- SimpleStatement.builder("CREATE TABLE IF NOT EXISTS test (k text primary key, v int)")
- .setExecutionProfile(SESSION_RULE.slowProfile())
- .build());
- // table with map value
- SESSION_RULE
- .session()
- .execute(
- SimpleStatement.builder(
- "CREATE TABLE IF NOT EXISTS test2 (k0 text, k1 int, v map, primary key (k0, k1))")
- .setExecutionProfile(SESSION_RULE.slowProfile())
- .build());
- // table with UDT
- SESSION_RULE
- .session()
- .execute(
- SimpleStatement.builder("CREATE TYPE IF NOT EXISTS coordinates (x int, y int)")
- .setExecutionProfile(SESSION_RULE.slowProfile())
- .build());
- SESSION_RULE
- .session()
- .execute(
- SimpleStatement.builder(
- "CREATE TABLE IF NOT EXISTS test3 (k0 text, k1 int, v map>, primary key (k0, k1))")
- .setExecutionProfile(SESSION_RULE.slowProfile())
- .build());
+ SchemaChangeSynchronizer.withLock(
+ () -> {
+ // table with simple primary key, single cell.
+ SESSION_RULE
+ .session()
+ .execute(
+ SimpleStatement.builder(
+ "CREATE TABLE IF NOT EXISTS test (k text primary key, v int)")
+ .setExecutionProfile(SESSION_RULE.slowProfile())
+ .build());
+ // table with map value
+ SESSION_RULE
+ .session()
+ .execute(
+ SimpleStatement.builder(
+ "CREATE TABLE IF NOT EXISTS test2 (k0 text, k1 int, v map, primary key (k0, k1))")
+ .setExecutionProfile(SESSION_RULE.slowProfile())
+ .build());
+ // table with UDT
+ SESSION_RULE
+ .session()
+ .execute(
+ SimpleStatement.builder("CREATE TYPE IF NOT EXISTS coordinates (x int, y int)")
+ .setExecutionProfile(SESSION_RULE.slowProfile())
+ .build());
+ SESSION_RULE
+ .session()
+ .execute(
+ SimpleStatement.builder(
+ "CREATE TABLE IF NOT EXISTS test3 (k0 text, k1 int, v map>, primary key (k0, k1))")
+ .setExecutionProfile(SESSION_RULE.slowProfile())
+ .build());
+ });
}
// A simple codec that allows float values to be used for cassandra int column type.
diff --git a/integration-tests/src/test/java/com/datastax/oss/driver/mapper/DeleteIT.java b/integration-tests/src/test/java/com/datastax/oss/driver/mapper/DeleteIT.java
index 8918e6020ec..0acdbeae53a 100644
--- a/integration-tests/src/test/java/com/datastax/oss/driver/mapper/DeleteIT.java
+++ b/integration-tests/src/test/java/com/datastax/oss/driver/mapper/DeleteIT.java
@@ -38,11 +38,10 @@
import com.datastax.oss.driver.api.mapper.annotations.Mapper;
import com.datastax.oss.driver.api.mapper.annotations.Select;
import com.datastax.oss.driver.api.mapper.entity.saving.NullSavingStrategy;
-import com.datastax.oss.driver.api.testinfra.ccm.CcmRule;
+import com.datastax.oss.driver.api.testinfra.ccm.CustomCcmRule;
import com.datastax.oss.driver.api.testinfra.requirement.BackendRequirement;
import com.datastax.oss.driver.api.testinfra.requirement.BackendType;
import com.datastax.oss.driver.api.testinfra.session.SessionRule;
-import com.datastax.oss.driver.categories.ParallelizableTests;
import com.datastax.oss.driver.internal.core.util.concurrent.CompletableFutures;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
@@ -51,18 +50,18 @@
import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.Test;
-import org.junit.experimental.categories.Category;
import org.junit.rules.RuleChain;
import org.junit.rules.TestRule;
-@Category(ParallelizableTests.class)
+// Do not run LWT tests in parallel because they may interfere. Tests operate on the same row.
@BackendRequirement(
type = BackendType.CASSANDRA,
minInclusive = "3.0",
description = ">= in WHERE clause not supported in legacy versions")
public class DeleteIT extends InventoryITBase {
- private static final CcmRule CCM_RULE = CcmRule.getInstance();
+ private static CustomCcmRule CCM_RULE =
+ CustomCcmRule.builder().withCassandraConfiguration("enable_sasi_indexes", "true").build();
private static final SessionRule SESSION_RULE = SessionRule.builder(CCM_RULE).build();
diff --git a/integration-tests/src/test/java/com/datastax/oss/driver/mapper/DeleteReactiveIT.java b/integration-tests/src/test/java/com/datastax/oss/driver/mapper/DeleteReactiveIT.java
index 928fbd6fb8a..3a418c73653 100644
--- a/integration-tests/src/test/java/com/datastax/oss/driver/mapper/DeleteReactiveIT.java
+++ b/integration-tests/src/test/java/com/datastax/oss/driver/mapper/DeleteReactiveIT.java
@@ -24,6 +24,7 @@
import com.datastax.dse.driver.api.mapper.reactive.MappedReactiveResultSet;
import com.datastax.oss.driver.api.core.CqlIdentifier;
import com.datastax.oss.driver.api.core.CqlSession;
+import com.datastax.oss.driver.api.core.Version;
import com.datastax.oss.driver.api.core.cql.SimpleStatement;
import com.datastax.oss.driver.api.mapper.annotations.Dao;
import com.datastax.oss.driver.api.mapper.annotations.DaoFactory;
@@ -34,28 +35,35 @@
import com.datastax.oss.driver.api.mapper.annotations.Mapper;
import com.datastax.oss.driver.api.mapper.annotations.Select;
import com.datastax.oss.driver.api.mapper.entity.saving.NullSavingStrategy;
-import com.datastax.oss.driver.api.testinfra.ccm.CcmRule;
+import com.datastax.oss.driver.api.testinfra.ccm.CcmBridge;
+import com.datastax.oss.driver.api.testinfra.ccm.CustomCcmRule;
import com.datastax.oss.driver.api.testinfra.session.SessionRule;
-import com.datastax.oss.driver.categories.ParallelizableTests;
import io.reactivex.Flowable;
import java.util.UUID;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.Test;
-import org.junit.experimental.categories.Category;
import org.junit.rules.RuleChain;
import org.junit.rules.TestRule;
-@Category(ParallelizableTests.class)
+// Do not run LWT tests in parallel because they may interfere. Tests operate on the same row.
public class DeleteReactiveIT extends InventoryITBase {
- private static CcmRule ccmRule = CcmRule.getInstance();
+ private static CustomCcmRule ccmRule = configureCcm(CustomCcmRule.builder()).build();
private static SessionRule sessionRule = SessionRule.builder(ccmRule).build();
@ClassRule public static TestRule chain = RuleChain.outerRule(ccmRule).around(sessionRule);
+ private static CustomCcmRule.Builder configureCcm(CustomCcmRule.Builder builder) {
+ if (!CcmBridge.DSE_ENABLEMENT
+ && CcmBridge.VERSION.nextStable().compareTo(Version.V4_0_0) >= 0) {
+ builder.withCassandraConfiguration("enable_sasi_indexes", true);
+ }
+ return builder;
+ }
+
private static DseProductDao dao;
@BeforeClass
diff --git a/integration-tests/src/test/java/com/datastax/oss/driver/mapper/EntityPolymorphismIT.java b/integration-tests/src/test/java/com/datastax/oss/driver/mapper/EntityPolymorphismIT.java
index 08b806af684..3e532e97c00 100644
--- a/integration-tests/src/test/java/com/datastax/oss/driver/mapper/EntityPolymorphismIT.java
+++ b/integration-tests/src/test/java/com/datastax/oss/driver/mapper/EntityPolymorphismIT.java
@@ -47,6 +47,7 @@
import com.datastax.oss.driver.api.mapper.annotations.Update;
import com.datastax.oss.driver.api.mapper.entity.saving.NullSavingStrategy;
import com.datastax.oss.driver.api.testinfra.ccm.CcmRule;
+import com.datastax.oss.driver.api.testinfra.ccm.SchemaChangeSynchronizer;
import com.datastax.oss.driver.api.testinfra.session.SessionRule;
import com.datastax.oss.driver.categories.ParallelizableTests;
import com.datastax.oss.driver.shaded.guava.common.collect.ImmutableList;
@@ -83,22 +84,27 @@ public class EntityPolymorphismIT {
@BeforeClass
public static void setup() {
CqlSession session = SESSION_RULE.session();
- for (String query :
- ImmutableList.of(
- "CREATE TYPE point2d (\"X\" int, \"Y\" int)",
- "CREATE TYPE point3d (\"X\" int, \"Y\" int, \"Z\" int)",
- "CREATE TABLE circles (circle_id uuid PRIMARY KEY, center2d frozen, radius "
- + "double, tags set)",
- "CREATE TABLE rectangles (rect_id uuid PRIMARY KEY, bottom_left frozen, top_right frozen, tags set)",
- "CREATE TABLE squares (square_id uuid PRIMARY KEY, bottom_left frozen, top_right frozen, tags set)",
- "CREATE TABLE spheres (sphere_id uuid PRIMARY KEY, center3d frozen, radius "
- + "double, tags set)",
- "CREATE TABLE devices (device_id uuid PRIMARY KEY, name text)",
- "CREATE TABLE tracked_devices (device_id uuid PRIMARY KEY, name text, location text)",
- "CREATE TABLE simple_devices (id uuid PRIMARY KEY, in_use boolean)")) {
- session.execute(
- SimpleStatement.builder(query).setExecutionProfile(SESSION_RULE.slowProfile()).build());
- }
+ SchemaChangeSynchronizer.withLock(
+ () -> {
+ for (String query :
+ ImmutableList.of(
+ "CREATE TYPE point2d (\"X\" int, \"Y\" int)",
+ "CREATE TYPE point3d (\"X\" int, \"Y\" int, \"Z\" int)",
+ "CREATE TABLE circles (circle_id uuid PRIMARY KEY, center2d frozen, radius "
+ + "double, tags set)",
+ "CREATE TABLE rectangles (rect_id uuid PRIMARY KEY, bottom_left frozen, top_right frozen, tags set)",
+ "CREATE TABLE squares (square_id uuid PRIMARY KEY, bottom_left frozen, top_right frozen, tags set)",
+ "CREATE TABLE spheres (sphere_id uuid PRIMARY KEY, center3d frozen, radius "
+ + "double, tags set)",
+ "CREATE TABLE devices (device_id uuid PRIMARY KEY, name text)",
+ "CREATE TABLE tracked_devices (device_id uuid PRIMARY KEY, name text, location text)",
+ "CREATE TABLE simple_devices (id uuid PRIMARY KEY, in_use boolean)")) {
+ session.execute(
+ SimpleStatement.builder(query)
+ .setExecutionProfile(SESSION_RULE.slowProfile())
+ .build());
+ }
+ });
mapper = new EntityPolymorphismIT_TestMapperBuilder(session).build();
}
diff --git a/integration-tests/src/test/java/com/datastax/oss/driver/mapper/ImmutableEntityIT.java b/integration-tests/src/test/java/com/datastax/oss/driver/mapper/ImmutableEntityIT.java
index 555b02c0283..bdfe92a23f9 100644
--- a/integration-tests/src/test/java/com/datastax/oss/driver/mapper/ImmutableEntityIT.java
+++ b/integration-tests/src/test/java/com/datastax/oss/driver/mapper/ImmutableEntityIT.java
@@ -42,6 +42,7 @@
import com.datastax.oss.driver.api.mapper.annotations.Select;
import com.datastax.oss.driver.api.mapper.entity.saving.NullSavingStrategy;
import com.datastax.oss.driver.api.testinfra.ccm.CcmRule;
+import com.datastax.oss.driver.api.testinfra.ccm.SchemaChangeSynchronizer;
import com.datastax.oss.driver.api.testinfra.session.SessionRule;
import com.datastax.oss.driver.categories.ParallelizableTests;
import java.util.Objects;
@@ -70,10 +71,15 @@ public class ImmutableEntityIT extends InventoryITBase {
public static void setup() {
CqlSession session = SESSION_RULE.session();
- for (String query : createStatements(CCM_RULE)) {
- session.execute(
- SimpleStatement.builder(query).setExecutionProfile(SESSION_RULE.slowProfile()).build());
- }
+ SchemaChangeSynchronizer.withLock(
+ () -> {
+ for (String query : createStatements(CCM_RULE)) {
+ session.execute(
+ SimpleStatement.builder(query)
+ .setExecutionProfile(SESSION_RULE.slowProfile())
+ .build());
+ }
+ });
UserDefinedType dimensions2d =
session
diff --git a/integration-tests/src/test/java/com/datastax/oss/driver/mapper/InventoryITBase.java b/integration-tests/src/test/java/com/datastax/oss/driver/mapper/InventoryITBase.java
index 75ceee1f2a5..2be025b3739 100644
--- a/integration-tests/src/test/java/com/datastax/oss/driver/mapper/InventoryITBase.java
+++ b/integration-tests/src/test/java/com/datastax/oss/driver/mapper/InventoryITBase.java
@@ -22,7 +22,7 @@
import com.datastax.oss.driver.api.mapper.annotations.ClusteringColumn;
import com.datastax.oss.driver.api.mapper.annotations.Entity;
import com.datastax.oss.driver.api.mapper.annotations.PartitionKey;
-import com.datastax.oss.driver.api.testinfra.ccm.CcmRule;
+import com.datastax.oss.driver.api.testinfra.ccm.BaseCcmRule;
import com.datastax.oss.driver.shaded.guava.common.collect.ImmutableList;
import java.util.List;
import java.util.Objects;
@@ -58,7 +58,7 @@ public abstract class InventoryITBase {
protected static ProductSale MP3_DOWNLOAD_SALE_1 =
new ProductSale(MP3_DOWNLOAD.getId(), DATE_3, 7, Uuids.startOf(915192000), 0.99, 12);
- protected static List createStatements(CcmRule ccmRule) {
+ protected static List createStatements(BaseCcmRule ccmRule) {
ImmutableList.Builder builder =
ImmutableList.builder()
.add(
@@ -92,13 +92,13 @@ protected static List createStatements(CcmRule ccmRule) {
private static final Version MINIMUM_SASI_VERSION = Version.parse("3.4.0");
private static final Version BROKEN_SASI_VERSION = Version.parse("6.8.0");
- protected static boolean isSasiBroken(CcmRule ccmRule) {
+ protected static boolean isSasiBroken(BaseCcmRule ccmRule) {
Optional dseVersion = ccmRule.getDseVersion();
// creating SASI indexes is broken in DSE 6.8.0
return dseVersion.isPresent() && dseVersion.get().compareTo(BROKEN_SASI_VERSION) == 0;
}
- protected static boolean supportsSASI(CcmRule ccmRule) {
+ protected static boolean supportsSASI(BaseCcmRule ccmRule) {
return ccmRule.getCassandraVersion().compareTo(MINIMUM_SASI_VERSION) >= 0;
}
diff --git a/integration-tests/src/test/java/com/datastax/oss/driver/mapper/NestedUdtIT.java b/integration-tests/src/test/java/com/datastax/oss/driver/mapper/NestedUdtIT.java
index 43d41a9c93b..d61b6f6e628 100644
--- a/integration-tests/src/test/java/com/datastax/oss/driver/mapper/NestedUdtIT.java
+++ b/integration-tests/src/test/java/com/datastax/oss/driver/mapper/NestedUdtIT.java
@@ -41,6 +41,7 @@
import com.datastax.oss.driver.api.mapper.annotations.SetEntity;
import com.datastax.oss.driver.api.mapper.entity.saving.NullSavingStrategy;
import com.datastax.oss.driver.api.testinfra.ccm.CcmRule;
+import com.datastax.oss.driver.api.testinfra.ccm.SchemaChangeSynchronizer;
import com.datastax.oss.driver.api.testinfra.requirement.BackendRequirement;
import com.datastax.oss.driver.api.testinfra.requirement.BackendType;
import com.datastax.oss.driver.api.testinfra.session.SessionRule;
@@ -119,27 +120,32 @@ public class NestedUdtIT {
public static void setup() {
CqlSession session = SESSION_RULE.session();
- for (String query :
- ImmutableList.of(
- "CREATE TYPE type1(s1 text, s2 text)",
- "CREATE TYPE type2(i1 int, i2 int)",
- "CREATE TYPE type1_partial(s1 text)",
- "CREATE TYPE type2_partial(i1 int)",
- "CREATE TABLE container(id uuid PRIMARY KEY, "
- + "list frozen>, "
- + "map1 frozen