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 b646bc8d CASSSIDECAR-355: Avoid creating objects in the
CassandraAdapter implementation (#269)
b646bc8d is described below
commit b646bc8d0a0b3b4064dfa556c146bdc4bb1d7b67
Author: Francisco Guerrero <[email protected]>
AuthorDate: Fri Oct 10 16:30:21 2025 -0700
CASSSIDECAR-355: Avoid creating objects in the CassandraAdapter
implementation (#269)
Patch by Francisco Guerrero; reviewed by Saranya Krishnakumar, Yifan Cai
for CASSSIDECAR-355
---
.../sidecar/adapters/base/CassandraAdapter.java | 67 +++++++++++++++++++---
.../sidecar/adapters/base/CassandraFactory.java | 7 ++-
.../adapters/cassandra41/Cassandra41Adapter.java | 2 +-
.../adapters/cassandra41/Cassandra41Factory.java | 7 ++-
...kenZeroElectorateMembershipIntegrationTest.java | 6 +-
5 files changed, 73 insertions(+), 16 deletions(-)
diff --git
a/adapters/adapters-base/src/main/java/org/apache/cassandra/sidecar/adapters/base/CassandraAdapter.java
b/adapters/adapters-base/src/main/java/org/apache/cassandra/sidecar/adapters/base/CassandraAdapter.java
index 587b5dc8..15f5a73e 100644
---
a/adapters/adapters-base/src/main/java/org/apache/cassandra/sidecar/adapters/base/CassandraAdapter.java
+++
b/adapters/adapters-base/src/main/java/org/apache/cassandra/sidecar/adapters/base/CassandraAdapter.java
@@ -19,6 +19,7 @@
package org.apache.cassandra.sidecar.adapters.base;
import java.net.InetSocketAddress;
+import java.util.Objects;
import com.datastax.driver.core.ConsistencyLevel;
import com.datastax.driver.core.Host;
@@ -54,8 +55,13 @@ public class CassandraAdapter implements ICassandraAdapter
protected final CQLSessionProvider cqlSessionProvider;
protected final InetSocketAddress localNativeTransportAddress;
protected final DriverUtils driverUtils;
- private final TableSchemaFetcher tableSchemaFetcher;
private volatile Host host;
+ private final StorageOperations storageOperations;
+ private final ClusterMembershipOperations clusterMembershipOperations;
+ private final TableOperations tableOperations;
+ private final CompactionManagerOperations compactionManagerOperations;
+ private final MetricsOperations metricsOperations;
+ private final CompactionStatsOperations compactionStatsOperations;
public CassandraAdapter(DnsResolver dnsResolver,
JmxClient jmxClient,
@@ -69,7 +75,13 @@ public class CassandraAdapter implements ICassandraAdapter
this.cqlSessionProvider = cqlSessionProvider;
this.localNativeTransportAddress = localNativeTransportAddress;
this.driverUtils = driverUtils;
- this.tableSchemaFetcher = tableSchemaFetcher;
+ this.storageOperations =
Objects.requireNonNull(createStorageOperations(dnsResolver, jmxClient),
"storageOperations is required");
+ this.clusterMembershipOperations =
Objects.requireNonNull(createClusterMembershipOperations(jmxClient),
"clusterMembershipOperations is required");
+ this.tableOperations =
Objects.requireNonNull(createTableOperations(jmxClient), "tableOperations is
required");
+ this.compactionManagerOperations =
Objects.requireNonNull(createCompactionManagerOperations(jmxClient),
"compactionManagerOperations is required");
+ this.metricsOperations =
Objects.requireNonNull(createMetricsOperations(jmxClient, tableSchemaFetcher),
"metricsOperations is required");
+ this.compactionStatsOperations =
Objects.requireNonNull(createCompactionStatsOperations(storageOperations,
metricsOperations,
+
compactionManagerOperations), "compactionStatsOperations is
required");
}
/**
@@ -126,14 +138,14 @@ public class CassandraAdapter implements ICassandraAdapter
@NotNull
public StorageOperations storageOperations()
{
- return new CassandraStorageOperations(jmxClient, dnsResolver);
+ return storageOperations;
}
@Override
@NotNull
public MetricsOperations metricsOperations()
{
- return new CassandraMetricsOperations(jmxClient, tableSchemaFetcher,
this);
+ return metricsOperations;
}
/**
@@ -143,7 +155,7 @@ public class CassandraAdapter implements ICassandraAdapter
@NotNull
public ClusterMembershipOperations clusterMembershipOperations()
{
- return new CassandraClusterMembershipOperations(jmxClient);
+ return clusterMembershipOperations;
}
/**
@@ -153,7 +165,7 @@ public class CassandraAdapter implements ICassandraAdapter
@NotNull
public TableOperations tableOperations()
{
- return new CassandraTableOperations(jmxClient);
+ return tableOperations;
}
/**
@@ -163,7 +175,7 @@ public class CassandraAdapter implements ICassandraAdapter
@NotNull
public CompactionManagerOperations compactionManagerOperations()
{
- return new CassandraCompactionManagerOperations(jmxClient);
+ return compactionManagerOperations;
}
/**
@@ -173,7 +185,7 @@ public class CassandraAdapter implements ICassandraAdapter
@NotNull
public CompactionStatsOperations compactionStatsOperations()
{
- return new CassandraCompactionStatsOperations(storageOperations(),
metricsOperations(), compactionManagerOperations());
+ return compactionStatsOperations;
}
/**
@@ -185,6 +197,45 @@ public class CassandraAdapter implements ICassandraAdapter
return "CassandraAdapter" + "@" + Integer.toHexString(hashCode());
}
+ @NotNull
+ protected StorageOperations createStorageOperations(DnsResolver
dnsResolver, JmxClient jmxClient)
+ {
+ return new CassandraStorageOperations(jmxClient, dnsResolver);
+ }
+
+ @NotNull
+ protected ClusterMembershipOperations
createClusterMembershipOperations(JmxClient jmxClient)
+ {
+ return new CassandraClusterMembershipOperations(jmxClient);
+ }
+
+ @NotNull
+ protected TableOperations createTableOperations(JmxClient jmxClient)
+ {
+ return new CassandraTableOperations(jmxClient);
+ }
+
+ @NotNull
+ protected CompactionManagerOperations
createCompactionManagerOperations(JmxClient jmxClient)
+ {
+ return new CassandraCompactionManagerOperations(jmxClient);
+ }
+
+ @NotNull
+ protected MetricsOperations createMetricsOperations(JmxClient jmxClient,
+ TableSchemaFetcher
tableSchemaFetcher)
+ {
+ return new CassandraMetricsOperations(jmxClient, tableSchemaFetcher,
this);
+ }
+
+ @NotNull
+ protected CompactionStatsOperations
createCompactionStatsOperations(StorageOperations storageOperations,
+
MetricsOperations metricsOperations,
+
CompactionManagerOperations compactionManagerOperations)
+ {
+ return new CassandraCompactionStatsOperations(storageOperations,
metricsOperations, compactionManagerOperations);
+ }
+
@NotNull
protected Host getHost(Metadata metadata)
{
diff --git
a/adapters/adapters-base/src/main/java/org/apache/cassandra/sidecar/adapters/base/CassandraFactory.java
b/adapters/adapters-base/src/main/java/org/apache/cassandra/sidecar/adapters/base/CassandraFactory.java
index 10a8dae2..00c3c502 100644
---
a/adapters/adapters-base/src/main/java/org/apache/cassandra/sidecar/adapters/base/CassandraFactory.java
+++
b/adapters/adapters-base/src/main/java/org/apache/cassandra/sidecar/adapters/base/CassandraFactory.java
@@ -19,6 +19,7 @@
package org.apache.cassandra.sidecar.adapters.base;
import java.net.InetSocketAddress;
+import java.util.Objects;
import org.apache.cassandra.sidecar.common.server.CQLSessionProvider;
import org.apache.cassandra.sidecar.common.server.ICassandraAdapter;
@@ -41,9 +42,9 @@ public class CassandraFactory implements ICassandraFactory
public CassandraFactory(DnsResolver dnsResolver, DriverUtils driverUtils,
TableSchemaFetcher tableSchemaFetcher)
{
- this.dnsResolver = dnsResolver;
- this.driverUtils = driverUtils;
- this.tableSchemaFetcher = tableSchemaFetcher;
+ this.dnsResolver = Objects.requireNonNull(dnsResolver, "dnsResolver is
required");
+ this.driverUtils = Objects.requireNonNull(driverUtils, "driverUtils is
required");
+ this.tableSchemaFetcher = Objects.requireNonNull(tableSchemaFetcher,
"tableSchemaFetcher is required");
}
/**
diff --git
a/adapters/adapters-cassandra41/src/main/java/org/apache/cassandra/sidecar/adapters/cassandra41/Cassandra41Adapter.java
b/adapters/adapters-cassandra41/src/main/java/org/apache/cassandra/sidecar/adapters/cassandra41/Cassandra41Adapter.java
index 9c7af1b9..6a6e269f 100644
---
a/adapters/adapters-cassandra41/src/main/java/org/apache/cassandra/sidecar/adapters/cassandra41/Cassandra41Adapter.java
+++
b/adapters/adapters-cassandra41/src/main/java/org/apache/cassandra/sidecar/adapters/cassandra41/Cassandra41Adapter.java
@@ -50,7 +50,7 @@ public class Cassandra41Adapter extends CassandraAdapter
*/
@Override
@NotNull
- public StorageOperations storageOperations()
+ protected StorageOperations createStorageOperations(DnsResolver
dnsResolver, JmxClient jmxClient)
{
return new Cassandra41StorageOperations(jmxClient, dnsResolver);
}
diff --git
a/adapters/adapters-cassandra41/src/main/java/org/apache/cassandra/sidecar/adapters/cassandra41/Cassandra41Factory.java
b/adapters/adapters-cassandra41/src/main/java/org/apache/cassandra/sidecar/adapters/cassandra41/Cassandra41Factory.java
index 5199ee20..6da770ee 100644
---
a/adapters/adapters-cassandra41/src/main/java/org/apache/cassandra/sidecar/adapters/cassandra41/Cassandra41Factory.java
+++
b/adapters/adapters-cassandra41/src/main/java/org/apache/cassandra/sidecar/adapters/cassandra41/Cassandra41Factory.java
@@ -19,6 +19,7 @@
package org.apache.cassandra.sidecar.adapters.cassandra41;
import java.net.InetSocketAddress;
+import java.util.Objects;
import org.apache.cassandra.sidecar.common.server.CQLSessionProvider;
import org.apache.cassandra.sidecar.common.server.ICassandraAdapter;
@@ -41,9 +42,9 @@ public class Cassandra41Factory implements ICassandraFactory
public Cassandra41Factory(DnsResolver dnsResolver, DriverUtils
driverUtils, TableSchemaFetcher tableSchemaFetcher)
{
- this.dnsResolver = dnsResolver;
- this.driverUtils = driverUtils;
- this.tableSchemaFetcher = tableSchemaFetcher;
+ this.dnsResolver = Objects.requireNonNull(dnsResolver, "dnsResolver is
required");
+ this.driverUtils = Objects.requireNonNull(driverUtils, "driverUtils is
required");
+ this.tableSchemaFetcher = Objects.requireNonNull(tableSchemaFetcher,
"tableSchemaFetcher is required");
}
/**
diff --git
a/integration-tests/src/integrationTest/org/apache/cassandra/sidecar/coordination/MostReplicatedKeyspaceTokenZeroElectorateMembershipIntegrationTest.java
b/integration-tests/src/integrationTest/org/apache/cassandra/sidecar/coordination/MostReplicatedKeyspaceTokenZeroElectorateMembershipIntegrationTest.java
index 81f08c1f..34e6de98 100644
---
a/integration-tests/src/integrationTest/org/apache/cassandra/sidecar/coordination/MostReplicatedKeyspaceTokenZeroElectorateMembershipIntegrationTest.java
+++
b/integration-tests/src/integrationTest/org/apache/cassandra/sidecar/coordination/MostReplicatedKeyspaceTokenZeroElectorateMembershipIntegrationTest.java
@@ -51,6 +51,9 @@ import
org.apache.cassandra.sidecar.common.server.utils.DriverUtils;
import
org.apache.cassandra.sidecar.common.server.utils.MillisecondBoundConfiguration;
import org.apache.cassandra.sidecar.config.SchemaKeyspaceConfiguration;
import org.apache.cassandra.sidecar.config.yaml.SidecarConfigurationImpl;
+import org.apache.cassandra.sidecar.db.schema.SidecarInternalKeyspace;
+import org.apache.cassandra.sidecar.db.schema.SidecarSchema;
+import org.apache.cassandra.sidecar.db.schema.TableSchemaFetcher;
import org.apache.cassandra.sidecar.metrics.MetricRegistryFactory;
import org.apache.cassandra.sidecar.metrics.instance.InstanceHealthMetrics;
import org.apache.cassandra.sidecar.testing.SharedExecutorNettyOptions;
@@ -77,7 +80,8 @@ class
MostReplicatedKeyspaceTokenZeroElectorateMembershipIntegrationTest
private static final SidecarConfigurationImpl CONFIG = new
SidecarConfigurationImpl();
Vertx vertx = Vertx.vertx();
DriverUtils driverUtils = new DriverUtils();
- CassandraVersionProvider cassandraVersionProvider =
TestUtils.cassandraVersionProvider(DnsResolvers.DEFAULT, null);
+ TableSchemaFetcher tableSchemaFetcher = new SidecarSchema(vertx, CONFIG,
new SidecarInternalKeyspace(CONFIG));
+ CassandraVersionProvider cassandraVersionProvider =
TestUtils.cassandraVersionProvider(DnsResolvers.DEFAULT, tableSchemaFetcher);
MetricRegistryFactory metricRegistryProvider = new
MetricRegistryFactory("cassandra_sidecar", List.of(), List.of());
@ParameterizedTest(name = "{index} => version {0}")
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]