{"record":{"id":"66e1be068491df20","repo":"apache/cassandra","slug":"invalid-objectname-format","errorCode":null,"errorMessage":"Invalid ObjectName format: ","messagePattern":"Invalid ObjectName format: ","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/tools/NodeProbe.java","lineNumber":2052,"sourceCode":"    }\n\n    public Object getSaiMetric(String ks, String cf, String metricName)\n    {\n        try\n        {\n            String scope = getSaiMetricScope(metricName);\n            String objectNameStr = String.format(\"org.apache.cassandra.metrics:type=StorageAttachedIndex,keyspace=%s,table=%s,scope=%s,name=%s\",ks, cf, scope, metricName);\n            ObjectName oName = new ObjectName(objectNameStr);\n\n            Set<ObjectName> matchingMBeans = mbeanServerConn.queryNames(oName, null);\n            if (matchingMBeans.isEmpty())\n                return null;\n\n            return getSaiMetricValue(metricName, oName);\n        }\n        catch (MalformedObjectNameException e)\n        {\n            throw new RuntimeException(\"Invalid ObjectName format: \" + e.getMessage(), e);\n        }\n        catch (IOException e)\n        {\n            throw new RuntimeException(\"Error accessing MBean server: \" + e.getMessage(), e);\n        }\n    }\n\n    private Object getSaiMetricValue(String metricName, ObjectName oName) throws IOException\n    {\n        switch (metricName)\n        {\n            case \"QueryLatency\":\n                return JMX.newMBeanProxy(mbeanServerConn, oName, CassandraMetricsRegistry.JmxTimerMBean.class);\n            case \"PostFilteringReadLatency\":\n            case \"SSTableIndexesHit\":\n            case \"IndexSegmentsHit\":\n            case \"RowsFiltered\":\n                return JMX.newMBeanProxy(mbeanServerConn, oName, CassandraMetricsRegistry.JmxHistogramMBean.class);","sourceCodeStart":2034,"sourceCodeEnd":2070,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/tools/NodeProbe.java#L2034-L2070","documentation":"RuntimeException thrown by NodeProbe.getSaiMetric when the formatted ObjectName string for a StorageAttachedIndex metric is not a valid ObjectName (MalformedObjectNameException), typically due to keyspace/table/metric names containing characters illegal in JMX ObjectName values.","triggerScenarios":"Thrown at src/java/org/apache/cassandra/tools/NodeProbe.java:2052 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Quote keyspace/table names with special characters (use ObjectName.quote) before building the name","Validate the metric name passed to nodetool sai metrics commands","Catch and report the malformed name to the caller instead of crashing the tool"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1","analyzedAt":"2026-09-10T07:29:22.284Z","contentChangedAt":"2026-09-10T07:29:22.284Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}