{"record":{"id":"beedb694bbaa54f9","repo":"apache/cassandra","slug":"timeout-must-be-non-negative","errorCode":null,"errorMessage":"timeout must be non-negative","messagePattern":"timeout must be non-negative","errorType":"validation","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/tools/NodeProbe.java","lineNumber":1747,"sourceCode":"    }\n\n    public String getGossipInfo(boolean withPort, boolean resolveIp)\n    {\n        if (resolveIp)\n            return withPort ? fdProxy.getAllEndpointStatesWithPortAndResolveIp() : fdProxy.getAllEndpointStatesWithResolveIp();\n        else\n            return withPort ? fdProxy.getAllEndpointStatesWithPort() : fdProxy.getAllEndpointStates();\n    }\n\n    public void stop(String string)\n    {\n        compactionProxy.stopCompaction(string);\n    }\n\n    public void setTimeout(String type, long value)\n    {\n        if (value < 0)\n            throw new RuntimeException(\"timeout must be non-negative\");\n\n        switch (type)\n        {\n            case \"misc\":\n                ssProxy.setRpcTimeout(value);\n                break;\n            case \"read\":\n                ssProxy.setReadRpcTimeout(value);\n                break;\n            case \"range\":\n                ssProxy.setRangeRpcTimeout(value);\n                break;\n            case \"write\":\n                ssProxy.setWriteRpcTimeout(value);\n                break;\n            case \"counterwrite\":\n                ssProxy.setCounterWriteRpcTimeout(value);\n                break;","sourceCodeStart":1729,"sourceCodeEnd":1765,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/tools/NodeProbe.java#L1729-L1765","documentation":"NodeProbe.setTimeout(String type, long value) rejects negative timeout values before dispatching to any JMX setter. Timeouts in Cassandra are millisecond durations and must be >= 0. This is a straightforward argument-range validation failure.","triggerScenarios":"Calling `nodetool settimeout <type> <negative-number>`, e.g. `nodetool settimeout write -100`, or scripting that computes a negative value (e.g. parsing a config with sign error).","commonSituations":"Automation scripts passing unparsed or wrongly parsed values; confusion between -1 sentinel semantics (not supported here) and actual disable semantics.","solutions":["Pass a non-negative millisecond value, e.g. `nodetool settimeout write 20000`","Fix the script variable that produced the negative number","To restore defaults, set the original cassandra.yaml value rather than a negative"],"exampleFix":"// before\nprobe.setTimeout(\"read\", -1);\n// after\nlong timeoutMs = 5000;\nprobe.setTimeout(\"read\", timeoutMs);","handlingStrategy":"validation","validationCode":"if (value < 0) throw new IllegalArgumentException(\"timeout must be >= 0 ms, got \" + value);","typeGuard":null,"tryCatchPattern":"try { probe.setTimeout(type, value); } catch (RuntimeException e) { /* surface a friendly message to the CLI user */ }","preventionTips":["Clamp or validate duration inputs before passing","Parse CLI numbers with Long.parseLong and check sign","Remember -1 is NOT a supported sentinel here"],"tags":["nodetool","cli-argument","timeout","validation"],"backgroundTag":"value-out-of-range","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"}