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]

Reply via email to