diff --git a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java index 9ee09db70709..b8af33cb4ff1 100644 --- a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java +++ b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java @@ -64,6 +64,7 @@ import com.google.common.util.concurrent.RateLimiter; import com.googlecode.concurrenttrees.common.Iterables; +import org.apache.cassandra.cql3.QueryOptions; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; @@ -267,6 +268,8 @@ public class DatabaseDescriptor public static volatile boolean allowUnlimitedConcurrentValidations = ALLOW_UNLIMITED_CONCURRENT_VALIDATIONS.getBoolean(); + private static volatile QueryOptions.DefaultReadThresholds defaultReadThresholds; + /** * The configuration for guardrails. */ @@ -5452,6 +5455,14 @@ public static boolean getInvalidLegacyProtocolMagicNoSpamEnabled() return conf.invalid_legacy_protocol_magic_no_spam_enabled; } + public static QueryOptions.DefaultReadThresholds getDefaultReadThresholds() + { + if (defaultReadThresholds == null) + defaultReadThresholds = new QueryOptions.DefaultReadThresholds(getCoordinatorReadSizeWarnThreshold(), + getCoordinatorReadSizeFailThreshold()); + return defaultReadThresholds; + } + public static boolean getReadThresholdsEnabled() { return conf.read_thresholds_enabled; @@ -5476,6 +5487,7 @@ public static void setCoordinatorReadSizeWarnThreshold(@Nullable DataStorageSpec { logger.info("updating coordinator_read_size_warn_threshold to {}", value); conf.coordinator_read_size_warn_threshold = value; + defaultReadThresholds = new QueryOptions.DefaultReadThresholds(value, getCoordinatorReadSizeFailThreshold()); } @Nullable @@ -5488,6 +5500,7 @@ public static void setCoordinatorReadSizeFailThreshold(@Nullable DataStorageSpec { logger.info("updating coordinator_read_size_fail_threshold to {}", value); conf.coordinator_read_size_fail_threshold = value; + defaultReadThresholds = new QueryOptions.DefaultReadThresholds(getCoordinatorReadSizeWarnThreshold(), value); } @Nullable diff --git a/src/java/org/apache/cassandra/cql3/QueryOptions.java b/src/java/org/apache/cassandra/cql3/QueryOptions.java index afc5bacc38c1..78910e5788f5 100644 --- a/src/java/org/apache/cassandra/cql3/QueryOptions.java +++ b/src/java/org/apache/cassandra/cql3/QueryOptions.java @@ -322,7 +322,7 @@ static ReadThresholds create() // if daemon initialization hasn't happened yet (very common in tests) then ignore if (!DatabaseDescriptor.isDaemonInitialized() || !DatabaseDescriptor.getReadThresholdsEnabled()) return DisabledReadThresholds.INSTANCE; - return new DefaultReadThresholds(DatabaseDescriptor.getCoordinatorReadSizeWarnThreshold(), DatabaseDescriptor.getCoordinatorReadSizeFailThreshold()); + return DatabaseDescriptor.getDefaultReadThresholds(); } } @@ -349,7 +349,7 @@ public long getCoordinatorReadSizeFailThresholdBytes() } } - private static class DefaultReadThresholds implements ReadThresholds + public static class DefaultReadThresholds implements ReadThresholds { private final long warnThresholdBytes; private final long abortThresholdBytes;