{"record":{"id":"0f13ce165d35274f","repo":"apache/cassandra","slug":"repair-session-max-tree-depth-has-been-deprecated","errorCode":null,"errorMessage":"repair_session_max_tree_depth has been deprecated and should be removed from cassandra.yaml. Use repair_session_space instead","messagePattern":"repair_session_max_tree_depth has been deprecated and should be removed from cassandra\\.yaml\\. Use repair_session_space instead","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"src/java/org/apache/cassandra/config/DatabaseDescriptor.java","lineNumber":764,"sourceCode":"        if (conf.file_cache_round_up == null)\n            conf.file_cache_round_up = conf.disk_optimization_strategy == Config.DiskOptimizationStrategy.spinning;\n\n        if (conf.memtable_offheap_space == null)\n            conf.memtable_offheap_space = new DataStorageSpec.IntMebibytesBound((int) (Runtime.getRuntime().maxMemory() / (4 * 1048576)));\n        // for the moment, we default to twice as much on-heap space as off-heap, as heap overhead is very large\n        if (conf.memtable_heap_space == null)\n            conf.memtable_heap_space = new DataStorageSpec.IntMebibytesBound((int) (Runtime.getRuntime().maxMemory() / (4 * 1048576)));\n        if (conf.memtable_heap_space.toMebibytes() == 0)\n            throw new ConfigurationException(\"memtable_heap_space must be positive, but was \" + conf.memtable_heap_space, false);\n        logger.info(\"Global memtable on-heap threshold is enabled at {}\", conf.memtable_heap_space);\n        if (conf.memtable_offheap_space.toMebibytes() == 0)\n            logger.info(\"Global memtable off-heap threshold is disabled, HeapAllocator will be used instead\");\n        else\n            logger.info(\"Global memtable off-heap threshold is enabled at {}\", conf.memtable_offheap_space);\n\n        if (conf.repair_session_max_tree_depth != null)\n        {\n            logger.warn(\"repair_session_max_tree_depth has been deprecated and should be removed from cassandra.yaml. Use repair_session_space instead\");\n            if (conf.repair_session_max_tree_depth < 10)\n                throw new ConfigurationException(\"repair_session_max_tree_depth should not be < 10, but was \" + conf.repair_session_max_tree_depth);\n            if (conf.repair_session_max_tree_depth > 20)\n                logger.warn(\"repair_session_max_tree_depth of \" + conf.repair_session_max_tree_depth + \" > 20 could lead to excessive memory usage\");\n        }\n        else\n        {\n            conf.repair_session_max_tree_depth = 20;\n        }\n\n        if (conf.repair_session_space == null)\n            conf.repair_session_space = new DataStorageSpec.IntMebibytesBound(Math.max(1, (int) (Runtime.getRuntime().maxMemory() / (16 * 1048576))));\n\n        if (conf.repair_session_space.toMebibytes() < 1)\n            throw new ConfigurationException(\"repair_session_space must be > 0, but was \" + conf.repair_session_space);\n        else if (conf.repair_session_space.toMebibytes() > (int) (Runtime.getRuntime().maxMemory() / (4 * 1048576)))\n            logger.warn(\"A repair_session_space of \" + conf.repair_session_space + \" mebibytes is likely to cause heap pressure\");\n","sourceCodeStart":746,"sourceCodeEnd":782,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/config/DatabaseDescriptor.java#L746-L782","documentation":"DatabaseDescriptor detects the deprecated cassandra.yaml property repair_session_max_tree_depth and logs a warning advising removal and use of repair_session_space instead. It still honors the old value, validating it is >= 10 (a ConfigurationException if lower) and warning if > 20. The property is being phased out in favor of memory-bounded repair sessions.","triggerScenarios":"cassandra.yaml contains repair_session_max_tree_depth; applySimpleConfig finds it non-null and warns, then either rejects values < 10 or warns for values > 20.","commonSituations":"Upgrading clusters that carried over older repair tuning options into a newer Cassandra version; operators copying legacy yaml files between environments or versions.","solutions":["Remove repair_session_max_tree_depth from cassandra.yaml","Tune repair memory usage with repair_session_space instead","If you must keep it temporarily, set a value between 10 and 20 to silence the other warnings"],"exampleFix":"# before\ncassandra.yaml:\n  repair_session_max_tree_depth: 24\n# after\ncassandra.yaml:\n  repair_session_space: 256MiB","handlingStrategy":"validation","validationCode":"if (config.repair_session_max_tree_depth != null) {\n    int d = config.repair_session_max_tree_depth;\n    if (d < 10) throw new IllegalArgumentException(\"repair_session_max_tree_depth must be >= 10, was \" + d);\n    if (d > 20) logger.warn(\"depth {} may cause excessive memory usage; prefer repair_session_space\", d);\n}","typeGuard":null,"tryCatchPattern":"try { DatabaseDescriptor.applySimpleConfig(conf); } catch (ConfigurationException e) { /* repair_session_max_tree_depth < 10 rejected here */ }","preventionTips":["Remove deprecated repair_session_max_tree_depth from cassandra.yaml during upgrades","Migrate tuning to repair_session_space","Validate yaml against the version's Config class when copying configs between clusters"],"tags":["cassandra","config","deprecation","repair","yaml"],"backgroundTag":"deprecated-api-usage","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"}