[
https://issues.apache.org/jira/browse/CASSANDRA-11529?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15231641#comment-15231641
]
Stefania commented on CASSANDRA-11529:
--------------------------------------
I've removed the check for local mutations and added a threshold that can be
configured via a new yaml parameter,
{{unlogged_batch_across_partitions_warn_threshold}}.
Here are the patches and CI results:
||2.1||2.2||3.0||trunk||
|[patch|https://github.com/stef1927/cassandra/commits/11529-2.1]|[patch|https://github.com/stef1927/cassandra/commits/11529-2.2]|[patch|https://github.com/stef1927/cassandra/commits/11529-3.0]|[patch|https://github.com/stef1927/cassandra/commits/11529]|
|[testall|http://cassci.datastax.com/view/Dev/view/stef1927/job/stef1927-11529-2.1-testall/]|[testall|http://cassci.datastax.com/view/Dev/view/stef1927/job/stef1927-11529-2.2-testall/]|[testall|http://cassci.datastax.com/view/Dev/view/stef1927/job/stef1927-11529-3.0-testall/]|[testall|http://cassci.datastax.com/view/Dev/view/stef1927/job/stef1927-11529-testall/]|
|[dtest|http://cassci.datastax.com/view/Dev/view/stef1927/job/stef1927-11529-2.1-dtest/]|[dtest|http://cassci.datastax.com/view/Dev/view/stef1927/job/stef1927-11529-2.2-dtest/]|[dtest|http://cassci.datastax.com/view/Dev/view/stef1927/job/stef1927-11529-3.0-dtest/]|[dtest|http://cassci.datastax.com/view/Dev/view/stef1927/job/stef1927-11529-dtest/]|
No single patch up-merges cleanly, there are conflicts for all branches.
We also have a dtest patch
[here|https://github.com/stef1927/cassandra-dtest/commits/11529].
> 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)