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
- Upgrade the Java driver to a version matching your Cassandra release (driver 3.x+ for C* 3.x/4.x)
- If the type string comes from your own code, verify it only wraps collections/UDTs in FrozenType
- 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
- Keep the java-driver version aligned with the Cassandra server version
- Test schema metadata loading after any cluster upgrade
- Avoid manually constructing FrozenType-wrapped type strings for non-collections
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
- Argument ' ' cannot be frozen; remove frozen<> modifier from
- Frozen UDT column does not support field deletions
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)