You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by bd...@apache.org on 2026/02/17 18:23:48 UTC

(cassandra) branch cep-45-mutation-tracking updated (8573d3a4f7 -> 1e88dccf91)

This is an automated email from the ASF dual-hosted git repository.

bdeggleston pushed a change to branch cep-45-mutation-tracking
in repository https://gitbox.apache.org/repos/asf/cassandra.git


    from 8573d3a4f7 Fix Journal shutdown
     new 4a85e448fc ninja - fix tracked bootstrap validation
     new 600640235e ninja: fix counters test
     new f4d9b30a4e ninja: fix transient keyspace setup in CMSTestBase tests
     new 1e88dccf91 ninja: ignore MutationTrackingRangeReadTest until CASSANDRA-20954 is committed

The 4 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../org/apache/cassandra/db/AbstractMutationVerbHandler.java |  2 +-
 src/java/org/apache/cassandra/db/ColumnFamilyStore.java      | 10 ++++++++++
 .../org/apache/cassandra/db/CounterMutationVerbHandler.java  | 12 ++++++++++++
 src/java/org/apache/cassandra/db/lifecycle/Tracker.java      |  8 ++++++++
 .../cassandra/db/streaming/CassandraStreamReceiver.java      |  9 ++++++++-
 .../test/cql3/MultiNodeTableWalkWithWitnessesTest.java       | 10 ++++++++++
 .../test/tracking/MutationTrackingRangeReadTest.java         |  2 ++
 .../distributed/test/tracking/MutationTrackingUtils.java     |  3 +--
 .../apache/cassandra/harry/model/TokenPlacementModel.java    |  9 +++++++--
 9 files changed, 59 insertions(+), 6 deletions(-)


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org


(cassandra) 02/04: ninja: fix counters test

Posted by bd...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

bdeggleston pushed a commit to branch cep-45-mutation-tracking
in repository https://gitbox.apache.org/repos/asf/cassandra.git

commit 600640235ea73b6f8225301d27bd2397e94ae851
Author: Blake Eggleston <bl...@ultrablake.com>
AuthorDate: Tue Feb 10 14:48:05 2026 -0800

    ninja: fix counters test
---
 .../org/apache/cassandra/db/AbstractMutationVerbHandler.java |  2 +-
 .../org/apache/cassandra/db/CounterMutationVerbHandler.java  | 12 ++++++++++++
 2 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/src/java/org/apache/cassandra/db/AbstractMutationVerbHandler.java b/src/java/org/apache/cassandra/db/AbstractMutationVerbHandler.java
index e83d70bbc1..cb7fe9d8c3 100644
--- a/src/java/org/apache/cassandra/db/AbstractMutationVerbHandler.java
+++ b/src/java/org/apache/cassandra/db/AbstractMutationVerbHandler.java
@@ -200,7 +200,7 @@ public abstract class AbstractMutationVerbHandler<T extends IMutation> implement
      * Confirm that the presence/absence of a mutation id matches our expectations for the given keyspace/table/token. If
      * it doesn't, then we're not on the same epoch as the coordinator, or there's a bug.
      */
