{"record":{"id":"8228a4cbcba59336","repo":"apache/cassandra","slug":"udt-value-contained-too-many-fields-expected-s","errorCode":null,"errorMessage":"UDT value contained too many fields (expected %s, got %s)","messagePattern":"UDT value contained too many fields \\(expected (.+?), got (.+?)\\)","errorType":"validation","errorClass":"MarshalException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/db/marshal/UserType.java","lineNumber":687,"sourceCode":"        return serializer;\n    }\n\n    @Override\n    public List<ByteBuffer> filterSortAndValidateElements(List<ByteBuffer> buffers)\n    {\n        return filterSortAndValidateElements(buffers, ByteBufferUtil.UNSET_BYTE_BUFFER, ByteBufferAccessor.instance);\n    }\n\n    @Override\n    public List<byte[]> filterSortAndValidateElementsFromArrays(List<byte[]> buffers)\n    {\n        return filterSortAndValidateElements(buffers, ByteArrayUtil.UNSET_BYTE_ARRAY, ByteArrayAccessor.instance);\n    }\n\n    private <T> List<T> filterSortAndValidateElements(List<T> buffers, T unsetValue, ValueAccessor<T> valueAccessor)\n    {\n        if (buffers.size() > size())\n            throw new MarshalException(String.format(\"UDT value contained too many fields (expected %s, got %s)\", size(), buffers.size()));\n\n        for (int i = 0; i < buffers.size(); i++)\n        {\n            // Since a frozen UDT value is always written in its entirety Cassandra can't preserve a pre-existing\n            // value by 'not setting' the new value. Reject the query.\n            T buffer = buffers.get(i);\n            if (buffer == null)\n                continue;\n            if (!isMultiCell() && buffer == unsetValue)\n                throw new MarshalException(String.format(\"Invalid unset value for field '%s' of user defined type %s\", fieldNameAsString(i), getNameAsString()));\n            type(i).validate(buffer, valueAccessor);\n        }\n\n        return buffers;\n    }\n\n    @Override\n    public SchemaElementType elementType()","sourceCodeStart":669,"sourceCodeEnd":705,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/db/marshal/UserType.java#L669-L705","documentation":"A UDT value must supply at most one value per declared field. During UserType construction / filterSortAndValidateElements, if the buffer list is longer than the number of fields, this MarshalException reports expected vs actual counts.","triggerScenarios":"Building a UserType value ( UserType constructor or MultiElements.DelayedValue resolution) with more Term/bindings than the UDT declares; frozen UDT literals with duplicated fields.","commonSituations":"Driver or application code binding positional values to a UDT after the type gained fields (or with stale metadata showing fewer fields); INSERT USING JSON where the JSON has more entries than fields (that path usually errors earlier with unknown field); mixed cluster versions with divergent UDT definitions.","solutions":["Trim the value list to exactly size() fields before constructing","Refresh schema metadata so the client's UserType matches the server's definition","Fix the literal/query so each field appears at most once"],"exampleFix":"// before\nList<ByteBuffer> values = ...; // 5 entries for a 4-field UDT\nValue v = new UserType.Value(udt, values); // MarshalException\n// after\nif (values.size() > udt.size()) values = values.subList(0, udt.size());\nValue v = new UserType.Value(udt, values);","handlingStrategy":"validation","validationCode":"if (values.size() > udt.size()) throw new IllegalArgumentException(\"UDT expects at most \" + udt.size() + \" fields, got \" + values.size());","typeGuard":"boolean arityOk(List<?> vals, UserType udt) { return vals.size() <= udt.size(); }","tryCatchPattern":"try { v = new UserType.Value(udt, buffers); } catch (MarshalException e) { throw new BindingException(\"too many values for UDT\"); }","preventionTips":["Bind UDT fields by name, not position, when possible","Refresh cluster schema metadata after UDT evolution","Add arity assertions in serialization code"],"tags":["cassandra","udt","marshalling","validation"],"backgroundTag":"schema-validation-failed","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"}