Skip to content

Commit 66e668f

Browse files
CASSSIDECAR-411: RangeManager should be singleton in CDCModule (#323)
Patch by Jyothsna Konisa; Reviewed by Bernardo Botella, Yifan Cai and Josh McKenzie for CASSSIDECAR-411
1 parent 0f7180d commit 66e668f

5 files changed

Lines changed: 79 additions & 59 deletions

File tree

CHANGES.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
0.3.0
22
-----
3+
* RangeManager should be singleton in CDCModule (CASSSIDECAR-411)
34
* CDC: Add end-to-end CDC integration tests (CASSSIDECAR-308)
45
* SchemaStorePublisherFactory should be Injectable in CachingSchemaStore (CASSSIDECAR-408)
56
* Fix StorageClientTest Docker API compatibility and improve CI test reporting (CASSSIDECAR-410)

integration-tests/src/integrationTest/org/apache/cassandra/sidecar/testing/SharedClusterCdcSidecarIntegrationTestBase.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
import org.apache.cassandra.sidecar.config.yaml.ServiceConfigurationImpl;
4646
import org.apache.cassandra.sidecar.config.yaml.SidecarConfigurationImpl;
4747
import org.apache.cassandra.sidecar.coordination.ContentionFreeRangeManager;
48+
import org.apache.cassandra.sidecar.coordination.RangeManager;
4849
import org.apache.cassandra.sidecar.coordination.TokenRingProvider;
4950
import org.apache.cassandra.sidecar.db.CdcDatabaseAccessor;
5051
import org.apache.cassandra.sidecar.db.VirtualTablesDatabaseAccessor;
@@ -168,6 +169,7 @@ CdcPublisher cdcPublisher(Vertx vertx,
168169
Serializer<CdcEvent> avroSerializer,
169170
TokenRingProvider tokenRingProvider)
170171
{
172+
RangeManager rangeManager = new ContentionFreeRangeManager(vertx, tokenRingProvider);
171173
return new TestCdcPublisher(vertx,
172174
sidecarConfiguration,
173175
executorPools,
@@ -182,7 +184,7 @@ CdcPublisher cdcPublisher(Vertx vertx,
182184
virtualTables,
183185
sidecarCdcStats,
184186
avroSerializer,
185-
() -> new ContentionFreeRangeManager(vertx, tokenRingProvider));
187+
() -> rangeManager);
186188
}
187189

188190
@Provides

server/src/main/java/org/apache/cassandra/sidecar/modules/CdcModule.java

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
import org.apache.cassandra.sidecar.common.ApiEndpointsV1;
5454
import org.apache.cassandra.sidecar.common.request.data.AllServicesConfigPayload;
5555
import org.apache.cassandra.sidecar.common.response.ListCdcSegmentsResponse;
56+
import org.apache.cassandra.sidecar.common.server.dns.DnsResolver;
5657
import org.apache.cassandra.sidecar.concurrent.ExecutorPools;
5758
import org.apache.cassandra.sidecar.config.ServiceConfiguration;
5859
import org.apache.cassandra.sidecar.config.SidecarClientConfiguration;
@@ -61,6 +62,7 @@
6162
import org.apache.cassandra.sidecar.coordination.ContentionFreeRangeManager;
6263
import org.apache.cassandra.sidecar.coordination.DynamicSidecarInstancesProvider;
6364
import org.apache.cassandra.sidecar.coordination.InnerDcTokenAdjacentPeerProvider;
65+
import org.apache.cassandra.sidecar.coordination.RangeManager;
6466
import org.apache.cassandra.sidecar.coordination.SidecarHttpHealthProvider;
6567
import org.apache.cassandra.sidecar.coordination.SidecarPeerHealthMonitorTask;
6668
import org.apache.cassandra.sidecar.coordination.SidecarPeerHealthProvider;
@@ -360,9 +362,9 @@ public ICdcStats cdcStats()
360362

361363
@Provides
362364
@Singleton
363-
public TokenRingProvider tokenRingProvider(InstancesMetadata instancesMetadata, InstanceMetadataFetcher instanceMetadataFetcher, ServiceConfiguration configuration)
365+
public TokenRingProvider tokenRingProvider(InstancesMetadata instancesMetadata, InstanceMetadataFetcher instanceMetadataFetcher, DnsResolver dnsResolver)
364366
{
365-
return new CassandraClientTokenRingProvider(instancesMetadata, instanceMetadataFetcher, configuration.dnsResolver());
367+
return new CassandraClientTokenRingProvider(instancesMetadata, instanceMetadataFetcher, dnsResolver);
366368
}
367369

368370
@Provides
@@ -375,6 +377,13 @@ public SidecarCdcClient.ClientConfig clientConfig(SidecarConfiguration sidecarCo
375377
sidecarClientConfiguration.retryDelay().toIntMillis());
376378
}
377379

