{"record":{"id":"42a6e4488b863940","repo":"apache/cassandra","slug":"unknown-endpoint","errorCode":null,"errorMessage":"Unknown endpoint: ","messagePattern":"Unknown endpoint: ","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/service/StorageService.java","lineNumber":1729,"sourceCode":"        {\n            InetAddressAndPort endpoint;\n            try\n            {\n                endpoint = InetAddressAndPort.getByName(endpointStr);\n            }\n            catch (UnknownHostException e)\n            {\n                String msg = \"Unable to look up endpoint \" + endpointStr;\n                logger.warn(\"{}\", msg, e);\n                throw new IllegalArgumentException(msg, e);\n            }\n\n            nodeId = metadata.directory.peerId(endpoint);\n            if (nodeId == null)\n            {\n                String msg = \"Unknown endpoint: \" + endpoint;\n                logger.warn(msg);\n                throw new IllegalArgumentException(msg);\n            }\n        }\n        return nodeId;\n    }\n\n    @Override\n    public void migrateConsensusProtocol(@Nonnull List<String> keyspaceNames,\n                                         @Nullable List<String> maybeTableNames,\n                                         @Nullable String maybeRangesStr)\n    {\n        checkArgument(!keyspaceNames.contains(SchemaConstants.METADATA_KEYSPACE_NAME));\n        startMigrationToConsensusProtocol(keyspaceNames, Optional.ofNullable(maybeTableNames), Optional.ofNullable(maybeRangesStr));\n    }\n\n    @Override\n    public Integer finishConsensusMigration(@Nonnull String keyspace,\n                                            @Nullable List<String> maybeTableNames,\n                                            @Nullable String maybeRangesStr,","sourceCodeStart":1711,"sourceCodeEnd":1747,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/service/StorageService.java#L1711-L1747","documentation":"Thrown by parseNodeIdOrEndpoint in StorageService when the endpoint resolves to a valid IP but cluster metadata's directory has no peer id for it - the address is not (or no longer) a known cluster member. Thrown as IllegalArgumentException after logging at WARN.","triggerScenarios":"Calling `nodetool abortbootstrap <ip>` where the IP belongs to a machine that never joined, whose metadata entry was already removed by a previous Unregister, or which is in a different cluster.","commonSituations":"Node was already successfully aborted/unregistered; aborting an IP that never registered (e.g. new VM not yet started); targeting the wrong cluster or DC address; DHCP reuse giving an old node's address to a different host.","solutions":["Confirm the node actually registered with the cluster (check joining node logs for registration)","List known nodes/ids via `nodetool status` or cluster metadata and use the correct id/address","If already unregistered, no abort is needed - clean up any local data/state on the former bootstrap node directly","Verify you are pointed at the intended cluster's coordinator"],"exampleFix":"// before\nnodetool abortbootstrap 10.0.0.99   # unknown to this cluster\n// after\nnodetool status                      # find real member addresses\nnodetool abortbootstrap 10.0.0.5","handlingStrategy":"validation","validationCode":"// Confirm the endpoint is a known member before aborting\n// Parse `nodetool status` output and check the address appears there.\nSet<String> members = /* addresses from nodetool status */;\nif (!members.contains(endpoint)) throw new IllegalStateException(\"Unknown member: \" + endpoint);","typeGuard":null,"tryCatchPattern":"try {\n    probe.abortBootstrap(endpoint);\n} catch (IllegalArgumentException e) {\n    if (e.getMessage() != null && e.getMessage().startsWith(\"Unknown endpoint\"))\n        log.warn(\"{} is not in cluster metadata; it may already be unregistered\", endpoint);\n    else throw e;\n}","preventionTips":["Check `nodetool status` for the address before aborting","Remember abortbootstrap is one-shot - a second run fails because the entry is gone","Confirm you are on the right cluster/DC"],"tags":["nodetool","cluster-metadata","endpoint","bootstrap"],"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-14T11:17:12.474Z"}