This is an automated email from the ASF dual-hosted git repository.

bbotella 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 db336d976 CASSSIDECAR-502: Connected client stats endpoint returns 500 
when sidecar schema is disabled (#387)
db336d976 is described below

commit db336d9764e16efd99bf5491f9c46c2794864063
Author: Arvind Kandpal <[email protected]>
AuthorDate: Wed Oct 7 13:50:32 2026 +0530

    CASSSIDECAR-502: Connected client stats endpoint returns 500 when sidecar 
schema is disabled (#387)
---
 .../base/db/ConnectedClientStatsDatabaseAccessor.java     | 15 +++++++++++++--
 .../adapters/base/CassandraMetricsOperationsTest.java     | 14 ++++++++++++++
 2 files changed, 27 insertions(+), 2 deletions(-)

diff --git 
a/adapters/adapters-base/src/main/java/org/apache/cassandra/sidecar/adapters/base/db/ConnectedClientStatsDatabaseAccessor.java
 
b/adapters/adapters-base/src/main/java/org/apache/cassandra/sidecar/adapters/base/db/ConnectedClientStatsDatabaseAccessor.java
index f465c9d4f..3c44b9258 100644
--- 
a/adapters/adapters-base/src/main/java/org/apache/cassandra/sidecar/adapters/base/db/ConnectedClientStatsDatabaseAccessor.java
+++ 
b/adapters/adapters-base/src/main/java/org/apache/cassandra/sidecar/adapters/base/db/ConnectedClientStatsDatabaseAccessor.java
@@ -24,6 +24,7 @@ import java.util.stream.StreamSupport;
 import com.datastax.driver.core.BoundStatement;
 import com.datastax.driver.core.ResultSet;
 import 
org.apache.cassandra.sidecar.adapters.base.db.schema.ConnectedClientsSchema;
+import 
org.apache.cassandra.sidecar.adapters.base.exception.OperationUnavailableException;
 import org.apache.cassandra.sidecar.common.server.ICassandraAdapter;
 import org.apache.cassandra.sidecar.common.utils.Preconditions;
 import org.apache.cassandra.sidecar.db.LocalDatabaseAccessor;
@@ -45,7 +46,7 @@ public class ConnectedClientStatsDatabaseAccessor extends 
LocalDatabaseAccessor<
      */
     public ConnectedClientStatsSummary summary()
     {
-        Preconditions.checkState(tableSchema.isInitialized(), () -> 
tableSchema.getClass().getSimpleName() + " is not initialized yet");
+        ensureSchemaAvailable();
         BoundStatement statement = tableSchema.connectionsByUser().bind();
         ResultSet resultSet = execute(statement);
         return ConnectedClientStatsSummary.from(resultSet);
@@ -57,10 +58,20 @@ public class ConnectedClientStatsDatabaseAccessor extends 
LocalDatabaseAccessor<
      */
     public Stream<ConnectedClientStats> stats()
     {
-        Preconditions.checkState(tableSchema.isInitialized(), () -> 
tableSchema.getClass().getSimpleName() + " is not initialized yet");
+        ensureSchemaAvailable();
         BoundStatement statement = tableSchema.stats().bind();
         ResultSet resultSet = execute(statement);
         return StreamSupport.stream(resultSet.spliterator(), false)
                             .map(ConnectedClientStats::from);
     }
+
+    private void ensureSchemaAvailable()
+    {
+        // Null when sidecar schema is disabled
+        if (tableSchema == null)
+        {
+            throw new OperationUnavailableException("Sidecar schema is 
required for the operation but it is disabled");
+        }
+        Preconditions.checkState(tableSchema.isInitialized(), () -> 
tableSchema.getClass().getSimpleName() + " is not initialized yet");
+    }
 }
diff --git 
a/adapters/adapters-base/src/test/java/org/apache/cassandra/sidecar/adapters/base/CassandraMetricsOperationsTest.java
 
b/adapters/adapters-base/src/test/java/org/apache/cassandra/sidecar/adapters/base/CassandraMetricsOperationsTest.java
index 08a2d751d..d153f8191 100644
--- 
a/adapters/adapters-base/src/test/java/org/apache/cassandra/sidecar/adapters/base/CassandraMetricsOperationsTest.java
+++ 
b/adapters/adapters-base/src/test/java/org/apache/cassandra/sidecar/adapters/base/CassandraMetricsOperationsTest.java
@@ -21,6 +21,7 @@ package org.apache.cassandra.sidecar.adapters.base;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
+import 
org.apache.cassandra.sidecar.adapters.base.exception.OperationUnavailableException;
 import 
org.apache.cassandra.sidecar.adapters.base.jmx.CounterMetricsJmxOperations;
 import 
org.apache.cassandra.sidecar.adapters.base.jmx.GaugeMetricsJmxOperations;
 import 
org.apache.cassandra.sidecar.adapters.base.jmx.MeterMetricsJmxOperations;
@@ -123,4 +124,17 @@ class CassandraMetricsOperationsTest
         .isInstanceOf(RuntimeException.class)
         .hasMessage("JMX connection failed");
     }
+
+    @Test
+    void testConnectedClientStatsFailureSchemaDisabled()
+    {
+        // TableSchemaFetcher mock returns a null schema, as when sidecar 
schema is disabled
+        assertThatThrownBy(() -> metricsOperations.connectedClientStats(true))
+        .isInstanceOf(OperationUnavailableException.class)
+        .hasMessage("Sidecar schema is required for the operation but it is 
disabled");
+
+        assertThatThrownBy(() -> metricsOperations.connectedClientStats(false))
+        .isInstanceOf(OperationUnavailableException.class)
+        .hasMessage("Sidecar schema is required for the operation but it is 
disabled");
+    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to