{"record":{"id":"6c1846a9d105cd9b","repo":"apache/cassandra","slug":"node-is-not-yet-bootstrapped-completely-use-nodet","errorCode":null,"errorMessage":"Node is not yet bootstrapped completely. Use nodetool to check bootstrap state and resume. For more, see `nodetool help bootstrap`","messagePattern":"Node is not yet bootstrapped completely\\. Use nodetool to check bootstrap state and resume\\. For more, see `nodetool help bootstrap`","errorType":"exception","errorClass":"IllegalStateException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/service/CassandraDaemon.java","lineNumber":932,"sourceCode":"            else\n            {\n                throw new IllegalStateException(\"Node is not yet bootstrapped completely\");\n            }\n        }\n        else\n        {\n            // Bootstrap with same address is an edge-case here, since we rely on HIBERNATE to prevent writes\n            // toward the bootstrapping replacement, so there's no startup sequence involved.\n            if (StorageService.isReplacingSameAddress() && StorageService.instance.isSurveyMode())\n                return;\n\n            // This node has not joined the ring (i.e. it was started with -Dcassandra.join_ring=false)\n            if (StorageService.instance.isStarting())\n                return;\n\n            if (!SystemKeyspace.bootstrapComplete())\n            {\n                throw new IllegalStateException(\"Node is not yet bootstrapped completely. Use nodetool to check bootstrap\" +\n                                                \" state and resume. For more, see `nodetool help bootstrap`\");\n            }\n        }\n    }\n\n    public void startNativeTransport()\n    {\n        validateTransportsCanStart();\n\n        if (nativeTransportService == null)\n            throw new IllegalStateException(\"setup() must be called first for CassandraDaemon\");\n\n        // this iterates over a collection of servers and returns true if one of them is started\n        boolean alreadyRunning = nativeTransportService.isRunning();\n\n        // this might in practice start all servers which are not started yet\n        nativeTransportService.start();\n","sourceCodeStart":914,"sourceCodeEnd":950,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/service/CassandraDaemon.java#L914-L950","documentation":"Outside a startup sequence, CassandraDaemon.validateTransportsCanStart verifies SystemKeyspace.bootstrapComplete(); if the local node has never recorded bootstrap completion, starting client transports throws this IllegalStateException. It explicitly points operators at nodetool to inspect and resume bootstrap. Nodes started with -Dcassandra.join_ring=false (isStarting) are exempt.","triggerScenarios":"Calling start()/startNativeTransport() on a node whose system.local/system.peers indicate bootstrap never completed — e.g. first start interrupted mid-bootstrap, or a node restarted after a failed initial bootstrap.","commonSituations":"Disk-full or network failure during initial streaming left bootstrap incomplete; operator restarted the node expecting it to come back up; automation enabled native transport on a freshly provisioned node that never joined the ring.","solutions":["Run `nodetool bootstrap resume` to continue the interrupted bootstrap, then start transports.","Check bootstrap state and streaming with `nodetool netstats` and `nodetool status`; resolve the underlying failure (disk space, connectivity).","If the node can never join, decommission/wipe the data directories and re-bootstrap from scratch.","If intentionally operating without joining the ring, the node was started with -Dcassandra.join_ring=false — that path is exempt; verify the flag matches intent."],"exampleFix":"// before\ncassandra.startNativeTransport();\n// after\nif (!SystemKeyspace.bootstrapComplete())\n    throw new IllegalStateException(\"Run 'nodetool bootstrap resume' before starting transports\");\ncassandra.startNativeTransport();","handlingStrategy":"validation","validationCode":"if (!SystemKeyspace.bootstrapComplete()) {\n    logger.warn(\"Bootstrap incomplete — run 'nodetool bootstrap resume'\");\n    return; // don't call startNativeTransport()\n}","typeGuard":null,"tryCatchPattern":"try { cassandra.startNativeTransport(); } catch (IllegalStateException e) { logger.error(\"Node not bootstrapped: {} — run nodetool bootstrap resume\", e.getMessage()); }","preventionTips":["Always complete or cleanly abort first bootstrap before restarting nodes","Watch disk space and network during initial streaming (common bootstrap-failure causes)","Check `nodetool netstats` and `nodetool status` in readiness checks","Alert on nodes whose bootstrap never completes within an SLA"],"tags":["cassandra","bootstrap","startup","nodetool"],"backgroundTag":"invalid-state-transition","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"}