{"record":{"id":"5ffa048a4b311693","repo":"apache/cassandra","slug":"state-type-s-cannot-be-frozen-remove-frozen","errorCode":null,"errorMessage":"State type '%s' cannot be frozen; remove frozen<> modifier from '%s'","messagePattern":"State type '(.+?)' cannot be frozen; remove frozen<> modifier from '(.+?)'","errorType":"validation","errorClass":"InvalidRequestException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/cql3/statements/schema/CreateAggregateStatement.java","lineNumber":117,"sourceCode":"        return metadata.directory.commonSerializationVersion.isAtLeast(Version.V0);\n    }\n\n    @Override\n    public Keyspaces apply(ClusterMetadata metadata)\n    {\n        if (ifNotExists && orReplace)\n            throw ire(\"Cannot use both 'OR REPLACE' and 'IF NOT EXISTS' directives\");\n\n        if (!FunctionName.isNameValid(aggregateName))\n            throw ire(\"Aggregate name '%s' is invalid\", aggregateName);\n\n        rawArgumentTypes.stream()\n                        .filter(raw -> !raw.isImplicitlyFrozen() && raw.isFrozen())\n                        .findFirst()\n                        .ifPresent(t -> { throw ire(\"Argument '%s' cannot be frozen; remove frozen<> modifier from '%s'\", t, t); });\n\n        if (!rawStateType.isImplicitlyFrozen() && rawStateType.isFrozen())\n            throw ire(\"State type '%s' cannot be frozen; remove frozen<> modifier from '%s'\", rawStateType, rawStateType);\n\n        Keyspaces schema = metadata.schema.getKeyspaces();\n        KeyspaceMetadata keyspace = schema.getNullable(keyspaceName);\n        if (null == keyspace)\n            throw ire(\"Keyspace '%s' doesn't exist\", keyspaceName);\n\n        /*\n         * Resolve the state function\n         */\n\n        List<AbstractType<?>> argumentTypes =\n            rawArgumentTypes.stream()\n                            .map(t -> t.prepare(keyspaceName, keyspace.types).getType().udfType())\n                            .collect(toList());\n        AbstractType<?> stateType = rawStateType.prepare(keyspaceName, keyspace.types).getType().udfType();\n        List<AbstractType<?>> stateFunctionArguments = Lists.newArrayList(concat(singleton(stateType), argumentTypes));\n\n        UserFunction stateFunction =","sourceCodeStart":99,"sourceCodeEnd":135,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/cql3/statements/schema/CreateAggregateStatement.java#L99-L135","documentation":"CREATE AGGREGATE guard rejecting a frozen state type. The state function's accumulator type must be non-frozen, so a state type declared with frozen<> is rejected since aggregates mutate their state in place.","triggerScenarios":"rawStateType.isFrozen() && !rawStateType.isImplicitlyFrozen() in CreateAggregateStatement.apply, i.e. STYPE written as frozen<...>.","commonSituations":"Declaring STYPE frozen<map<text,int>> because table schemas required frozen maps; generated DDL carrying frozen modifiers over from column types.","solutions":["Remove frozen<> from STYPE in the CREATE AGGREGATE statement","Declare STYPE as the unfrozen type, e.g. STYPE map<text,int>","Re-check any DDL generator emitting frozen<> for function/aggregate types"],"exampleFix":"// before\nCREATE AGGREGATE ks.sum(map<text,int>) STYPE frozen<map<text,int>> ...\n// after\nCREATE AGGREGATE ks.sum(map<text,int>) STYPE map<text,int> ...","handlingStrategy":"validation","validationCode":"if (stateType.contains(\"frozen<\") && !isImplicitlyFrozen(stateType))\n    throw new IllegalArgumentException(\"Remove frozen<> from STYPE: \" + stateType);","typeGuard":null,"tryCatchPattern":"try { session.execute(ddl); }\ncatch (InvalidRequestException e) { if (e.getMessage().contains(\"State type\") && e.getMessage().contains(\"cannot be frozen\")) retryWithUnfrozenStype(ddl); else throw e; }","preventionTips":["Write STYPE without frozen<> even for collections/UDTs","Strip frozen<> programmatically when generating aggregate DDL from table schemas","Test aggregate creation for collection-typed state"],"tags":["cql","aggregate","stype","frozen"],"backgroundTag":"invalid-argument-value","analyzedSha":"88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1","analyzedAt":"2026-09-10T07:29:22.284Z","contentChangedAt":"2026-09-10T07:29:22.284Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}