From 531ffec87fb98037be1cfb3a27809e74a1299a22 Mon Sep 17 00:00:00 2001 From: Dmitry Konstantinov Date: Sat, 22 Nov 2025 14:13:34 +0000 Subject: [PATCH] Calculate once and cache the result of ModificationStatement#requiresRead as a perf optimization Patch by Dmitry Konstantinov; reviewed by TBD for CASSANDRA-21040 --- .../cassandra/cql3/statements/ModificationStatement.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/java/org/apache/cassandra/cql3/statements/ModificationStatement.java b/src/java/org/apache/cassandra/cql3/statements/ModificationStatement.java index 4544926fb987..dc434960a192 100644 --- a/src/java/org/apache/cassandra/cql3/statements/ModificationStatement.java +++ b/src/java/org/apache/cassandra/cql3/statements/ModificationStatement.java @@ -158,6 +158,8 @@ public abstract class ModificationStatement implements CQLStatement.SingleKeyspa private final Operations operations; + private final boolean isReadRequired; + private final RegularAndStaticColumns updatedColumns; protected final Conditions conditions; @@ -262,6 +264,7 @@ else if (this.type.isDelete()) this.conditionColumns = conditionColumnsBuilder.build(); this.requiresRead = requiresReadBuilder.build(); this.functions = findAllFunctions(); + this.isReadRequired = operations.requiresRead(); } @Override @@ -536,7 +539,7 @@ public boolean requiresRead() // * Deleting list element by value // * Performing addition on a StringType (i.e. concatenation, only supported for CAS operations) // * Performing addition on a NumberType, again only supported for CAS operations. - return operations.requiresRead(); + return isReadRequired; } private Map readRequiredLists(Collection partitionKeys,