-    private ClusterMetadata checkReplicationMigration(ClusterMetadata metadata, Message<T> message, InetAddressAndPort respondTo)
+    protected ClusterMetadata checkReplicationMigration(ClusterMetadata metadata, Message<T> message, InetAddressAndPort respondTo)
     {
         IMutation mutation = message.payload;
         MutationRouting expected = mutation.id().isNone() ? MutationRouting.UNTRACKED : MutationRouting.TRACKED;
diff --git a/src/java/org/apache/cassandra/db/CounterMutationVerbHandler.java b/src/java/org/apache/cassandra/db/CounterMutationVerbHandler.java
index 6d12551c6b..c24262fa9c 100644
--- a/src/java/org/apache/cassandra/db/CounterMutationVerbHandler.java
+++ b/src/java/org/apache/cassandra/db/CounterMutationVerbHandler.java
@@ -26,6 +26,7 @@ import org.apache.cassandra.net.Message;
 import org.apache.cassandra.net.MessagingService;
 import org.apache.cassandra.replication.ForwardedWrite;
 import org.apache.cassandra.service.StorageProxy;
+import org.apache.cassandra.tcm.ClusterMetadata;
 import org.apache.cassandra.transport.Dispatcher;
 
 public class CounterMutationVerbHandler extends AbstractMutationVerbHandler<CounterMutation>
@@ -34,6 +35,17 @@ public class CounterMutationVerbHandler extends AbstractMutationVerbHandler<Coun
 
     private static final Logger logger = LoggerFactory.getLogger(CounterMutationVerbHandler.class);
 
+
+    /**
+     * CounterMutationVerbHandler only forwards counter writes, so we don't expect
+     * it to have a mutation id, or assert it does or doesn't
+     */
+    @Override
+    protected ClusterMetadata checkReplicationMigration(ClusterMetadata metadata, Message<CounterMutation> message, InetAddressAndPort respondTo)
+    {
+        return metadata;
+    }
+
     protected void applyMutation(final Message<CounterMutation> message, InetAddressAndPort respondToAddress)
     {
         final CounterMutation cm = message.payload;


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org


(cassandra) 03/04: ninja: fix transient keyspace setup in CMSTestBase tests

Posted by bd...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

bdeggleston pushed a commit to branch cep-45-mutation-tracking
in repository https://gitbox.apache.org/repos/asf/cassandra.git

commit f4d9b30a4ee458cbb2c747c421a66e3ff5b1d674
Author: Blake Eggleston <bl...@ultrablake.com>
AuthorDate: Tue Feb 10 21:53:50 2026 -0800

    ninja: fix transient keyspace setup in CMSTestBase tests
---
 .../test/cql3/MultiNodeTableWalkWithWitnessesTest.java         | 10 ++++++++++
 .../org/apache/cassandra/harry/model/TokenPlacementModel.java  |  9 +++++++--
 2 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/test/distributed/org/apache/cassandra/distributed/test/cql3/MultiNodeTableWalkWithWitnessesTest.java b/test/distributed/org/apache/cassandra/distributed/test/cql3/MultiNodeTableWalkWithWitnessesTest.java
index f0446cb537..84d0ea5d84 100644
--- a/test/distributed/org/apache/cassandra/distributed/test/cql3/MultiNodeTableWalkWithWitnessesTest.java
+++ b/test/distributed/org/apache/cassandra/distributed/test/cql3/MultiNodeTableWalkWithWitnessesTest.java
@@ -18,7 +18,10 @@
 
 package org.apache.cassandra.distributed.test.cql3;
 
+import java.util.List;
+
 import accord.utils.RandomSource;
+import org.apache.cassandra.cql3.ast.CreateIndexDDL;
 import org.apache.cassandra.distributed.Cluster;
 import org.apache.cassandra.distributed.api.IInstanceConfig;
 import org.apache.cassandra.schema.TableMetadata;
@@ -34,6 +37,13 @@ public class MultiNodeTableWalkWithWitnessesTest extends MultiNodeTableWalkWithM
         c.set("transient_replication_enabled", "true");
     }
 
+    @Override
+    protected List<CreateIndexDDL.Indexer> supportedIndexers()
+    {
+        // TODO (expected): Implement supported indexers for witnesses
+        return List.of();
+    }
+
     protected class MultiNodeState extends State
     {
         public MultiNodeState(RandomSource rs, Cluster cluster)
diff --git a/test/harry/main/org/apache/cassandra/harry/model/TokenPlacementModel.java b/test/harry/main/org/apache/cassandra/harry/model/TokenPlacementModel.java
index c9dcbcb137..a92101de26 100644
--- a/test/harry/main/org/apache/cassandra/harry/model/TokenPlacementModel.java
+++ b/test/harry/main/org/apache/cassandra/harry/model/TokenPlacementModel.java
@@ -31,6 +31,7 @@ import org.apache.cassandra.locator.InetAddressAndPort;
 import org.apache.cassandra.locator.SimpleStrategy;
 import org.apache.cassandra.schema.KeyspaceParams;
 import org.apache.cassandra.schema.ReplicationParams;
+import org.apache.cassandra.schema.ReplicationType;
 import org.apache.cassandra.tcm.ClusterMetadata;
 import org.apache.cassandra.tcm.membership.Location;
 import org.apache.cassandra.tcm.membership.NodeId;
@@ -387,14 +388,17 @@ public class TokenPlacementModel
         {
             Object[] args = new Object[replication.size() * 2];
             int i = 0;
+            boolean hasTransient = false;
             for (Map.Entry<String, DCReplicas> e : replication.entrySet())
             {
                 args[i * 2] = e.getKey();
                 args[i * 2 + 1] = e.getValue().toString();
+                if (e.getValue().transientCount > 0)
+                    hasTransient = true;
                 i++;
             }
 
-            return KeyspaceParams.nts(args);
+            return hasTransient ? KeyspaceParams.ntsTracked(args) : KeyspaceParams.nts(args);
         }
 
         private static Function<Lookup, Map<String, DCReplicas>> mapFunction(int dcs, int nodesPerDc, int transientsPerDc)
@@ -603,7 +607,8 @@ public class TokenPlacementModel
             Map<String, String> options = new HashMap<>();
             options.put(ReplicationParams.CLASS, SimpleStrategy.class.getName());
             options.put(SimpleStrategy.REPLICATION_FACTOR, dcReplicas().toString());
-            return KeyspaceParams.create(true, options);
+            ReplicationType replicationType = dcReplicas().transientCount > 0 ? ReplicationType.tracked : ReplicationType.untracked;
+            return KeyspaceParams.create(true, options, replicationType);
         }
 
         public ReplicatedRanges replicate(Range[] ranges, List<Node> nodes)


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org


(cassandra) 04/04: ninja: ignore MutationTrackingRangeReadTest until CASSANDRA-20954 is committed

Posted by bd...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

bdeggleston pushed a commit to branch cep-45-mutation-tracking
in repository https://gitbox.apache.org/repos/asf/cassandra.git

commit 1e88dccf91e3c915e50651353ddec3042d54d66f
Author: Blake Eggleston <bl...@ultrablake.com>
AuthorDate: Wed Feb 11 15:09:27 2026 -0800

    ninja: ignore MutationTrackingRangeReadTest until CASSANDRA-20954 is committed
---
 .../distributed/test/tracking/MutationTrackingRangeReadTest.java       | 2 ++
 .../cassandra/distributed/test/tracking/MutationTrackingUtils.java     | 3 +--
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/test/distributed/org/apache/cassandra/distributed/test/tracking/MutationTrackingRangeReadTest.java b/test/distributed/org/apache/cassandra/distributed/test/tracking/MutationTrackingRangeReadTest.java
index 43b8804f7c..194637253d 100644
--- a/test/distributed/org/apache/cassandra/distributed/test/tracking/MutationTrackingRangeReadTest.java
+++ b/test/distributed/org/apache/cassandra/distributed/test/tracking/MutationTrackingRangeReadTest.java
@@ -23,6 +23,7 @@ import java.util.Iterator;
 
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
+import org.junit.Ignore;
 import org.junit.Test;
 
 import org.apache.cassandra.distributed.Cluster;
@@ -33,6 +34,7 @@ import org.apache.cassandra.distributed.test.TestBaseImpl;
 import static org.apache.cassandra.distributed.shared.AssertUtils.assertRows;
 import static org.apache.cassandra.distributed.shared.AssertUtils.row;
 
+@Ignore(MutationTrackingUtils.IgnoreReasons.NO_PER_PARTITION_RANGE_READ_LIMITS)
 public class MutationTrackingRangeReadTest extends TestBaseImpl
 {
     private static final int REPLICAS = 3;
diff --git a/test/distributed/org/apache/cassandra/distributed/test/tracking/MutationTrackingUtils.java b/test/distributed/org/apache/cassandra/distributed/test/tracking/MutationTrackingUtils.java
index 48fc9c259f..2cf832fb08 100644
--- a/test/distributed/org/apache/cassandra/distributed/test/tracking/MutationTrackingUtils.java
+++ b/test/distributed/org/apache/cassandra/distributed/test/tracking/MutationTrackingUtils.java
@@ -59,8 +59,7 @@ public class MutationTrackingUtils
     public static class IgnoreReasons
     {
         public static final String NO_RANGE_MOVEMENTS = "NO_RANGE_MOVEMENTS";
-
-
+        public static final String NO_PER_PARTITION_RANGE_READ_LIMITS = "NO_PER_PARTITION_RANGE_READ_LIMITS";
     }
 
     public static byte[] encodeId(MutationId id)


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org


(cassandra) 01/04: ninja - fix tracked bootstrap validation

Posted by bd...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

bdeggleston pushed a commit to branch cep-45-mutation-tracking
in repository https://gitbox.apache.org/repos/asf/cassandra.git

commit 4a85e448fc6a375e4985bdf32ac2b2cddd4ceb35
Author: Blake Eggleston <bl...@ultrablake.com>
AuthorDate: Mon Feb 9 15:51:46 2026 -0800

    ninja - fix tracked bootstrap validation
---
 src/java/org/apache/cassandra/db/ColumnFamilyStore.java        | 10 ++++++++++
 src/java/org/apache/cassandra/db/lifecycle/Tracker.java        |  8 ++++++++
 .../apache/cassandra/db/streaming/CassandraStreamReceiver.java |  9 ++++++++-
 3 files changed, 26 insertions(+), 1 deletion(-)

diff --git a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
index f289e881b3..62518be2ab 100644
--- a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
+++ b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
@@ -1703,6 +1703,16 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean, Memtable.Owner
         CompactionManager.instance.submitBackground(this);
     }
 
+    /**
+     * addSStables variant that allows adding sstables for tracked tables without requiring tracked transfers during bootstrap
+     */
+    public void addSSTableForBootstrap(Collection<SSTableReader> sstables)
+    {
+        data.addSSTablesForBootstrap(sstables);
+        logger.debug("Adding sstables {}", sstables);
+        CompactionManager.instance.submitBackground(this);
+    }
+
     /**
      * Calculate expected file size of SSTable after compaction.
      *
diff --git a/src/java/org/apache/cassandra/db/lifecycle/Tracker.java b/src/java/org/apache/cassandra/db/lifecycle/Tracker.java
index ca039361e0..a5eedea941 100644
--- a/src/java/org/apache/cassandra/db/lifecycle/Tracker.java
+++ b/src/java/org/apache/cassandra/db/lifecycle/Tracker.java
@@ -289,6 +289,14 @@ public class Tracker
         addSSTablesInternal(sstables, false, true, true);
     }
 
+    /**
+     * addSStables variant for bootstrap. Doesn't validate tracked/untracked or absence of logOffsets data
+     */
+    public void addSSTablesForBootstrap(Collection<SSTableReader> sstables)
+    {
+        addSSTablesInternal(sstables, false, true, true);
+    }
+
     private void addSSTablesInternal(Collection<SSTableReader> sstables,
                                      boolean isInitialSSTables,
                                      boolean maybeIncrementallyBackup,
diff --git a/src/java/org/apache/cassandra/db/streaming/CassandraStreamReceiver.java b/src/java/org/apache/cassandra/db/streaming/CassandraStreamReceiver.java
index 62f53d7363..111276b20a 100644
--- a/src/java/org/apache/cassandra/db/streaming/CassandraStreamReceiver.java
+++ b/src/java/org/apache/cassandra/db/streaming/CassandraStreamReceiver.java
@@ -268,7 +268,14 @@ public class CassandraStreamReceiver implements StreamReceiver
                 if (cfs.metadata().replicationType().isTracked() && session.streamOperation().isTrackable())
                     return;
 
-                cfs.addSSTables(readers);
+                if (session.streamOperation() == StreamOperation.BOOTSTRAP)
+                {
+                    cfs.addSSTableForBootstrap(readers);
+                }
+                else
+                {
+                    cfs.addSSTables(readers);
+                }
 
                 Consumer<Integer> onRowCacheInvalidation = invalidatedKeys -> {
                     logger.debug("[Stream #{}] Invalidated {} row cache entries on table {}.{} after stream " +


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org