{"record":{"id":"1f8e7a516815b6fd","repo":"apache/cassandra","slug":"initiator-schema-different-from-our","errorCode":null,"errorMessage":"Initiator schema different from our: {} != {}","messagePattern":"Initiator schema different from our: (.+?) != (.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"src/java/org/apache/cassandra/tcm/migration/Election.java","lineNumber":250,"sourceCode":"            ClusterMetadata metadata = ClusterMetadata.current();\n            boolean match = true;\n            if (!initiatorDirectory.equals(metadata.directory))\n            {\n                match = false;\n                logger.warn(\"Initiator directory different from our\");\n                initiatorDirectory.dumpDiff(metadata.directory);\n            }\n            if (!initiatorTokenMap.equals(metadata.tokenMap))\n            {\n                match = false;\n                logger.warn(\"Initiator tokenmap different from ours\");\n                initiatorTokenMap.dumpDiff(metadata.tokenMap);\n            }\n            UUID schemaDigest = SchemaKeyspace.calculateSchemaDigest();\n            if (!initiatorSchemaVersion.equals(schemaDigest))\n            {\n                match = false;\n                logger.warn(\"Initiator schema different from our: {} != {}\", initiatorSchemaVersion, schemaDigest);\n            }\n            messaging.send(message.responseWith(new CMSInitializationResponse(message.payload.initiator, match)), message.from());\n        }\n    }\n\n    public class AbortHandler implements IVerbHandler<CMSInitializationRequest.Initiator>\n    {\n        @Override\n        public void doVerb(Message<CMSInitializationRequest.Initiator> message) throws IOException\n        {\n            logger.info(\"Received election abort message {} from {}\", message.payload, message.from());\n            CMSInitializationRequest.Initiator remoteInitiator = message.payload;\n            if (initiator() == null)\n                logger.info(\"Initiator already cleared, ignoring abort message from {}: {}\", message.from(), remoteInitiator);\n            else if (!remoteInitiator.endpoint.equals(initiator().endpoint) || !updateInitiator(remoteInitiator, null))\n                logger.error(\"Could not clear initiator - initiator is set to {}, abort message received from {}: {}\", initiator(), message.from(), remoteInitiator);\n        }\n    }","sourceCodeStart":232,"sourceCodeEnd":268,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/tcm/migration/Election.java#L232-L268","documentation":"Warning logged by the CMS initialization handler when the schema version digest sent by the initiator does not match the digest computed locally via SchemaKeyspace.calculateSchemaDigest(). The handler flags match=false so the initiator aborts migration; schema must be identical cluster-wide before CMS ownership can be migrated.","triggerScenarios":"Handling TCM_INIT_MIG_REQ where message.payload.schemaVersion (a UUID digest) != SchemaKeyspace.calculateSchemaDigest() on this node — the node's schema tables have diverged from the initiator's.","commonSituations":"A rolling upgrade where nodes run different Cassandra versions with different schema; a DDL statement (CREATE/ALTER TABLE) applied on some nodes but not yet propagated; a node whose schema agreements failed after a previous DDL; schema pulled from a divergent snapshot.","solutions":["Wait for schema to propagate (check `nodetool describecluster` for schema disagreements) and retry the migration once all nodes report the same schema version","Find and fix schema disagreement: restart the disagreeing nodes or re-run the failed DDL statement so all schema tables converge","Ensure all nodes are on the same Cassandra version before initiating CMS migration"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"UUID localDigest = SchemaKeyspace.calculateSchemaDigest();\nif (!initiatorSchemaVersion.equals(localDigest)) {\n    // schema disagreement: wait for `nodetool describecluster` to show agreement\n    return;\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Run `nodetool describecluster` and confirm a single schema version before migrations","Avoid initiating migrations during rolling upgrades or while DDL is executing","Re-run any failed DDL so schema agreement is restored"],"tags":["schema","distributed-consistency","migration","version-skew"],"backgroundTag":"schema-validation-failed","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"}