{"record":{"id":"3164b9608cb6f945","repo":"apache/cassandra","slug":"extensions-differ","errorCode":null,"errorMessage":"Extensions differ: {} != {}","messagePattern":"Extensions differ: (.+?) != (.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"src/java/org/apache/cassandra/tcm/ClusterMetadata.java","lineNumber":1271,"sourceCode":"            logger.warn(\"Token maps differ:\");\n            tokenMap.dumpDiff(other.tokenMap);\n        }\n        if (!placements.equals(other.placements))\n        {\n            logger.warn(\"Placements differ:\");\n            placements.dumpDiff(other.placements);\n        }\n        if (!lockedRanges.equals(other.lockedRanges))\n        {\n            logger.warn(\"Locked ranges differ: {} != {}\", lockedRanges, other.lockedRanges);\n        }\n        if (!inProgressSequences.equals(other.inProgressSequences))\n        {\n            logger.warn(\"In progress sequences differ: {} != {}\", inProgressSequences, other.inProgressSequences);\n        }\n        if (!extensions.equals(other.extensions))\n        {\n            logger.warn(\"Extensions differ: {} != {}\", extensions, other.extensions);\n        }\n        if (!cmsMembership.equals(other.cmsMembership))\n        {\n            logger.warn(\"CMS Membership differ: {} != {}\", cmsMembership, other.cmsMembership);\n        }\n    }\n\n    @Override\n    public int hashCode()\n    {\n        return Objects.hash(epoch, schema, directory, tokenMap, placements, accordFastPath, lockedRanges, inProgressSequences, consensusMigrationState, accordStaleReplicas, extensions, cmsMembership);\n    }\n\n    public static ClusterMetadata current()\n    {\n        return ClusterMetadataService.instance().metadata();\n    }\n","sourceCodeStart":1253,"sourceCodeEnd":1289,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/tcm/ClusterMetadata.java#L1253-L1289","documentation":"ClusterMetadata logs a warning when the extensions map (TCM Transformation extensions registered by pluggable components) differs between two ClusterMetadata instances. This is diagnostic output from the metadata comparison helper indicating that one instance carries extension state the other does not.","triggerScenarios":"Comparing ClusterMetadata instances where registered extensions (e.g.placement or topology extensions added by a Transformation) are present in one but missing or different in the other.","commonSituations":"Mixed-version clusters where one node supports an extension the other does not; custom TCM extensions applied during a transformation; debugging snapshot/log application mismatches.","solutions":["Verify all nodes run a version supporting the same TCM extensions (align versions).","Check which extension keys differ in the logged maps and identify the owning subsystem.","Complete or retry the pending transformation so both sides converge.","If divergence persists, fetch a fresh log/snapshot from the CMS."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"if (!local.extensions().keySet().equals(remote.extensions().keySet())) logger.warn(\"extension sets differ; possible mixed versions\");","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Keep all cluster nodes on the same Cassandra version","Document any custom TCM extensions and their version requirements","Diff extensions explicitly before relying on equality checks"],"tags":["cluster-metadata","extensions","diagnostics"],"backgroundTag":"internal-invariant-violation","analyzedSha":"88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1","analyzedAt":"2026-09-10T07:29:22.284Z","contentChangedAt":"2026-09-10T07:29:22.284Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}