change SP to throw UE when hint queue is full instead of TOE, since we guarantee that no changes are performed patch by jbellis; reviewed by slebresne for CASSANDRA-4414
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/200ba864 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/200ba864 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/200ba864 Branch: refs/heads/trunk Commit: 200ba86477f49939630b75f989afe07a2d91185a Parents: 2f4c7c4 Author: Jonathan Ellis <jbel...@apache.org> Authored: Wed Jul 11 18:10:02 2012 -0500 Committer: Jonathan Ellis <jbel...@apache.org> Committed: Fri Jul 13 11:31:24 2012 -0500 ---------------------------------------------------------------------- .../org/apache/cassandra/db/CounterColumn.java | 3 ++- .../org/apache/cassandra/service/StorageProxy.java | 10 +++++----- 2 files changed, 7 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/200ba864/src/java/org/apache/cassandra/db/CounterColumn.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/CounterColumn.java b/src/java/org/apache/cassandra/db/CounterColumn.java index 4b0bdc2..7ea6514 100644 --- a/src/java/org/apache/cassandra/db/CounterColumn.java +++ b/src/java/org/apache/cassandra/db/CounterColumn.java @@ -366,7 +366,8 @@ public class CounterColumn extends Column StorageProxy.performWrite(rm, ConsistencyLevel.ANY, localDataCenter, new StorageProxy.WritePerformer() { - public void apply(IMutation mutation, Collection<InetAddress> targets, IWriteResponseHandler responseHandler, String localDataCenter, ConsistencyLevel consistency_level) throws IOException, TimeoutException + public void apply(IMutation mutation, Collection<InetAddress> targets, IWriteResponseHandler responseHandler, String localDataCenter, ConsistencyLevel consistency_level) + throws IOException, TimeoutException, UnavailableException { // We should only send to the remote replica, not the local one targets.remove(local); http://git-wip-us.apache.org/repos/asf/cassandra/blob/200ba864/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 8ae063b..7a79c06 100644 --- a/src/java/org/apache/cassandra/service/StorageProxy.java +++ b/src/java/org/apache/cassandra/service/StorageProxy.java @@ -112,7 +112,7 @@ public class StorageProxy implements StorageProxyMBean IWriteResponseHandler responseHandler, String localDataCenter, ConsistencyLevel consistency_level) - throws IOException, TimeoutException + throws IOException, TimeoutException, UnavailableException { assert mutation instanceof RowMutation; sendToHintedEndpoints((RowMutation) mutation, targets, responseHandler, localDataCenter, consistency_level); @@ -287,7 +287,7 @@ public class StorageProxy implements StorageProxyMBean IWriteResponseHandler responseHandler, String localDataCenter, ConsistencyLevel consistency_level) - throws IOException, TimeoutException + throws IOException, TimeoutException, UnavailableException { // Multimap that holds onto all the messages and addresses meant for a specific datacenter Map<String, Multimap<MessageOut, InetAddress>> dcMessages = new HashMap<String, Multimap<MessageOut, InetAddress>>(targets.size()); @@ -302,7 +302,7 @@ public class StorageProxy implements StorageProxyMBean if (totalHintsInProgress.get() > maxHintsInProgress && (hintsInProgress.get(destination).get() > 0 && shouldHint(destination))) { - throw new TimeoutException(); + throw new UnavailableException(); } if (FailureDetector.instance.isAlive(destination)) @@ -576,7 +576,7 @@ public class StorageProxy implements StorageProxyMBean // and we want to avoid blocking too much the MUTATION stage StageManager.getStage(Stage.REPLICATE_ON_WRITE).execute(new DroppableRunnable(MessagingService.Verb.READ) { - public void runMayThrow() throws IOException, TimeoutException + public void runMayThrow() throws IOException, TimeoutException, UnavailableException { // send mutation to other replica sendToHintedEndpoints(cm.makeReplicationMutation(), targets, responseHandler, localDataCenter, consistency_level); @@ -1254,7 +1254,7 @@ public class StorageProxy implements StorageProxyMBean public interface WritePerformer { - public void apply(IMutation mutation, Collection<InetAddress> targets, IWriteResponseHandler responseHandler, String localDataCenter, ConsistencyLevel consistency_level) throws IOException, TimeoutException; + public void apply(IMutation mutation, Collection<InetAddress> targets, IWriteResponseHandler responseHandler, String localDataCenter, ConsistencyLevel consistency_level) throws IOException, TimeoutException, UnavailableException; } private static abstract class DroppableRunnable implements Runnable