You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by al...@apache.org on 2016/04/11 20:19:17 UTC
[08/10] cassandra git commit: Merge branch 'cassandra-2.2' into
cassandra-3.0
Merge branch 'cassandra-2.2' into cassandra-3.0
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/5dbeef3f
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/5dbeef3f
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/5dbeef3f
Branch: refs/heads/cassandra-3.0
Commit: 5dbeef3f51e61525c90de35c521142f7db340fe5
Parents: f0cd326 ab2b8a6
Author: Aleksey Yeschenko <al...@apache.org>
Authored: Mon Apr 11 19:16:03 2016 +0100
Committer: Aleksey Yeschenko <al...@apache.org>
Committed: Mon Apr 11 19:16:39 2016 +0100
----------------------------------------------------------------------
CHANGES.txt | 1 +
conf/cassandra.yaml | 3 ++
.../org/apache/cassandra/config/Config.java | 1 +
.../cassandra/config/DatabaseDescriptor.java | 5 +++
.../cql3/statements/BatchStatement.java | 37 ++++++--------------
5 files changed, 20 insertions(+), 27 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/5dbeef3f/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index 8c40e63,419ed21..76c9d99
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -89,9 -42,12 +89,10 @@@ Merged from 2.2
* (cqlsh) Support utf-8/cp65001 encoding on Windows (CASSANDRA-11030)
* Fix paging on DISTINCT queries repeats result when first row in partition changes
(CASSANDRA-10010)
+ * cqlsh: change default encoding to UTF-8 (CASSANDRA-11124)
Merged from 2.1:
+ * Checking if an unlogged batch is local is inefficient (CASSANDRA-11529)
- * Fix paging for COMPACT tables without clustering columns (CASSANDRA-11467)
- * Add a -j parameter to scrub/cleanup/upgradesstables to state how
- many threads to use (CASSANDRA-11179)
- * Backport CASSANDRA-10679 (CASSANDRA-9598)
+ * Fix out-of-space error treatment in memtable flushing (CASSANDRA-11448).
* Don't do defragmentation if reading from repaired sstables (CASSANDRA-10342)
* Fix streaming_socket_timeout_in_ms not enforced (CASSANDRA-11286)
* Avoid dropping message too quickly due to missing unit conversion (CASSANDRA-11302)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/5dbeef3f/conf/cassandra.yaml
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/5dbeef3f/src/java/org/apache/cassandra/config/Config.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/5dbeef3f/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/5dbeef3f/src/java/org/apache/cassandra/cql3/statements/BatchStatement.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/cql3/statements/BatchStatement.java
index 47396fb,76e389b..1c395a5
--- a/src/java/org/apache/cassandra/cql3/statements/BatchStatement.java
+++ b/src/java/org/apache/cassandra/cql3/statements/BatchStatement.java
@@@ -32,12 -32,12 +32,10 @@@ import org.apache.cassandra.config.Colu
import org.apache.cassandra.config.DatabaseDescriptor;
import org.apache.cassandra.cql3.*;
import org.apache.cassandra.db.*;
-import org.apache.cassandra.db.composites.Composite;
+import org.apache.cassandra.db.partitions.PartitionUpdate;
+import org.apache.cassandra.db.rows.RowIterator;
- import org.apache.cassandra.dht.Range;
- import org.apache.cassandra.dht.Token;
import org.apache.cassandra.exceptions.*;
-import org.apache.cassandra.service.ClientState;
-import org.apache.cassandra.service.ClientWarn;
-import org.apache.cassandra.service.QueryState;
-import org.apache.cassandra.service.StorageProxy;
+import org.apache.cassandra.service.*;
import org.apache.cassandra.tracing.Tracing;
import org.apache.cassandra.transport.messages.ResultMessage;
import org.apache.cassandra.utils.NoSpamLogger;
@@@ -69,16 -59,8 +67,16 @@@ public class BatchStatement implements
private final Attributes attrs;
private final boolean hasConditions;
private static final Logger logger = LoggerFactory.getLogger(BatchStatement.class);
- private static final String unloggedBatchWarning = "Unlogged batch covering {} partitions detected against table{} {}. " +
- "You should use a logged batch for atomicity, or asynchronous writes for performance.";
+
- private static final String UNLOGGED_BATCH_WARNING = "Unlogged batch covering {} partition{} detected " +
++ private static final String UNLOGGED_BATCH_WARNING = "Unlogged batch covering {} partitions detected " +
+ "against table{} {}. You should use a logged batch for " +
+ "atomicity, or asynchronous writes for performance.";
+
+ private static final String LOGGED_BATCH_LOW_GCGS_WARNING = "Executing a LOGGED BATCH on table{} {}, configured with a " +
+ "gc_grace_seconds of 0. The gc_grace_seconds is used to TTL " +
+ "batchlog entries, so setting gc_grace_seconds too low on " +
+ "tables involved in an atomic batch might cause batchlog " +
+ "entries to expire before being replayed.";
/**
* Creates a new BatchStatement from a list of statements and a
@@@ -292,35 -275,35 +290,31 @@@
}
}
- private void verifyBatchType(Collection<? extends IMutation> mutations)
+ private void verifyBatchType(Iterable<PartitionUpdate> updates)
{
- if (type != Type.LOGGED && mutations.size() > 1)
+ if (!isLogged() && Iterables.size(updates) > 1)
{
- Set<String> ksCfPairs = new HashSet<>();
- Set<ByteBuffer> keySet = new HashSet<>();
+ Set<DecoratedKey> keySet = new HashSet<>();
+ Set<String> tableNames = new HashSet<>();
- Map<String, Collection<Range<Token>>> localTokensByKs = new HashMap<>();
- boolean localPartitionsOnly = true;
- for (IMutation im : mutations)
+ for (PartitionUpdate update : updates)
{
- keySet.add(im.key());
+ keySet.add(update.partitionKey());
- tableNames.add(String.format("%s.%s", update.metadata().ksName, update.metadata().cfName));
- if (localPartitionsOnly)
- localPartitionsOnly &= isPartitionLocal(localTokensByKs, update);
- for (ColumnFamily cf : im.getColumnFamilies())
- ksCfPairs.add(String.format("%s.%s", cf.metadata().ksName, cf.metadata().cfName));
++ tableNames.add(String.format("%s.%s", update.metadata().ksName, update.metadata().cfName));
}
- // CASSANDRA-9303: If we only have local mutations we do not warn
- if (localPartitionsOnly)
- return;
-
+ // CASSANDRA-11529: log only if we have more than a threshold of keys, this was also suggested in the
+ // original ticket that introduced this warning, CASSANDRA-9282
+ if (keySet.size() > DatabaseDescriptor.getUnloggedBatchAcrossPartitionsWarnThreshold())
+ {
- NoSpamLogger.log(logger, NoSpamLogger.Level.WARN, 1, TimeUnit.MINUTES, unloggedBatchWarning,
- keySet.size(), ksCfPairs.size() == 1 ? "" : "s", ksCfPairs);
-
- ClientWarn.instance.warn(MessageFormatter.arrayFormat(unloggedBatchWarning,
- new Object[]{
- keySet.size(),
- ksCfPairs.size() == 1 ? "" : "s",
- ksCfPairs
- }).getMessage());
+
- NoSpamLogger.log(logger, NoSpamLogger.Level.WARN, 1, TimeUnit.MINUTES, UNLOGGED_BATCH_WARNING,
- keySet.size(), keySet.size() == 1 ? "" : "s",
- tableNames.size() == 1 ? "" : "s", tableNames);
++ NoSpamLogger.log(logger, NoSpamLogger.Level.WARN, 1, TimeUnit.MINUTES, UNLOGGED_BATCH_WARNING,
++ keySet.size(), tableNames.size() == 1 ? "" : "s", tableNames);
+
- ClientWarn.instance.warn(MessageFormatter.arrayFormat(UNLOGGED_BATCH_WARNING, new Object[]{keySet.size(), keySet.size() == 1 ? "" : "s",
++ ClientWarn.instance.warn(MessageFormatter.arrayFormat(UNLOGGED_BATCH_WARNING, new Object[]{keySet.size(),
+ tableNames.size() == 1 ? "" : "s", tableNames}).getMessage());
+ }
}
}