You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by sl...@apache.org on 2013/12/18 13:51:32 UTC
[1/2] git commit: Don't send confusing info on timeouts
Updated Branches:
refs/heads/cassandra-2.0 7c32ffbbf -> 1727ea773
Don't send confusing info on timeouts
patch by slebresne; reviewed by jbellis for CASSANDRA-6491
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/b73178d8
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/b73178d8
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/b73178d8
Branch: refs/heads/cassandra-2.0
Commit: b73178d8626ec7fb404c8ded442ecff23192f14f
Parents: 079f1e8
Author: Sylvain Lebresne <sy...@datastax.com>
Authored: Wed Dec 18 13:48:26 2013 +0100
Committer: Sylvain Lebresne <sy...@datastax.com>
Committed: Wed Dec 18 13:48:26 2013 +0100
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../cassandra/service/AbstractWriteResponseHandler.java | 11 ++++++++++-
src/java/org/apache/cassandra/service/ReadCallback.java | 8 +++++++-
src/java/org/apache/cassandra/service/StorageProxy.java | 4 ++--
4 files changed, 20 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/b73178d8/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 5086440..a1514d0 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,5 +1,6 @@
1.2.14
* Allow executing CREATE statements multiple times (CASSANDRA-6471)
+ * Don't send confusing info with timeouts (CASSANDRA-6491)
1.2.13
* Improved error message on bad properties in DDL queries (CASSANDRA-6453)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/b73178d8/src/java/org/apache/cassandra/service/AbstractWriteResponseHandler.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/service/AbstractWriteResponseHandler.java b/src/java/org/apache/cassandra/service/AbstractWriteResponseHandler.java
index 4df9e1f..3cd853f 100644
--- a/src/java/org/apache/cassandra/service/AbstractWriteResponseHandler.java
+++ b/src/java/org/apache/cassandra/service/AbstractWriteResponseHandler.java
@@ -88,7 +88,16 @@ public abstract class AbstractWriteResponseHandler implements IAsyncCallback
}
if (!success)
- throw new WriteTimeoutException(writeType, consistencyLevel, ackCount(), totalBlockFor());
+ {
+ int acks = ackCount();
+ int blockedFor = totalBlockFor();
+ // It's pretty unlikely, but we can race between exiting await above and here, so
+ // that we could now have enough acks. In that case, we "lie" on the acks count to
+ // avoid sending confusing info to the user (see CASSANDRA-).
+ if (acks >= blockedFor)
+ acks = blockedFor - 1;
+ throw new WriteTimeoutException(writeType, consistencyLevel, acks, blockedFor);
+ }
}
protected int totalBlockFor()
http://git-wip-us.apache.org/repos/asf/cassandra/blob/b73178d8/src/java/org/apache/cassandra/service/ReadCallback.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/service/ReadCallback.java b/src/java/org/apache/cassandra/service/ReadCallback.java
index 64b9e76..7889039 100644
--- a/src/java/org/apache/cassandra/service/ReadCallback.java
+++ b/src/java/org/apache/cassandra/service/ReadCallback.java
@@ -97,7 +97,13 @@ public class ReadCallback<TMessage, TResolved> implements IAsyncCallback<TMessag
}
if (!success)
- throw new ReadTimeoutException(consistencyLevel, received.get(), blockfor, resolver.isDataPresent());
+ {
+ // Same as for writes, see AbstractWriteResponseHandler
+ int acks = received.get();
+ if (resolver.isDataPresent() && acks >= blockfor)
+ acks = blockfor - 1;
+ throw new ReadTimeoutException(consistencyLevel, acks, blockfor, resolver.isDataPresent());
+ }
return blockfor == 1 ? resolver.getData() : resolver.resolve();
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/b73178d8/src/java/org/apache/cassandra/service/StorageProxy.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/service/StorageProxy.java b/src/java/org/apache/cassandra/service/StorageProxy.java
index d49e59d..e6cd755 100644
--- a/src/java/org/apache/cassandra/service/StorageProxy.java
+++ b/src/java/org/apache/cassandra/service/StorageProxy.java
@@ -1013,7 +1013,7 @@ public class StorageProxy implements StorageProxyMBean
{
Tracing.trace("Timed out on digest mismatch retries");
int blockFor = consistency_level.blockFor(Table.open(command.getKeyspace()));
- throw new ReadTimeoutException(consistency_level, blockFor, blockFor, true);
+ throw new ReadTimeoutException(consistency_level, blockFor-1, blockFor, true);
}
// retry any potential short reads
@@ -1248,7 +1248,7 @@ public class StorageProxy implements StorageProxyMBean
Tracing.trace("Timed out while read-repairing after receiving all {} data and digest responses", blockFor);
else
logger.debug("Range slice timeout while read-repairing after receiving all {} data and digest responses", blockFor);
- throw new ReadTimeoutException(consistency_level, blockFor, blockFor, true);
+ throw new ReadTimeoutException(consistency_level, blockFor-1, blockFor, true);
}
catch (DigestMismatchException e)
{
[2/2] git commit: Merge branch 'cassandra-1.2' into cassandra-2.0
Posted by sl...@apache.org.
Merge branch 'cassandra-1.2' into cassandra-2.0
Conflicts:
CHANGES.txt
src/java/org/apache/cassandra/service/ReadCallback.java
src/java/org/apache/cassandra/service/StorageProxy.java
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/1727ea77
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/1727ea77
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/1727ea77
Branch: refs/heads/cassandra-2.0
Commit: 1727ea773324b9a8afd41b5d5d238aee1dd8f441
Parents: 7c32ffb b73178d
Author: Sylvain Lebresne <sy...@datastax.com>
Authored: Wed Dec 18 13:51:23 2013 +0100
Committer: Sylvain Lebresne <sy...@datastax.com>
Committed: Wed Dec 18 13:51:23 2013 +0100
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../cassandra/service/AbstractWriteResponseHandler.java | 11 ++++++++++-
src/java/org/apache/cassandra/service/ReadCallback.java | 4 ++++
src/java/org/apache/cassandra/service/StorageProxy.java | 4 ++--
4 files changed, 17 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/1727ea77/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index 5a124ab,a1514d0..10c9c33
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -30,46 -23,9 +30,47 @@@ Merged from 1.2
(CASSANDRA-6413)
* (Hadoop) add describe_local_ring (CASSANDRA-6268)
* Fix handling of concurrent directory creation failure (CASSANDRA-6459)
+ * Allow executing CREATE statements multiple times (CASSANDRA-6471)
++ * Don't send confusing info with timeouts (CASSANDRA-6491)
-1.2.12
+2.0.3
+ * Fix FD leak on slice read path (CASSANDRA-6275)
+ * Cancel read meter task when closing SSTR (CASSANDRA-6358)
+ * free off-heap IndexSummary during bulk (CASSANDRA-6359)
+ * Recover from IOException in accept() thread (CASSANDRA-6349)
+ * Improve Gossip tolerance of abnormally slow tasks (CASSANDRA-6338)
+ * Fix trying to hint timed out counter writes (CASSANDRA-6322)
+ * Allow restoring specific columnfamilies from archived CL (CASSANDRA-4809)
+ * Avoid flushing compaction_history after each operation (CASSANDRA-6287)
+ * Fix repair assertion error when tombstones expire (CASSANDRA-6277)
+ * Skip loading corrupt key cache (CASSANDRA-6260)
+ * Fixes for compacting larger-than-memory rows (CASSANDRA-6274)
+ * Compact hottest sstables first and optionally omit coldest from
+ compaction entirely (CASSANDRA-6109)
+ * Fix modifying column_metadata from thrift (CASSANDRA-6182)
+ * cqlsh: fix LIST USERS output (CASSANDRA-6242)
+ * Add IRequestSink interface (CASSANDRA-6248)
+ * Update memtable size while flushing (CASSANDRA-6249)
+ * Provide hooks around CQL2/CQL3 statement execution (CASSANDRA-6252)
+ * Require Permission.SELECT for CAS updates (CASSANDRA-6247)
+ * New CQL-aware SSTableWriter (CASSANDRA-5894)
+ * Reject CAS operation when the protocol v1 is used (CASSANDRA-6270)
+ * Correctly throw error when frame too large (CASSANDRA-5981)
+ * Fix serialization bug in PagedRange with 2ndary indexes (CASSANDRA-6299)
+ * Fix CQL3 table validation in Thrift (CASSANDRA-6140)
+ * Fix bug missing results with IN clauses (CASSANDRA-6327)
+ * Fix paging with reversed slices (CASSANDRA-6343)
+ * Set minTimestamp correctly to be able to drop expired sstables (CASSANDRA-6337)
+ * Support NaN and Infinity as float literals (CASSANDRA-6003)
+ * Remove RF from nodetool ring output (CASSANDRA-6289)
+ * Fix attempting to flush empty rows (CASSANDRA-6374)
+ * Fix potential out of bounds exception when paging (CASSANDRA-6333)
+Merged from 1.2:
+ * Optimize FD phi calculation (CASSANDRA-6386)
+ * Improve initial FD phi estimate when starting up (CASSANDRA-6385)
+ * Don't list CQL3 table in CLI describe even if named explicitely
+ (CASSANDRA-5750)
* Invalidate row cache when dropping CF (CASSANDRA-6351)
* add non-jamm path for cached statements (CASSANDRA-6293)
* (Hadoop) Require CFRR batchSize to be at least 2 (CASSANDRA-6114)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/1727ea77/src/java/org/apache/cassandra/service/AbstractWriteResponseHandler.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/1727ea77/src/java/org/apache/cassandra/service/ReadCallback.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/service/ReadCallback.java
index d4cc7f5,7889039..d665242
--- a/src/java/org/apache/cassandra/service/ReadCallback.java
+++ b/src/java/org/apache/cassandra/service/ReadCallback.java
@@@ -89,16 -95,14 +89,20 @@@ public class ReadCallback<TMessage, TRe
{
throw new AssertionError(ex);
}
+ }
- if (!success)
+ public TResolved get() throws ReadTimeoutException, DigestMismatchException
+ {
+ if (!await(command.getTimeout(), TimeUnit.MILLISECONDS))
{
+ // Same as for writes, see AbstractWriteResponseHandler
+ int acks = received.get();
+ if (resolver.isDataPresent() && acks >= blockfor)
+ acks = blockfor - 1;
- throw new ReadTimeoutException(consistencyLevel, acks, blockfor, resolver.isDataPresent());
+ ReadTimeoutException ex = new ReadTimeoutException(consistencyLevel, received.get(), blockfor, resolver.isDataPresent());
+ if (logger.isDebugEnabled())
+ logger.debug("Read timeout: {}", ex.toString());
+ throw ex;
}
return blockfor == 1 ? resolver.getData() : resolver.resolve();
http://git-wip-us.apache.org/repos/asf/cassandra/blob/1727ea77/src/java/org/apache/cassandra/service/StorageProxy.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/service/StorageProxy.java
index 4b53246,e6cd755..2da9d38
--- a/src/java/org/apache/cassandra/service/StorageProxy.java
+++ b/src/java/org/apache/cassandra/service/StorageProxy.java
@@@ -1351,8 -1012,8 +1351,8 @@@ public class StorageProxy implements St
catch (TimeoutException e)
{
Tracing.trace("Timed out on digest mismatch retries");
- int blockFor = consistency_level.blockFor(Table.open(command.getKeyspace()));
- throw new ReadTimeoutException(consistency_level, blockFor-1, blockFor, true);
+ int blockFor = consistencyLevel.blockFor(Keyspace.open(command.getKeyspace()));
- throw new ReadTimeoutException(consistencyLevel, blockFor, blockFor, true);
++ throw new ReadTimeoutException(consistencyLevel, blockFor-1, blockFor, true);
}
// retry any potential short reads