|
5 | 5 | import com.datastax.oss.driver.api.core.CqlIdentifier; |
6 | 6 | import com.datastax.oss.driver.api.core.CqlSession; |
7 | 7 | import com.datastax.oss.driver.api.core.DefaultConsistencyLevel; |
| 8 | +import com.datastax.oss.driver.api.core.Version; |
8 | 9 | import com.datastax.oss.driver.api.core.config.DefaultDriverOption; |
9 | 10 | import com.datastax.oss.driver.api.core.cql.PreparedStatement; |
10 | 11 | import com.datastax.oss.driver.api.core.cql.ResultSet; |
|
15 | 16 | import com.datastax.oss.driver.api.core.metadata.Tablet; |
16 | 17 | import com.datastax.oss.driver.api.testinfra.ScyllaOnly; |
17 | 18 | import com.datastax.oss.driver.api.testinfra.ScyllaRequirement; |
| 19 | +import com.datastax.oss.driver.api.testinfra.ccm.CcmBridge; |
18 | 20 | import com.datastax.oss.driver.api.testinfra.ccm.CustomCcmRule; |
19 | 21 | import com.datastax.oss.driver.api.testinfra.session.SessionRule; |
20 | 22 | import com.datastax.oss.driver.api.testinfra.session.SessionUtils; |
|
26 | 28 | import java.util.HashSet; |
27 | 29 | import java.util.List; |
28 | 30 | import java.util.Map; |
| 31 | +import java.util.Objects; |
29 | 32 | import java.util.Set; |
30 | 33 | import java.util.concurrent.ConcurrentMap; |
31 | 34 | import java.util.concurrent.ConcurrentSkipListSet; |
@@ -68,6 +71,8 @@ public class DefaultMetadataTabletMapIT { |
68 | 71 | private static final int INITIAL_TABLETS = 32; |
69 | 72 | private static final int QUERIES = 1600; |
70 | 73 | private static final int REPLICATION_FACTOR = 2; |
| 74 | + private static final Version SCYLLA_LWT_TABLETS_SUPPORT_VERSION = |
| 75 | + Objects.requireNonNull(Version.parse("2026.1")); |
71 | 76 | private static final String KEYSPACE_NAME = "tabletsTest"; |
72 | 77 | private static final String TABLE_NAME = "tabletsTable"; |
73 | 78 | private static final String CREATE_KEYSPACE_QUERY = |
@@ -234,8 +239,8 @@ public void every_statement_should_deliver_tablet_info() { |
234 | 239 | // Scylla does not return tablet info for queries with PK built into query |
235 | 240 | continue; |
236 | 241 | } |
237 | | - if (stmtEntry.getKey().contains("LWT")) { |
238 | | - // LWT is not yet supported by scylla on tables with tablets |
| 242 | + if (stmtEntry.getKey().contains("LWT") && isScyllaVersionLessThan2026_1()) { |
| 243 | + // LWT is supported on tables with tablets starting with Scylla 2026.1. |
239 | 244 | continue; |
240 | 245 | } |
241 | 246 | if (sessionEntry.getKey().equals("REGULAR") && stmtEntry.getKey().contains("NO_KS")) { |
@@ -368,6 +373,12 @@ private static boolean waitSessionLearnedTabletInfo(CqlSession session) { |
368 | 373 | } |
369 | 374 | } |
370 | 375 |
|
| 376 | + private static boolean isScyllaVersionLessThan2026_1() { |
| 377 | + return CcmBridge.getScyllaVersion() |
| 378 | + .map(version -> version.compareTo(SCYLLA_LWT_TABLETS_SUPPORT_VERSION) < 0) |
| 379 | + .orElse(false); |
| 380 | + } |
| 381 | + |
371 | 382 | private static boolean checkIfRoutedProperly(CqlSession session, Statement stmt) { |
372 | 383 | // DefaultLoadBalancingPolicy suppose to prioritize nodes from replica list randomly shuffling |
373 | 384 | // them |
|
0 commit comments