apache/cassandra · error · IllegalArgumentException
The creation date not specified.
Error message
The creation date not specified.
What it means
Every imported dictionary must carry a creation timestamp; validate() rejects a null createdAt. The date is stored with the dictionary and surfaced in JMX/descriptor output, so it is a mandatory field of the TabularData representation.
Solutions
- Set createdAt to the dictionary's creation date before validation (e.g. Instant.now() for a newly imported dictionary, or the stored value for an existing one)
- Fix the date parsing so failures surface instead of yielding null
- Verify the CompositeData input includes CREATED_AT
Example fix
// before Date createdAt = null; // never parsed // after Date createdAt = Date.from(Instant.now());
Defensive patterns
Strategy: validation
Validate before calling
if (obj.createdAt == null) throw new IllegalArgumentException("createdAt must be set before creating CompressionDictionaryDataObject"); Type guard
boolean hasCreatedAt(CompressionDictionaryDataObject o) { return o.createdAt != null; } Try / catch
try { tabularData.fromDataObject(obj); } catch (IllegalArgumentException e) { if (e.getMessage().contains("creation date not specified")) { /* set createdAt (stored value or Instant.now()) and rebuild */ } else throw e; } Prevention
- Set createdAt in the same helper that builds the descriptor
- Make date parsing fail loudly so it cannot silently produce null
- For new imports use the current time; for re-imports carry the original stored date
When it happens
Trigger: Building a CompressionDictionaryDataObject with createdAt == null — e.g. the descriptor was constructed without parsing the creation date, or the source data lacked the CREATED_AT item.
Common situations: Import tooling that never fills the timestamp; date-parsing failures upstream that were swallowed and left null; JMX round-trips dropping the field.
Understand the failure class
Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.
Related errors
- Keyspace not specified.
- Provided dictionary byte array is null or empty.
- Provided dictionary id must be positive but it is
- Provided kind is null.
- Size has to be strictly positive number, it is
AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10).
Data as JSON: /api/errors/2295aba4e15bc7be.
Report an issue: GitHub.
Appendix: source
Thrown at src/java/org/apache/cassandra/db/compression/CompressionDictionaryDetailsTabularData.java:316
throw new IllegalArgumentException("Provided kind is null.");
CompressionDictionary.Kind dictionaryKind;
try
{
dictionaryKind = CompressionDictionary.Kind.valueOf(kind);
}
catch (IllegalArgumentException ex)
{
throw new IllegalArgumentException("There is no such dictionary kind like '" + kind + "'. Available kinds: " + Arrays.asList(CompressionDictionary.Kind.values()));
}
if (dictLength <= 0)
throw new IllegalArgumentException("Size has to be strictly positive number, it is '" + dictLength + "'.");
if (dict.length != dictLength)
throw new IllegalArgumentException("The length of the provided dictionary array (" + dict.length + ") is not equal to provided length value (" + dictLength + ").");
if (createdAt == null)
throw new IllegalArgumentException("The creation date not specified.");
int checksumOfDictionaryToImport = CompressionDictionary.calculateChecksum((byte) dictionaryKind.ordinal(), dictId, dict);
if (checksumOfDictionaryToImport != dictChecksum)
{
throw new IllegalArgumentException(format("Computed checksum of dictionary to import (%s) is different from checksum specified on input (%s).",
checksumOfDictionaryToImport,
dictChecksum));
}
}
}
}
View on GitHub (pinned to 88fd0f6a0e)