{"record":{"id":"70af7ba293cdf777","repo":"apache/cassandra","slug":"internode-max-message-size-must-no-exceed-internod-70af7b","errorCode":null,"errorMessage":"internode_max_message_size must no exceed internode_application_send_queue_reserve_global_capacity","messagePattern":"internode_max_message_size must no exceed internode_application_send_queue_reserve_global_capacity","errorType":"validation","errorClass":"ConfigurationException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/config/DatabaseDescriptor.java","lineNumber":1216,"sourceCode":"                throw new ConfigurationException(\"legacy_ssl_storage_port_enabled is true (enabled) with internode encryption disabled (none). Enable encryption or disable the legacy ssl storage port.\");\n            }\n        }\n\n        if (conf.internode_max_message_size != null)\n        {\n            long maxMessageSize = conf.internode_max_message_size.toBytes();\n\n            if (maxMessageSize > conf.internode_application_receive_queue_reserve_endpoint_capacity.toBytes())\n                throw new ConfigurationException(\"internode_max_message_size must no exceed internode_application_receive_queue_reserve_endpoint_capacity\", false);\n\n            if (maxMessageSize > conf.internode_application_receive_queue_reserve_global_capacity.toBytes())\n                throw new ConfigurationException(\"internode_max_message_size must no exceed internode_application_receive_queue_reserve_global_capacity\", false);\n\n            if (maxMessageSize > conf.internode_application_send_queue_reserve_endpoint_capacity.toBytes())\n                throw new ConfigurationException(\"internode_max_message_size must no exceed internode_application_send_queue_reserve_endpoint_capacity\", false);\n\n            if (maxMessageSize > conf.internode_application_send_queue_reserve_global_capacity.toBytes())\n                throw new ConfigurationException(\"internode_max_message_size must no exceed internode_application_send_queue_reserve_global_capacity\", false);\n        }\n        else\n        {\n            long maxMessageSizeInBytes =\n            Math.min(conf.internode_application_receive_queue_reserve_endpoint_capacity.toBytes(),\n                     conf.internode_application_send_queue_reserve_endpoint_capacity.toBytes());\n\n            conf.internode_max_message_size = new DataStorageSpec.IntBytesBound(maxMessageSizeInBytes);\n        }\n\n        validateMaxConcurrentAutoUpgradeTasksConf(conf.max_concurrent_automatic_sstable_upgrades);\n\n        if (conf.default_keyspace_rf < conf.minimum_replication_factor_fail_threshold)\n        {\n            throw new ConfigurationException(String.format(\"default_keyspace_rf (%d) cannot be less than minimum_replication_factor_fail_threshold (%d)\",\n                                                           conf.default_keyspace_rf, conf.minimum_replication_factor_fail_threshold));\n        }\n","sourceCodeStart":1198,"sourceCodeEnd":1234,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/config/DatabaseDescriptor.java#L1198-L1234","documentation":"Cassandra's DatabaseDescriptor validates at startup that internode_max_message_size fits within the internode application send/receive queue reserve capacities. This throw fires when maxMessageSize exceeds internode_application_send_queue_reserve_global_capacity. It prevents a configuration where messages can never be buffered by the global send queue.","triggerScenarios":"Calling DatabaseDescriptor.applySimpleConfig (via toolInitialization or applyAll) with cassandra.yaml where internode_max_message_size > internode_application_send_queue_reserve_global_capacity in bytes.","commonSituations":"Operators raise internode_max_message_size for large batches/mutations but forget to also raise the send/receive queue reserve capacities; copying settings from a tuned cluster without matching queue capacities.","solutions":["Increase internode_application_send_queue_reserve_global_capacity in cassandra.yaml to at least internode_max_message_size","Lower internode_max_message_size to fit within the configured global send queue reserve capacity","Also check internode_application_send_queue_reserve_endpoint_capacity and internode_application_receive_queue_reserve_endpoint_capacity, which are validated similarly just above"],"exampleFix":"// before (cassandra.yaml)\ninternode_max_message_size: 64MiB\ninternode_application_send_queue_reserve_global_capacity: 32MiB\n// after\ninternode_max_message_size: 64MiB\ninternode_application_send_queue_reserve_global_capacity: 128MiB","handlingStrategy":"validation","validationCode":"if (conf.internode_max_message_size.toBytes() > conf.internode_application_send_queue_reserve_global_capacity.toBytes()) throw new IllegalArgumentException(\"internode_max_message_size exceeds global send queue reserve capacity\");","typeGuard":null,"tryCatchPattern":"try { DatabaseDescriptor.toolInitialization(); } catch (ConfigurationException e) { logger.error(\"Invalid internode message/queue config\", e); System.exit(1); }","preventionTips":["Keep internode_max_message_size below all four queue reserve capacities (send/receive, endpoint/global)","Validate cassandra.yaml with a config linter before rollout","When raising message size, raise queue reserves proportionally"],"tags":["cassandra","configuration","startup-validation"],"backgroundTag":"invalid-config-value","analyzedSha":"88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1","analyzedAt":"2026-09-10T07:29:22.284Z","contentChangedAt":"2026-09-10T07:29:22.284Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}