380+
@Provides
381+
@Singleton
382+
RangeManager rangeManager(Vertx vertx, TokenRingProvider tokenRingProvider)
383+
{
384+
return new ContentionFreeRangeManager(vertx, tokenRingProvider);
385+
}
386+
378387
@Provides
379388
@Singleton
380389
CdcPublisher cdcPublisher(Vertx vertx,
@@ -387,11 +396,11 @@ CdcPublisher cdcPublisher(Vertx vertx,
387396
InstanceMetadataFetcher instanceMetadataFetcher,
388397
CdcConfig conf,
389398
CdcDatabaseAccessor databaseAccessor,
390-
TokenRingProvider tokenRingProvider,
391399
ICdcStats cdcStats,
392400
VirtualTablesDatabaseAccessor virtualTables,
393401
SidecarCdcStats sidecarCdcStats,
394-
Serializer<CdcEvent> avroSerializer)
402+
Serializer<CdcEvent> avroSerializer,
403+
RangeManager rangeManager)
395404
{
396405
return new CdcPublisher(vertx,
397406
sidecarConfiguration,
@@ -407,7 +416,7 @@ CdcPublisher cdcPublisher(Vertx vertx,
407416
virtualTables,
408417
sidecarCdcStats,
409418
avroSerializer,
410-
() -> new ContentionFreeRangeManager(vertx, tokenRingProvider));
419+
() -> rangeManager);
411420
}
412421

413422
@Provides

server/src/test/java/org/apache/cassandra/sidecar/TestModule.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import com.google.inject.name.Named;
3737
import io.vertx.core.Vertx;
3838
import org.apache.cassandra.sidecar.cluster.CassandraAdapterDelegate;
39+
import org.apache.cassandra.sidecar.cluster.CassandraClientTokenRingProviderTest;
3940
import org.apache.cassandra.sidecar.cluster.InstancesMetadata;
4041
import org.apache.cassandra.sidecar.cluster.InstancesMetadataImpl;
4142
import org.apache.cassandra.sidecar.cluster.instance.InstanceMetadata;
@@ -199,7 +200,7 @@ private InstanceMetadata mockInstance(TestCassandraAdapterDelegate delegate,
199200
{
200201
StorageOperations mockStorageOperations = mock(StorageOperations.class);
201202
when(mockStorageOperations.dataFileLocations()).thenReturn(List.of(dataDir));
202-
Metadata metadata = mock(Metadata.class);
203+
Metadata metadata = CassandraClientTokenRingProviderTest.getMetadata();
203204
KeyspaceMetadata keyspaceMetadata = mock(KeyspaceMetadata.class);
204205
when(metadata.getKeyspace(any())).thenReturn(keyspaceMetadata);
205206
TableMetadata tableMetadata = mock(TableMetadata.class);
@@ -245,4 +246,11 @@ public CassandraVersionProvider cassandraVersionProvider()
245246
builder.add(new MockCassandraFactory());
246247
return builder.build();
247248
}
249+
250+
@Provides
251+
@Singleton
252+
public DnsResolver dnsResolver()
253+
{
254+
return CassandraClientTokenRingProviderTest.mockDnsResolver();
255+
}
248256
}

server/src/test/java/org/apache/cassandra/sidecar/cluster/CassandraClientTokenRingProviderTest.java

