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

  1. 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)
  2. Fix the date parsing so failures surface instead of yielding null
  3. 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

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


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)