From 7f0865b5242019865f95296aa3eec07e065e382b Mon Sep 17 00:00:00 2001 From: Yongzao Date: Tue, 28 Jul 2026 23:23:48 +0800 Subject: [PATCH] Fix WAL throttle threshold fallback on hot reload (#18336) --- .../apache/iotdb/db/conf/IoTDBDescriptor.java | 7 +++++ .../apache/iotdb/db/conf/PropertiesTest.java | 28 +++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java index e3862bc0e9b99..2c5af4c088f8d 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java @@ -1798,6 +1798,11 @@ private void loadWALHotModifiedProps(TrimProperties properties) throws IOExcepti } long throttleDownThresholdInByte = Long.parseLong(getWalThrottleThreshold(properties)); + if (throttleDownThresholdInByte < 0) { + throttleDownThresholdInByte = + Long.parseLong( + ConfigurationFileUtils.getConfigurationDefaultValue(DEFAULT_WAL_THRESHOLD_NAME[1])); + } if (throttleDownThresholdInByte > 0) { conf.setThrottleThreshold(throttleDownThresholdInByte); } @@ -2401,6 +2406,8 @@ private void overlayEffectiveConfigurationValues() { Long.toString(commonDescriptor.getConfig().getSortBufferSize())); ConfigurationFileUtils.updateAppliedProperties( "mods_cache_size_limit_per_fi_in_bytes", Long.toString(conf.getModsCacheSizeLimitPerFI())); + ConfigurationFileUtils.updateAppliedProperties( + DEFAULT_WAL_THRESHOLD_NAME[1], Long.toString(conf.getThrottleThreshold())); } private void loadQuerySampleThroughput(TrimProperties properties) throws IOException { diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/conf/PropertiesTest.java b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/conf/PropertiesTest.java index f4daffbf303b9..d829bd595aa7c 100755 --- a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/conf/PropertiesTest.java +++ b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/conf/PropertiesTest.java @@ -19,6 +19,7 @@ package org.apache.iotdb.db.conf; +import org.apache.iotdb.commons.conf.ConfigurationFileUtils; import org.apache.iotdb.commons.conf.TrimProperties; import org.apache.iotdb.commons.utils.RegionMigrationFileRemoveRateLimiter; @@ -36,6 +37,33 @@ import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.noClasses; public class PropertiesTest { + @Test + public void testHotReloadNegativeWalThrottleThresholdUsesDefault() throws Exception { + final String key = "wal_throttle_threshold_in_byte"; + final long configuredThreshold = 1024 * 1024 * 1024L; + final long defaultThreshold = + Long.parseLong(ConfigurationFileUtils.getConfigurationDefaultValue(key)); + final IoTDBDescriptor descriptor = IoTDBDescriptor.getInstance(); + final long originalThreshold = descriptor.getConfig().getThrottleThreshold(); + + try { + final TrimProperties properties = new TrimProperties(); + properties.setProperty(key, Long.toString(configuredThreshold)); + descriptor.loadHotModifiedProps(properties); + Assert.assertEquals(configuredThreshold, descriptor.getConfig().getThrottleThreshold()); + + properties.setProperty(key, "-1"); + descriptor.loadHotModifiedProps(properties); + Assert.assertEquals(defaultThreshold, descriptor.getConfig().getThrottleThreshold()); + Assert.assertEquals( + Long.toString(defaultThreshold), ConfigurationFileUtils.getAppliedProperties().get(key)); + } finally { + final TrimProperties properties = new TrimProperties(); + properties.setProperty(key, Long.toString(originalThreshold)); + descriptor.loadHotModifiedProps(properties); + } + } + @Test public void testHotReloadRegionMigrationFileRemoveSpeedLimit() throws Exception { IoTDBDescriptor descriptor = IoTDBDescriptor.getInstance();