This is an automated email from the ASF dual-hosted git repository. frankgh pushed a commit to branch trunk in repository https://gitbox.apache.org/repos/asf/cassandra-sidecar.git
The following commit(s) were added to refs/heads/trunk by this push: new cd716c4 CASSANDRASC-90 Token-ranges endpoint fix to unwrap token-ranges by the partitioner's boundary for a single node clusters cd716c4 is described below commit cd716c4c8a9f416e9af04f6e45ca7e89ace26829 Author: Arjun Ashok <arjun.dia...@gmail.com> AuthorDate: Thu Dec 21 15:46:06 2023 -0800 CASSANDRASC-90 Token-ranges endpoint fix to unwrap token-ranges by the partitioner's boundary for a single node clusters Patch by Arjun Ashok; Reviewed by Francisco Guerrero, Yifan Cai for CASSANDRASC-90 --- CHANGES.txt | 1 + .../sidecar/adapters/base/TokenRangeReplicas.java | 7 ++++--- .../routes/tokenrange/BaseTokenRangeIntegrationTest.java | 16 ++++++++++++++++ .../sidecar/routes/tokenrange/BasicRf1Test.java | 13 +++++++++++++ 4 files changed, 34 insertions(+), 3 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index d61a23f..ad51d93 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,5 +1,6 @@ 1.0.0 ----- + * Fix Sidecar TokenRangeReplicas endpoint to unwrap the token-range by partitioner's range for a single node clusters (CASSANDRASC-90) * Expose TTL option for the create snapshot endpoint (CASSANDRASC-85) * Allow DriverUtils to be pluggable (CASSANDRASC-88) * Add JMX health checks during the periodic health checks (CASSANDRASC-87) diff --git a/adapters/base/src/main/java/org/apache/cassandra/sidecar/adapters/base/TokenRangeReplicas.java b/adapters/base/src/main/java/org/apache/cassandra/sidecar/adapters/base/TokenRangeReplicas.java index 43fe5d8..a46437c 100644 --- a/adapters/base/src/main/java/org/apache/cassandra/sidecar/adapters/base/TokenRangeReplicas.java +++ b/adapters/base/src/main/java/org/apache/cassandra/sidecar/adapters/base/TokenRangeReplicas.java @@ -69,7 +69,7 @@ public class TokenRangeReplicas implements Comparable<TokenRangeReplicas> Partitioner partitioner, Set<String> replicaSet) { - if (start.compareTo(end) > 0) + if (start.compareTo(end) >= 0) { return unwrapRange(start, end, partitioner, replicaSet); } @@ -216,10 +216,11 @@ public class TokenRangeReplicas implements Comparable<TokenRangeReplicas> */ public static List<TokenRangeReplicas> normalize(List<TokenRangeReplicas> ranges) { - if (ranges.stream().noneMatch(r -> r.partitioner.minToken.compareTo(r.start()) == 0)) { - LOGGER.warn("{} based minToken does not exist in the token ranges", Partitioner.class.getName()); + LOGGER.warn("{} based minToken does not exist in the token ranges", ranges.stream() + .findFirst() + .get().partitioner.name()); } return deoverlap(ranges); diff --git a/src/test/integration/org/apache/cassandra/sidecar/routes/tokenrange/BaseTokenRangeIntegrationTest.java b/src/test/integration/org/apache/cassandra/sidecar/routes/tokenrange/BaseTokenRangeIntegrationTest.java index 250bdee..bc86a8b 100644 --- a/src/test/integration/org/apache/cassandra/sidecar/routes/tokenrange/BaseTokenRangeIntegrationTest.java +++ b/src/test/integration/org/apache/cassandra/sidecar/routes/tokenrange/BaseTokenRangeIntegrationTest.java @@ -37,6 +37,7 @@ import io.vertx.core.Handler; import io.vertx.core.buffer.Buffer; import io.vertx.ext.web.client.HttpResponse; import io.vertx.junit5.VertxTestContext; +import org.apache.cassandra.dht.Murmur3Partitioner; import org.apache.cassandra.distributed.UpgradeableCluster; import org.apache.cassandra.distributed.api.IInstanceConfig; import org.apache.cassandra.distributed.api.TokenSupplier; @@ -275,6 +276,8 @@ public class BaseTokenRangeIntegrationTest extends IntegrationTestBase assertThat(mappingResponse).isNotNull(); assertThat(mappingResponse.readReplicas()).isNotNull(); assertThat(mappingResponse.writeReplicas()).isNotNull(); + validateRanges(mappingResponse.writeReplicas()); + validateRanges(mappingResponse.readReplicas()); TokenRangeReplicasResponse.ReplicaInfo readReplica = mappingResponse.readReplicas().get(0); assertThat(readReplica.replicasByDatacenter()).isNotNull().hasSize(dcReplication.size()); TokenRangeReplicasResponse.ReplicaInfo writeReplica = mappingResponse.writeReplicas().get(0); @@ -291,4 +294,17 @@ public class BaseTokenRangeIntegrationTest extends IntegrationTestBase .isGreaterThanOrEqualTo(replicationFactor); } } + + private void validateRanges(List<TokenRangeReplicasResponse.ReplicaInfo> replicaRanges) + { + // Ranges should not be empty + replicaRanges.forEach(r -> assertThat(r.start()).isNotEqualTo(r.end())); + // Ranges should include partitioner start and end + assertThat(replicaRanges.stream() + .map(TokenRangeReplicasResponse.ReplicaInfo::start) + .anyMatch(s -> s.equals(Murmur3Partitioner.MINIMUM.toString()))).isTrue(); + assertThat(replicaRanges.stream() + .map(TokenRangeReplicasResponse.ReplicaInfo::end) + .anyMatch(s -> s.equals(Long.toString(Murmur3Partitioner.MAXIMUM)))).isTrue(); + } } diff --git a/src/test/integration/org/apache/cassandra/sidecar/routes/tokenrange/BasicRf1Test.java b/src/test/integration/org/apache/cassandra/sidecar/routes/tokenrange/BasicRf1Test.java index 4a63ef1..bd507dd 100644 --- a/src/test/integration/org/apache/cassandra/sidecar/routes/tokenrange/BasicRf1Test.java +++ b/src/test/integration/org/apache/cassandra/sidecar/routes/tokenrange/BasicRf1Test.java @@ -50,4 +50,17 @@ class BasicRf1Test extends BaseTokenRangeIntegrationTest context.completeNow(); }); } + + @CassandraIntegrationTest() + void retrieveMappingSingleNodeRf1(VertxTestContext context) throws Exception + { + createTestKeyspace(); + retrieveMappingWithKeyspace(context, TEST_KEYSPACE, response -> { + assertThat(response.statusCode()).isEqualTo(HttpResponseStatus.OK.code()); + TokenRangeReplicasResponse mappingResponse = response.bodyAsJson(TokenRangeReplicasResponse.class); + assertMappingResponseOK(mappingResponse, 1, Collections.singleton("datacenter1")); + context.completeNow(); + }); + } + } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org