From fcaa1b3e39d31c4d956519499e695f1d84801598 Mon Sep 17 00:00:00 2001 From: Isaac Reath Date: Fri, 25 Jul 2025 12:31:12 -0400 Subject: [PATCH] Do not crash on first boot with data_disk_usage_max_disk_size set when data directory is not created yet patch by Isaac Reath; reviewed by Paulo Motta, Stefan Miklosovic for CASSANDRA-20787 --- CHANGES.txt | 1 + .../apache/cassandra/config/DatabaseDescriptor.java | 2 ++ .../apache/cassandra/distributed/impl/Instance.java | 11 ----------- .../test/guardrails/GuardrailDiskUsageTest.java | 1 + 4 files changed, 4 insertions(+), 11 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 8958d7d02d..60bfe4275c 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 4.1.10 + * Do not crash on first boot with data_disk_usage_max_disk_size set when data directory is not created yet (CASSANDRA-20787) * Rework / simplification of nodetool get/setguardrailsconfig commands (CASSANDRA-20778) * IntrusiveStack.accumulate is not accumulating correctly (CASSANDRA-20670) * Add nodetool get/setguardrailsconfig commands (CASSANDRA-19552) diff --git a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java index 55556a6308..f102c3f729 100644 --- a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java +++ b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java @@ -392,6 +392,8 @@ public class DatabaseDescriptor applySslContext(); + createAllDirectories(); + applyGuardrails(); applyStartupChecks(); diff --git a/test/distributed/org/apache/cassandra/distributed/impl/Instance.java b/test/distributed/org/apache/cassandra/distributed/impl/Instance.java index a0ccc9be71..0f96af78b2 100644 --- a/test/distributed/org/apache/cassandra/distributed/impl/Instance.java +++ b/test/distributed/org/apache/cassandra/distributed/impl/Instance.java @@ -606,7 +606,6 @@ public class Instance extends IsolatedExecutor implements IInvokableInstance System.setProperty("cassandra.consistent.simultaneousmoves.allow", "true"); } - mkdirs(); assert config.networkTopology().contains(config.broadcastAddress()) : String.format("Network topology %s doesn't contain the address %s", config.networkTopology(), config.broadcastAddress()); @@ -617,7 +616,6 @@ public class Instance extends IsolatedExecutor implements IInvokableInstance DatabaseDescriptor.daemonInitialization(); FileUtils.setFSErrorHandler(new DefaultFSErrorHandler()); - DatabaseDescriptor.createAllDirectories(); CassandraDaemon.getInstanceForTesting().migrateSystemDataIfNeeded(); CommitLog.instance.start(); @@ -814,15 +812,6 @@ public class Instance extends IsolatedExecutor implements IInvokableInstance ).run(); } - private void mkdirs() - { - new File(config.getString("saved_caches_directory")).tryCreateDirectories(); - new File(config.getString("hints_directory")).tryCreateDirectories(); - new File(config.getString("commitlog_directory")).tryCreateDirectories(); - for (String dir : (String[]) config.get("data_file_directories")) - new File(dir).tryCreateDirectories(); - } - private Config loadConfig(IInstanceConfig overrides) { Map params = overrides.getParams(); diff --git a/test/distributed/org/apache/cassandra/distributed/test/guardrails/GuardrailDiskUsageTest.java b/test/distributed/org/apache/cassandra/distributed/test/guardrails/GuardrailDiskUsageTest.java index b2bb8ea098..dd205bf87a 100644 --- a/test/distributed/org/apache/cassandra/distributed/test/guardrails/GuardrailDiskUsageTest.java +++ b/test/distributed/org/apache/cassandra/distributed/test/guardrails/GuardrailDiskUsageTest.java @@ -72,6 +72,7 @@ public class GuardrailDiskUsageTest extends GuardrailTester cluster = init(Cluster.build(2) .withInstanceInitializer(DiskStateInjection::install) .withConfig(c -> c.with(Feature.GOSSIP, Feature.NATIVE_PROTOCOL) + .set("data_disk_usage_max_disk_size", "10GiB") .set("data_disk_usage_percentage_warn_threshold", 98) .set("data_disk_usage_percentage_fail_threshold", 99) .set("authenticator", "PasswordAuthenticator"))