apache/cassandra · warning

Got o.a.c.db.marshal.FrozenType for something else than a…

Error message

Got o.a.c.db.marshal.FrozenType for something else than a collection, this driver version might be too old for your version of Cassandra

What it means

DataTypeClassNameParser warns that it encountered o.a.c.db.marshal.FrozenType wrapping something other than a collection while parsing a type class name. FrozenType is only meaningful for frozen collections (and UDTs); encountering it elsewhere signals the connected Java driver is too old to understand newer Cassandra types, and the frozen flag is effectively dropped/ignored for that type.

Solutions

  1. Upgrade the Java driver to a version matching your Cassandra release (driver 3.x+ for C* 3.x/4.x)
  2. If the type string comes from your own code, verify it only wraps collections/UDTs in FrozenType
  3. Work around by parsing the inner type directly if the metadata is known-good
Defensive patterns

Strategy: fallback

Validate before calling

// Pin driver version compatible with the server
const MIN_DRIVER = '3.11.0';
if (semver.lt(driverVersion, MIN_DRIVER)) throw new Error('driver too old for frozen/vector types');

Try / catch

try {
  cluster.getMetadata().getKeyspace(ks);
} catch (RuntimeException e) {
  if (String.valueOf(e).contains("FrozenType")) {
    logger.warn("driver metadata parse issue; upgrading driver");
  } else throw e;
}

Prevention

When it happens

Trigger: parseOne() parsing a class-name string like org.apache.cassandra.db.marshal.FrozenType(...) whose inner type is not a list/map/set (and not a UDT), reached while decoding system-table metadata or column types with an old protocol/driver.

Common situations: Old java-driver versions connecting to newer Cassandra clusters; deserializing type strings for frozen UDTs or new types (e.g. vector) the old parser path mishandles; reading metadata tables manually.

Understand the failure class

Background: "is not a compatible type" / "cannot merge" errors: when a value's type doesn't match what the library requires — this error's family across 65 libraries.

Related errors


AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10). Data as JSON: /api/errors/a845c056c2f11a76. Report an issue: GitHub.

Appendix: source

Thrown at src/java/org/apache/cassandra/cql3/functions/types/DataTypeClassNameParser.java:121

        if (next.startsWith(LIST_TYPE))
            return DataType.list(
            parseOne(parser.getTypeParameters().get(0), protocolVersion, codecRegistry), frozen);

        if (next.startsWith(SET_TYPE))
            return DataType.set(
            parseOne(parser.getTypeParameters().get(0), protocolVersion, codecRegistry), frozen);

        if (next.startsWith(MAP_TYPE))
        {
            List<String> params = parser.getTypeParameters();
            return DataType.map(
            parseOne(params.get(0), protocolVersion, codecRegistry),
            parseOne(params.get(1), protocolVersion, codecRegistry),
            frozen);
        }

        if (frozen)
            logger.warn(
            "Got o.a.c.db.marshal.FrozenType for something else than a collection, "
            + "this driver version might be too old for your version of Cassandra");

        if (isVectorType(next))
        {
            List<String> parameters = parser.getTypeParameters();
            DataType subtype = parseOne(parameters.get(0), protocolVersion, codecRegistry);
            int dimensions = Integer.parseInt(parameters.get(1));
            return DataType.vector(subtype, dimensions);
        }

        if (isUserType(next))
        {
            ++parser.idx; // skipping '('

            String keyspace = parser.readOne();
            parser.skipBlankAndComma();
            String typeName =

View on GitHub (pinned to 88fd0f6a0e)