{"record":{"id":"a298771bab680306","repo":"apache/cassandra","slug":"unknown-verb-id-id","errorCode":null,"errorMessage":"Unknown verb id + id","messagePattern":"Unknown verb id \\+ id","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/net/Verb.java","lineNumber":656,"sourceCode":"                    throw new AssertionError(\"Unsupported Verb Kind: \" + v.kind + \" for verb \" + v);\n            }\n        }\n\n        idToVerbMap = idMap;\n        idToCustomVerbMap = customIdMap;\n    }\n\n    public static Verb fromId(int id)\n    {\n        Verb[] verbs = idToVerbMap;\n        if (id >= minCustomId)\n        {\n            id = idForCustomVerb(id);\n            verbs = idToCustomVerbMap;\n        }\n        Verb verb = id >= 0 && id < verbs.length ? verbs[id] : null;\n        if (verb == null)\n            throw new IllegalArgumentException(\"Unknown verb id \" + id);\n        return verb;\n    }\n\n    /**\n     * calculate an id for a custom verb\n     */\n    private static int idForCustomVerb(int id)\n    {\n        return CUSTOM_VERB_START - id;\n    }\n\n    private static <A, B> IVersionedAsymmetricSerializer<A, B> accordEmbedded(AsymmetricVersionedSerializer<A, B, Version> delegate)\n    {\n        return AccordSerializers.embedded(Version.CLUSTER_SAFE_VERSION, delegate);\n    }\n\n    private static <A, B> IVersionedAsymmetricSerializer<A, B> accordEmbedded(AsymmetricUnversionedSerializer<A, B> delegate)\n    {","sourceCodeStart":638,"sourceCodeEnd":674,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/net/Verb.java#L638-L674","documentation":"Verb.fromId(id) decodes a wire message's verb id via the idToVerbMap (or the custom map). If the id is negative, out of range, or unregistered on this node's version, there is no matching Verb and IllegalArgumentException is thrown, failing message deserialization.","triggerScenarios":"Receiving an internode message whose verb id byte does not exist in the local Verb table — e.g. a message sent by a newer/older node with different verb ids, or corrupted frame data.","commonSituations":"Rolling upgrades/downgrades where verb sets differ; mixed-version clusters with incompatible patches; a node that failed to register a custom verb the peer sends.","solutions":["Align cluster versions so all nodes use the same Cassandra build/verb registry before restarting messaging.","Verify no custom verb patches are applied to only some nodes; apply consistently and restart the sender.","Check for network corruption if ids are consistently garbage (rare); inspect logs for the offending id value."],"exampleFix":"// before\nVerb verb = Verb.fromId(buffer.readInt()); // may throw on unknown id\n// after\nif (id >= 0 && id < Verb.idToVerbMapSize()) { Verb verb = Verb.fromId(id); } else { log.warn(\"dropping unknown verb id\", id); }","handlingStrategy":"try-catch","validationCode":"boolean isKnownVerb(int id) { return id >= 0 && id < Verb.idMapLength(); }\n","typeGuard":null,"tryCatchPattern":"try { Verb v = Verb.fromId(id); } catch (IllegalArgumentException e) { logger.warn(\"Unknown verb id {} from {} - dropping message (version mismatch?)\", id, from); metrics.unknownVerb.mark(); }","preventionTips":["Upgrade the whole cluster (or the sender first) when verb sets change","Never roll custom messaging patches to a subset of nodes","Monitor logs for 'Unknown verb id' as an early sign of version skew"],"tags":["messaging","wire-protocol","version-skew"],"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"}