[jira] [Updated] (CASSANDRA-11529) Checking if an unlogged batch is local is inefficient
[ https://issues.apache.org/jira/browse/CASSANDRA-11529?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Jeff Jirsa updated CASSANDRA-11529: --- Labels: docs-impacting (was: ) > 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 > Labels: docs-impacting > Fix For: 2.1.14, 2.2.6, 3.6, 3.0.6 > > > 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)
[jira] [Updated] (CASSANDRA-11529) Checking if an unlogged batch is local is inefficient
[ https://issues.apache.org/jira/browse/CASSANDRA-11529?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Aleksey Yeschenko updated CASSANDRA-11529: -- Resolution: Fixed Fix Version/s: (was: 3.0.x) (was: 2.2.x) (was: 2.1.x) (was: 3.x) 3.0.6 3.6 2.2.6 2.1.14 Status: Resolved (was: Ready to Commit) > 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.14, 2.2.6, 3.6, 3.0.6 > > > 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)
[jira] [Updated] (CASSANDRA-11529) Checking if an unlogged batch is local is inefficient
[ https://issues.apache.org/jira/browse/CASSANDRA-11529?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Stefania updated CASSANDRA-11529: - Status: Ready to Commit (was: Patch Available) > 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)
[jira] [Updated] (CASSANDRA-11529) Checking if an unlogged batch is local is inefficient
[ https://issues.apache.org/jira/browse/CASSANDRA-11529?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Stefania updated CASSANDRA-11529: - Status: Patch Available (was: In Progress) > 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)
[jira] [Updated] (CASSANDRA-11529) Checking if an unlogged batch is local is inefficient
[ https://issues.apache.org/jira/browse/CASSANDRA-11529?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Paulo Motta updated CASSANDRA-11529: Reviewer: Paulo Motta > 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)
[jira] [Updated] (CASSANDRA-11529) Checking if an unlogged batch is local is inefficient
[ https://issues.apache.org/jira/browse/CASSANDRA-11529?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Jeremiah Jordan updated CASSANDRA-11529: Priority: Critical (was: Major) > 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 >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)
[jira] [Updated] (CASSANDRA-11529) Checking if an unlogged batch is local is inefficient
[ https://issues.apache.org/jira/browse/CASSANDRA-11529?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Jeremiah Jordan updated CASSANDRA-11529: Fix Version/s: 3.x 3.0.x 2.2.x 2.1.x > 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 >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)