cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Paulo Motta (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (CASSANDRA-11529) Checking if an unlogged batch is local is inefficient
Date Fri, 08 Apr 2016 16:03:25 GMT

    [ https://issues.apache.org/jira/browse/CASSANDRA-11529?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15232392#comment-15232392
] 

Paulo Motta commented on CASSANDRA-11529:
-----------------------------------------

LGTM, given that alternative was already proposed and discussed on CASSANDRA-9282. Thanks!

Since we now have quite a few warning thresholds, I think we should group them together on
cassandra.yaml to make finding them easier, so I updated the trunk patch moving the warning
thresholds to its own section (the previous versions remain unchanged):

||trunk||
|[branch|https://github.com/apache/cassandra/compare/trunk...pauloricardomg:trunk-11529]|
|[testall|http://cassci.datastax.com/view/Dev/view/paulomotta/job/pauloricardomg-trunk-11529-testall/lastCompletedBuild/testReport/]|
|[dtest|http://cassci.datastax.com/view/Dev/view/paulomotta/job/pauloricardomg-trunk-11529-dtest/lastCompletedBuild/testReport/]|

(please mark as ready to commit if tests look good and you agree with above change)

> Checking if an unlogged batch is local is inefficient
> -----------------------------------------------------
>
>                 Key: CASSANDRA-11529
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-11529
>             Project: Cassandra
>          Issue Type: Bug
>          Components: Coordination
>            Reporter: Paulo Motta
>            Assignee: Stefania
>            Priority: Critical
>             Fix For: 2.1.x, 2.2.x, 3.0.x, 3.x
>
>
> 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:
> {noformat}
>              for (IMutation im : mutations)
>              {
>                  keySet.add(im.key());
>                  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);
> {noformat}
> 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
(v6.3.4#6332)

Mime
View raw message