don't clear queuedDeliveries entry until actually done
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/aca3d26c Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/aca3d26c Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/aca3d26c Branch: refs/heads/3624 Commit: aca3d26c667676c2ac2cc871f3436b11356bf181 Parents: 8e528c8 Author: Jonathan Ellis <[email protected]> Authored: Wed Dec 28 21:05:15 2011 -0600 Committer: Jonathan Ellis <[email protected]> Committed: Wed Dec 28 21:05:15 2011 -0600 ---------------------------------------------------------------------- .../apache/cassandra/db/HintedHandOffManager.java | 41 +++++++-------- 1 files changed, 19 insertions(+), 22 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/aca3d26c/src/java/org/apache/cassandra/db/HintedHandOffManager.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/HintedHandOffManager.java b/src/java/org/apache/cassandra/db/HintedHandOffManager.java index 0ac93d8..e4a3afd 100644 --- a/src/java/org/apache/cassandra/db/HintedHandOffManager.java +++ b/src/java/org/apache/cassandra/db/HintedHandOffManager.java @@ -229,31 +229,28 @@ public class HintedHandOffManager implements HintedHandOffManagerMBean private void deliverHintsToEndpoint(InetAddress endpoint) throws IOException, DigestMismatchException, InvalidRequestException, TimeoutException, InterruptedException { ColumnFamilyStore hintStore = Table.open(Table.SYSTEM_TABLE).getColumnFamilyStore(HINTS_CF); - try + if (hintStore.isEmpty()) { - if (hintStore.isEmpty()) - return; // nothing to do, don't confuse users by logging a no-op handoff - - logger_.debug("Checking remote({}) schema before delivering hints", endpoint); - int waited = waitForSchemaAgreement(endpoint); - // sleep a random amount to stagger handoff delivery from different replicas. - // (if we had to wait, then gossiper randomness took care of that for us already.) - if (waited == 0) { - // use a 'rounded' sleep interval because of a strange bug with windows: CASSANDRA-3375 - int sleep = FBUtilities.threadLocalRandom().nextInt(2000) * 30; - logger_.debug("Sleeping {}ms to stagger hint delivery", sleep); - Thread.sleep(sleep); - } + queuedDeliveries.remove(endpoint); + return; // nothing to do, don't confuse users by logging a no-op handoff + } - if (!FailureDetector.instance.isAlive(endpoint)) - { - logger_.info("Endpoint {} died before hint delivery, aborting", endpoint); - return; - } + logger_.debug("Checking remote({}) schema before delivering hints", endpoint); + int waited = waitForSchemaAgreement(endpoint); + // sleep a random amount to stagger handoff delivery from different replicas. + // (if we had to wait, then gossiper randomness took care of that for us already.) + if (waited == 0) { + // use a 'rounded' sleep interval because of a strange bug with windows: CASSANDRA-3375 + int sleep = FBUtilities.threadLocalRandom().nextInt(2000) * 30; + logger_.debug("Sleeping {}ms to stagger hint delivery", sleep); + Thread.sleep(sleep); } - finally + + if (!FailureDetector.instance.isAlive(endpoint)) { + logger_.info("Endpoint {} died before hint delivery, aborting", endpoint); queuedDeliveries.remove(endpoint); + return; } // 1. Get the key of the endpoint we need to handoff @@ -341,8 +338,8 @@ public class HintedHandOffManager implements HintedHandOffManagerMBean } } - logger_.info(String.format("Finished hinted handoff of %s rows to endpoint %s", - rowsReplayed, endpoint)); + logger_.info(String.format("Finished hinted handoff of %s rows to endpoint %s", rowsReplayed, endpoint)); + queuedDeliveries.remove(endpoint); } /**