Lines changed: 52 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -92,46 +92,46 @@ public String reverseResolve(String s)
9292
}
9393
};
9494
Set<Host> allHosts = Set.of(
95-
mockHost("local1", "127.0.0.1", "-9223372036854775808", "DC1"),
96-
mockHost("local2", "127.0.0.2", "-8301034833169298228", "DC1"),
97-
mockHost("local3", "127.0.0.3", "-7378697629483820647", "DC1"),
98-
mockHost("local4", "127.0.0.4", "-6456360425798343066", "DC1"),
99-
mockHost("local5", "127.0.0.5", "-5534023222112865485", "DC1"),
100-
mockHost("local6", "127.0.0.6", "-4611686018427387904", "DC1"),
101-
mockHost("local7", "127.0.0.7", "-3689348814741910324", "DC1"),
102-
mockHost("local8", "127.0.0.8", "-2767011611056432743", "DC1"),
103-
mockHost("local9", "127.0.0.9", "-1844674407370955162", "DC1"),
104-
mockHost("local10", "127.0.0.10", "-922337203685477581", "DC1"),
105-
mockHost("local11", "127.0.0.11", "0", "DC1"),
106-
mockHost("local12", "127.0.0.12", "922337203685477580", "DC1"),
107-
mockHost("local13", "127.0.0.13", "1844674407370955161", "DC1"),
108-
mockHost("local14", "127.0.0.14", "2767011611056432742", "DC1"),
109-
mockHost("local15", "127.0.0.15", "3689348814741910323", "DC1"),
110-
mockHost("local16", "127.0.0.16", "4611686018427387904", "DC1"),
111-
mockHost("local17", "127.0.0.17", "5534023222112865484", "DC1"),
112-
mockHost("local18", "127.0.0.18", "6456360425798343065", "DC1"),
113-
mockHost("local19", "127.0.0.19", "7378697629483820646", "DC1"),
114-
mockHost("local20", "127.0.0.20", "8301034833169298227", "DC1"),
115-
mockHost("local21", "127.0.0.21", "-9223372036854775807", "DC2"),
116-
mockHost("local22", "127.0.0.22", "-8301034833169298227", "DC2"),
117-
mockHost("local23", "127.0.0.23", "-7378697629483820646", "DC2"),
118-
mockHost("local24", "127.0.0.24", "-6456360425798343065", "DC2"),
119-
mockHost("local25", "127.0.0.25", "-5534023222112865484", "DC2"),
120-
mockHost("local26", "127.0.0.26", "-4611686018427387903", "DC2"),
121-
mockHost("local27", "127.0.0.27", "-3689348814741910323", "DC2"),
122-
mockHost("local28", "127.0.0.28", "-2767011611056432742", "DC2"),
123-
mockHost("local29", "127.0.0.29", "-1844674407370955161", "DC2"),
124-
mockHost("local30", "127.0.0.30", "-922337203685477580", "DC2"),
125-
mockHost("local31", "127.0.0.31", "1", "DC2"),
126-
mockHost("local32", "127.0.0.32", "922337203685477581", "DC2"),
127-
mockHost("local33", "127.0.0.33", "1844674407370955162", "DC2"),
128-
mockHost("local34", "127.0.0.34", "2767011611056432743", "DC2"),
129-
mockHost("local35", "127.0.0.35", "3689348814741910324", "DC2"),
130-
mockHost("local36", "127.0.0.36", "4611686018427387905", "DC2"),
131-
mockHost("local37", "127.0.0.37", "5534023222112865485", "DC2"),
132-
mockHost("local38", "127.0.0.38", "6456360425798343066", "DC2"),
133-
mockHost("local39", "127.0.0.39", "7378697629483820647", "DC2"),
134-
mockHost("local40", "127.0.0.40", "8301034833169298228", "DC2")
95+
mockHost("localhost1", "127.0.0.1", "-9223372036854775808", "DC1"),
96+
mockHost("localhost2", "127.0.0.2", "-8301034833169298228", "DC1"),
97+
mockHost("localhost3", "127.0.0.3", "-7378697629483820647", "DC1"),
98+
mockHost("localhost4", "127.0.0.4", "-6456360425798343066", "DC1"),
99+
mockHost("localhost5", "127.0.0.5", "-5534023222112865485", "DC1"),
100+
mockHost("localhost6", "127.0.0.6", "-4611686018427387904", "DC1"),
101+
mockHost("localhost7", "127.0.0.7", "-3689348814741910324", "DC1"),
102+
mockHost("localhost8", "127.0.0.8", "-2767011611056432743", "DC1"),
103+
mockHost("localhost9", "127.0.0.9", "-1844674407370955162", "DC1"),
104+
mockHost("localhost10", "127.0.0.10", "-922337203685477581", "DC1"),
105+
mockHost("localhost11", "127.0.0.11", "0", "DC1"),
106+
mockHost("localhost12", "127.0.0.12", "922337203685477580", "DC1"),
107+
mockHost("localhost13", "127.0.0.13", "1844674407370955161", "DC1"),
108+
mockHost("localhost14", "127.0.0.14", "2767011611056432742", "DC1"),
109+
mockHost("localhost15", "127.0.0.15", "3689348814741910323", "DC1"),
110+
mockHost("localhost16", "127.0.0.16", "4611686018427387904", "DC1"),
111+
mockHost("localhost17", "127.0.0.17", "5534023222112865484", "DC1"),
112+
mockHost("localhost18", "127.0.0.18", "6456360425798343065", "DC1"),
113+
mockHost("localhost19", "127.0.0.19", "7378697629483820646", "DC1"),
114+
mockHost("localhost20", "127.0.0.20", "8301034833169298227", "DC1"),
115+
mockHost("localhost21", "127.0.0.21", "-9223372036854775807", "DC2"),
116+
mockHost("localhost22", "127.0.0.22", "-8301034833169298227", "DC2"),
117+
mockHost("localhost23", "127.0.0.23", "-7378697629483820646", "DC2"),
118+
mockHost("localhost24", "127.0.0.24", "-6456360425798343065", "DC2"),
119+
mockHost("localhost25", "127.0.0.25", "-5534023222112865484", "DC2"),
120+
mockHost("localhost26", "127.0.0.26", "-4611686018427387903", "DC2"),
121+
mockHost("localhost27", "127.0.0.27", "-3689348814741910323", "DC2"),
122+
mockHost("localhost28", "127.0.0.28", "-2767011611056432742", "DC2"),
123+
mockHost("localhost29", "127.0.0.29", "-1844674407370955161", "DC2"),
124+
mockHost("localhost30", "127.0.0.30", "-922337203685477580", "DC2"),
125+
mockHost("localhost31", "127.0.0.31", "1", "DC2"),
126+
mockHost("localhost32", "127.0.0.32", "922337203685477581", "DC2"),
127+
mockHost("localhost33", "127.0.0.33", "1844674407370955162", "DC2"),
128+
mockHost("localhost34", "127.0.0.34", "2767011611056432743", "DC2"),
129+
mockHost("localhost35", "127.0.0.35", "3689348814741910324", "DC2"),
130+
mockHost("localhost36", "127.0.0.36", "4611686018427387905", "DC2"),
131+
mockHost("localhost37", "127.0.0.37", "5534023222112865485", "DC2"),
132+
mockHost("localhost38", "127.0.0.38", "6456360425798343066", "DC2"),
133+
mockHost("localhost39", "127.0.0.39", "7378697629483820647", "DC2"),
134+
mockHost("localhost40", "127.0.0.40", "8301034833169298228", "DC2")
135135
);
136136
when(metadata.getAllHosts()).thenReturn(allHosts);
137137

