{"record":{"id":"475f41c6a5214798","repo":"openzipkin/zipkin","slug":"dateseparator-must-be-empty-or-a-single-character","errorCode":null,"errorMessage":"dateSeparator must be empty or a single character","messagePattern":"dateSeparator must be empty or a single character","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"zipkin-server/src/main/java/zipkin2/server/internal/elasticsearch/ZipkinElasticsearchStorageProperties.java","lineNumber":264,"sourceCode":"    this.indexShards = indexShards;\n  }\n\n  public Boolean isEnsureTemplates() {\n    return ensureTemplates;\n  }\n\n  public void setEnsureTemplates(Boolean ensureTemplates) {\n    this.ensureTemplates = ensureTemplates;\n  }\n\n  public String getDateSeparator() {\n    return dateSeparator;\n  }\n\n  public void setDateSeparator(String dateSeparator) {\n    String trimmed = dateSeparator.trim();\n    if (trimmed.length() > 1) {\n      throw new IllegalArgumentException(\"dateSeparator must be empty or a single character\");\n    }\n    this.dateSeparator = dateSeparator;\n  }\n\n  public Integer getIndexReplicas() {\n    return indexReplicas;\n  }\n\n  public void setIndexReplicas(Integer indexReplicas) {\n    this.indexReplicas = indexReplicas;\n  }\n\n  public String getUsername() {\n    return username;\n  }\n\n  public void setUsername(String username) {\n    this.username = emptyToNull(username);","sourceCodeStart":246,"sourceCodeEnd":282,"githubUrl":"https://github.com/openzipkin/zipkin/blob/878ce2a1fad54ca941d17fdcf2e1d924b148eb1f/zipkin-server/src/main/java/zipkin2/server/internal/elasticsearch/ZipkinElasticsearchStorageProperties.java#L246-L282","documentation":"ZipkinElasticsearchStorageProperties.setDateSeparator throws IllegalArgumentException ('dateSeparator must be empty or a single character') when the date separator used in daily ES index names is more than one character after trimming. Index names are built as zipkin-span-YYYY<sep>MM<sep>DD, so a multi-character separator would create invalid/unpredictable index patterns; only '' or one character (typically '-') is allowed.","triggerScenarios":"Setting zipkin.storage.elasticsearch.dateSeparator to values like '--', '..', or 'day' via properties, env var ZIPKIN_STORAGE_ELASTICSEARCH_DATESEPARATOR, or the StorageComponent builder.","commonSituations":"Copy-paste config with quotes or spaces ('- ' trims fine but '--' does not), migration from an old setup using a different separator format, or misunderstanding the property as a date format string.","solutions":["Use a single character, e.g. zipkin.storage.elasticsearch.dateSeparator=-","Use an empty value if indices should have no separator","Remove accidental extra characters or whitespace inside the separator value"],"exampleFix":"# before\nzipkin.storage.elasticsearch.dateSeparator=--\n\n# after\nzipkin.storage.elasticsearch.dateSeparator=-","handlingStrategy":"validation","validationCode":"String sep = props.getProperty(\"zipkin.storage.elasticsearch.dateSeparator\", \"-\");\nif (sep.trim().length() > 1) throw new IllegalArgumentException(\"dateSeparator must be '' or one char\");","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Treat dateSeparator as an enum-ish config: only '', '-', '_' allowed in your config templates","Add a config lint step that rejects multi-character separators"],"tags":["zipkin","elasticsearch","index-naming","configuration","validation"],"backgroundTag":null,"analyzedSha":"878ce2a1fad54ca941d17fdcf2e1d924b148eb1f","analyzedAt":"2026-08-14T15:17:09.895Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}