{"record":{"id":"6e1a45bc1f8e6582","repo":"apache/cassandra","slug":"snapshot-name-cannot-contain-6e1a45","errorCode":null,"errorMessage":"Snapshot name cannot contain ","messagePattern":"Snapshot name cannot contain ","errorType":"exception","errorClass":"java.io.IOException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/tools/nodetool/Snapshot.java","lineNumber":80,"sourceCode":"    public void execute(NodeProbe probe)\n    {\n        PrintStream out = probe.output().out;\n        try\n        {\n            StringBuilder sb = new StringBuilder();\n\n            sb.append(\"Requested creating snapshot(s) for \");\n\n            Map<String, String> options = new HashMap<String,String>();\n            options.put(SnapshotOptions.SKIP_FLUSH, Boolean.toString(skipFlush));\n            if (null != ttl) {\n                DurationSpec.LongNanosecondsBound d = new DurationSpec.LongNanosecondsBound(ttl);\n                options.put(SnapshotOptions.TTL, d.toString());\n            }\n\n            if (!snapshotName.isEmpty() && snapshotName.contains(File.pathSeparator()))\n            {\n                throw new IOException(\"Snapshot name cannot contain \" + File.pathSeparator());\n            }\n            // Create a separate path for kclist to avoid breaking of already existing scripts\n            if (null != ktList && !ktList.isEmpty())\n            {\n                ktList = ktList.replace(\" \", \"\");\n                if (keyspaces.isEmpty() && null == table)\n                    sb.append('[').append(ktList).append(']');\n                else\n                {\n                    throw new IOException(\n                            \"When specifying the Keyspace table list (using -kt,--kt-list,-kc,--kc.list), you must not also specify keyspaces to snapshot\");\n                }\n                if (!snapshotName.isEmpty())\n                    sb.append(\" with snapshot name [\").append(snapshotName).append(']');\n                sb.append(\" and options \").append(options);\n                out.println(sb);\n                probe.takeMultipleTableSnapshot(snapshotName, options, ktList.split(\",\"));\n                out.println(\"Snapshot directory: \" + snapshotName);","sourceCodeStart":62,"sourceCodeEnd":98,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/tools/nodetool/Snapshot.java#L62-L98","documentation":"nodetool snapshots names become directory names on disk, so they must not contain the platform path separator. If a non-empty snapshot name contains File.pathSeparator() (':' on Unix), execute() throws IOException before taking the snapshot.","triggerScenarios":"Running `nodetool snapshot -n my:snapshot` (or any name containing ':') on Linux/macOS.","commonSituations":"Users embedding timestamps like '2026-09-10T12:00:00' in snapshot names, since ISO timestamps contain colons.","solutions":["Choose a snapshot name without the path separator character (avoid ':').","Replace ':' in generated names, e.g. use dots or dashes for timestamps: snap-2026-09-10T12-00-00.","Validate the name in any scripts that generate snapshot names."],"exampleFix":"// before\nnodetool snapshot -n snap:2026-09-10\n// after\nnodetool snapshot -n snap-2026-09-10","handlingStrategy":"validation","validationCode":"if (snapshotName.contains(File.pathSeparator())) throw new IllegalArgumentException(\"Snapshot name cannot contain \" + File.pathSeparator());","typeGuard":null,"tryCatchPattern":"try { nodetoolSnapshot(name); } catch (IOException e) { if (e.getMessage().startsWith(\"Snapshot name cannot contain\")) sanitize(name); else throw e; }","preventionTips":["Sanitize snapshot names: replace ':' and other path separators","Avoid embedding raw ISO timestamps in snapshot names"],"tags":["nodetool","snapshot","filename"],"backgroundTag":"invalid-argument-value","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"}