cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Paulo Motta (JIRA)" <>
Subject [jira] [Created] (CASSANDRA-11529) Checking if an unlogged batch is local is inefficient
Date Thu, 07 Apr 2016 21:34:25 GMT
Paulo Motta created CASSANDRA-11529:

             Summary: Checking if an unlogged batch is local is inefficient
                 Key: CASSANDRA-11529
             Project: Cassandra
          Issue Type: Bug
          Components: Coordination
            Reporter: Paulo Motta

Based on CASSANDRA-11363 report I noticed that on CASSANDRA-9303 we introduced the following
check to avoid printing a {{WARN}} in case an unlogged batch statement is local:

             for (IMutation im : mutations)
                 for (ColumnFamily cf : im.getColumnFamilies())
                     ksCfPairs.add(String.format("%s.%s", cf.metadata().ksName, cf.metadata().cfName));
+                if (localMutationsOnly)
+                    localMutationsOnly &= isMutationLocal(localTokensByKs, im);
+            // CASSANDRA-9303: If we only have local mutations we do not warn
+            if (localMutationsOnly)
+                return;
             NoSpamLogger.log(logger, NoSpamLogger.Level.WARN, 1, TimeUnit.MINUTES, unloggedBatchWarning,
                              keySet.size(), keySet.size() == 1 ? "" : "s",
                              ksCfPairs.size() == 1 ? "" : "s", ksCfPairs);

The {{isMutationLocal}} check uses {{StorageService.instance.getLocalRanges(mutation.getKeyspaceName())}},
which underneaths uses {{AbstractReplication.getAddressRanges}} to calculate local ranges.

Recalculating this at every unlogged batch can be pretty inefficient, so we should at the
very least cache it every time the ring changes.

This message was sent by Atlassian JIRA

View raw message