apache/cassandra · error · RuntimeException
Error reading:
Error message
Error reading:
What it means
RuntimeException thrown by NodeProbe's thread-pool metric reader when reading the JMX attribute fails (IOException/instance errors while proxying the gauge/counter MBean). It is a wrapper guard: the metric name was recognized but the MBean attribute could not be read from the remote server.
Solutions
- Retry; transient JMX failures are common under load
- Verify the thread pool MBean still exists (pool may have been removed)
- Check JMX connection stability and timeouts
Defensive patterns
Strategy: try-catch
When it happens
Trigger: Thrown at src/java/org/apache/cassandra/tools/NodeProbe.java:2032 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10).
Data as JSON: /api/errors/3f94740710d2d04c.
Report an issue: GitHub.
Appendix: source
Thrown at src/java/org/apache/cassandra/tools/NodeProbe.java:2032
switch (metricName)
{
case ThreadPoolMetrics.ACTIVE_TASKS:
case ThreadPoolMetrics.PENDING_TASKS:
case ThreadPoolMetrics.COMPLETED_TASKS:
case ThreadPoolMetrics.CORE_POOL_SIZE:
case ThreadPoolMetrics.MAX_POOL_SIZE:
case ThreadPoolMetrics.MAX_TASKS_QUEUED:
return JMX.newMBeanProxy(mbeanServerConn, oName, CassandraMetricsRegistry.JmxGaugeMBean.class).getValue();
case ThreadPoolMetrics.TOTAL_BLOCKED_TASKS:
case ThreadPoolMetrics.CURRENTLY_BLOCKED_TASKS:
return JMX.newMBeanProxy(mbeanServerConn, oName, CassandraMetricsRegistry.JmxCounterMBean.class).getCount();
default:
throw new AssertionError("Unknown ThreadPools metric name " + metricName);
}
}
catch (Exception e)
{
throw new RuntimeException("Error reading: " + name, e);
}
}
public Object getSaiMetric(String ks, String cf, String metricName)
{
try
{
String scope = getSaiMetricScope(metricName);
String objectNameStr = String.format("org.apache.cassandra.metrics:type=StorageAttachedIndex,keyspace=%s,table=%s,scope=%s,name=%s",ks, cf, scope, metricName);
ObjectName oName = new ObjectName(objectNameStr);
Set<ObjectName> matchingMBeans = mbeanServerConn.queryNames(oName, null);
if (matchingMBeans.isEmpty())
return null;
return getSaiMetricValue(metricName, oName);
}
catch (MalformedObjectNameException e)View on GitHub (pinned to 88fd0f6a0e)