{"record":{"id":"b41bad42950fa957","repo":"apache/cassandra","slug":"componentmetadata-not-found","errorCode":null,"errorMessage":" ComponentMetadata not found","messagePattern":" ComponentMetadata not found","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"critical","filePath":"src/java/org/apache/cassandra/index/sai/disk/v1/segment/SegmentMetadata.java","lineNumber":273,"sourceCode":"        {\n            metas.put(indexComponent, new ComponentMetadata(root, offset, length, additionalMap));\n        }\n\n        private void write(IndexOutput output) throws IOException\n        {\n            output.writeInt(metas.size());\n\n            for (Map.Entry<IndexComponent, ComponentMetadata> entry : metas.entrySet())\n            {\n                output.writeString(entry.getKey().name());\n                entry.getValue().write(output);\n            }\n        }\n\n        public ComponentMetadata get(IndexComponent indexComponent)\n        {\n            if (!metas.containsKey(indexComponent))\n                throw new IllegalArgumentException(indexComponent + \" ComponentMetadata not found\");\n\n            return metas.get(indexComponent);\n        }\n\n        public Map<String, Map<String, String>> asMap()\n        {\n            Map<String, Map<String, String>> metaAttributes = new HashMap<>();\n\n            for (Map.Entry<IndexComponent, ComponentMetadata> entry : metas.entrySet())\n            {\n                String name = entry.getKey().name();\n                ComponentMetadata metadata = entry.getValue();\n\n                Map<String, String> componentAttributes = metadata.asMap();\n\n                assert !metaAttributes.containsKey(name) : \"Found duplicate index type: \" + name;\n                metaAttributes.put(name, componentAttributes);\n            }","sourceCodeStart":255,"sourceCodeEnd":291,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/index/sai/disk/v1/segment/SegmentMetadata.java#L255-L291","documentation":"IllegalArgumentException thrown by SegmentMetadata.ComponentMetadata.get when the requested IndexComponent has no metadata entry in the segment. Each segment's metadata must contain a ComponentMetadata for every component the reader needs (balanced tree, posting lists, terms, etc.); a miss means the segment was written without that component or the wrong component was requested.","triggerScenarios":"Calling get() with an IndexComponent absent from the metas map, e.g. reading a legacy/corrupted segment that lacks POSTING_LISTS or BALANCED_TREE metadata, or code requesting a component not written for that segment type.","commonSituations":"Corrupted or truncated index metadata, opening index files written by a different Cassandra/SAI version, mixing component files across segments, or custom/patched readers asking for extra components.","solutions":["REBUILD the secondary index (or scrub/recompact the SSTable) to regenerate complete segment metadata","Verify the index files belong to the same segment generation and version; restore consistent files from backup","Check the SAI version that wrote the index matches the running node's reader version","If a code path requests an optional component, call contains()/check existence before get()"],"exampleFix":"// before\nComponentMetadata meta = metas.get(IndexComponent.POSTING_LISTS); // get() throws if absent\n// after\nif (metas.containsKey(IndexComponent.POSTING_LISTS))\n{\n    ComponentMetadata meta = metas.get(IndexComponent.POSTING_LISTS);\n}\nelse\n{\n    logger.warn(\"Segment {} lacks POSTING_LISTS metadata; skipping\", segment);\n}","handlingStrategy":"validation","validationCode":"if (!componentMetas.containsKey(indexComponent)) {\n    logger.warn(\"Segment {} missing metadata for {}; rebuilding index\", segment, indexComponent);\n    rebuildIndex();\n}","typeGuard":"boolean hasComponentMetadata(ComponentMetadataHolder holder, IndexComponent c) {\n    return holder != null && holder.contains(c);\n}","tryCatchPattern":"try {\n    ComponentMetadata meta = metas.get(indexComponent);\n} catch (IllegalArgumentException e) {\n    logger.error(\"Segment metadata incomplete: {}\", e.getMessage());\n    rebuildIndex();\n}","preventionTips":["Rebuild secondary indexes after restoring SSTables from backup","Ensure component files are copied as a complete, consistent set","Keep SAI format versions aligned between writer and reader nodes"],"tags":["cassandra","sai","segment-metadata","corruption"],"backgroundTag":"resource-not-found","analyzedSha":"88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1","analyzedAt":"2026-09-10T07:29:22.284Z","contentChangedAt":"2026-09-10T07:29:22.284Z","schemaVersion":2},"datasetVersion":"2026-09-14T21:17:11.552Z"}