{"record":{"id":"4cc97fa1f1d9c328","repo":"apache/cassandra","slug":"event-eventtype-name-not-valid-for-proto","errorCode":null,"errorMessage":"Event \" + eventType.name() + \" not valid for protocol version \" + version","messagePattern":"Event \" \\+ eventType\\.name\\(\\) \\+ \" not valid for protocol version \" \\+ version","errorType":"exception","errorClass":"org.apache.cassandra.transport.ProtocolException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/transport/Event.java","lineNumber":60,"sourceCode":"\n        Type(ProtocolVersion minimumVersion)\n        {\n            this.minimumVersion = minimumVersion;\n        }\n    }\n\n    public final Type type;\n\n    private Event(Type type)\n    {\n        this.type = type;\n    }\n\n    public static Event deserialize(ByteBuf cb, ProtocolVersion version)\n    {\n        Type eventType = CBUtil.readEnumValue(Type.class, cb);\n        if (eventType.minimumVersion.isGreaterThan(version))\n            throw new ProtocolException(\"Event \" + eventType.name() + \" not valid for protocol version \" + version);\n        switch (eventType)\n        {\n            case TOPOLOGY_CHANGE:\n                return TopologyChange.deserializeEvent(cb, version);\n            case STATUS_CHANGE:\n                return StatusChange.deserializeEvent(cb, version);\n            case SCHEMA_CHANGE:\n                return SchemaChange.deserializeEvent(cb, version);\n        }\n        throw new AssertionError();\n    }\n\n    public void serialize(ByteBuf dest, ProtocolVersion version)\n    {\n        if (type.minimumVersion.isGreaterThan(version))\n            throw new ProtocolException(\"Event \" + type.name() + \" not valid for protocol version \" + version);\n        CBUtil.writeEnumValue(type, dest);\n        serializeEvent(dest, version);","sourceCodeStart":42,"sourceCodeEnd":78,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/transport/Event.java#L42-L78","documentation":"Some event types (e.g. SCHEMA_CHANGE vs. TOPOLOGY/STATUS changes) have minimum supported protocol versions. If a client registered for events on a protocol version older than the event's minimum, Event.deserialize throws this ProtocolException.","triggerScenarios":"A client on an old protocol version receives/submits an event frame whose Type.minimumVersion is greater than the negotiated version — typically via a REGISTER message or server push with mismatched version.","commonSituations":"Clients pinned to legacy protocol versions (v2/v3) that receive newer event types; proxies downgrading protocol versions; drivers built for newer servers connecting to older clusters.","solutions":["Raise the client's protocol version to at least the event type's minimumVersion.","Filter out event types unsupported by the negotiated version before REGISTERing.","Upgrade the cluster or driver so both sides support the same protocol version set.","Ensure no proxy rewrites frames across protocol versions."],"exampleFix":"// before: v3 connection receiving SCHEMA_CHANGE targeted events incorrectly\ncluster.setProtocolVersion(ProtocolVersion.V3);\n// after: use v4+ where the event is valid\ncluster.setProtocolVersion(ProtocolVersion.V4);","handlingStrategy":"validation","validationCode":"ProtocolVersion v = cluster.getConfiguration().getProtocolVersion();\nif (Event.Type.SCHEMA_CHANGE.minimumVersion.isGreaterThan(v))\n    throw new IllegalStateException(\"SCHEMA_CHANGE events need protocol >= \" + Event.Type.SCHEMA_CHANGE.minimumVersion);","typeGuard":"boolean eventSupportedOn(Event.Type t, ProtocolVersion v) { return !t.minimumVersion.isGreaterThan(v); }","tryCatchPattern":"try { session.register(listener); } catch (ProtocolException e) {\n    // bump protocol version or skip unsupported event types\n}","preventionTips":["Check each event type's minimumVersion before registering listeners.","Avoid pinning legacy protocol versions when consuming newer event types.","Keep cluster and driver versions in sync.","Document required protocol versions for event-driven features."],"tags":["protocol","events","version-compatibility","cql-native-protocol"],"backgroundTag":"invalid-enum-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"}