@@ -208,7 +208,7 @@ public String reverseResolve(String s)
208208
.compareTo(BigInteger.ONE) > 0));
209209
}
210210

211-
private static Host mockHost(String node, String ip, String token, String dc)
211+
public static Host mockHost(String node, String ip, String token, String dc)
212212
{
213213
Host host = mock(Host.class, RETURNS_DEEP_STUBS);
214214
when(host.getTokens()).thenAnswer(invocation -> Set.of(new MockToken(token)));
@@ -282,12 +282,12 @@ private static TokenRange createMockTokenRange(Token start, Token end)
282282
}
283283
}
284284

285-
protected DnsResolver mockDnsResolver()
285+
public static DnsResolver mockDnsResolver()
286286
{
287287

288-
Map<String, String> dnsMap = Map.of("local1", "127.0.0.1",
289-
"local2", "127.0.0.2",
290-
"local13", "127.0.0.3"
288+
Map<String, String> dnsMap = Map.of("localhost", "127.0.0.1",
289+
"localhost2", "127.0.0.2",
290+
"localhost3", "127.0.0.3"
291291
);
292292
DnsResolver dnsResolver = mock(DnsResolver.class);
293293
try
@@ -308,21 +308,21 @@ private InstancesMetadata mockInstancesMetadata()
308308
{
309309
InstancesMetadata instancesMetadata = mock(InstancesMetadata.class);
310310

311-
InstanceMetadata instance1 = getMockInstanceMetaData(101000101, "local1", getMetadata());
312-
InstanceMetadata instance2 = getMockInstanceMetaData(101000201, "local2", getMetadata());
313-
InstanceMetadata instance3 = getMockInstanceMetaData(101000301, "local3", getMetadata());
311+
InstanceMetadata instance1 = getMockInstanceMetaData(101000101, "localhost", getMetadata());
312+
InstanceMetadata instance2 = getMockInstanceMetaData(101000201, "localhost2", getMetadata());
313+
InstanceMetadata instance3 = getMockInstanceMetaData(101000301, "localhost3", getMetadata());
314314
when(instancesMetadata.instances()).thenReturn(List.of(instance1, instance2, instance3));
315315
return instancesMetadata;
316316
}
317317

318-
private Metadata getMetadata()
318+
public static Metadata getMetadata()
319319
{
320320
Metadata metadata = mock(Metadata.class);
321321
when(metadata.getPartitioner()).thenReturn(Partitioners.MURMUR3.getClass().getSimpleName().toLowerCase());
322322
Set<Host> allHosts = Set.of(
323-
mockHost("local1", "127.0.0.1", "-9223372036854775808", "DC1"),
324-
mockHost("local2", "127.0.0.2", "-8301034833169298228", "DC1"),
325-
mockHost("local3", "127.0.0.3", "-7378697629483820647", "DC1")
323+
mockHost("localhost", "127.0.0.1", "-9223372036854775808", "DC1"),
324+
mockHost("localhost2", "127.0.0.2", "-8301034833169298228", "DC1"),
325+
mockHost("localhost3", "127.0.0.3", "-7378697629483820647", "DC1")
326326
);
327327
when(metadata.getAllHosts()).thenReturn(allHosts);
328328
return metadata;

0 commit comments

Comments
 (0)