You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2014/02/07 17:31:02 UTC

[1/6] git commit: Compact hints after partial replay to clean out tombstones patch by jbellis; reviewed by ayeschenko for CASSANDRA-6666

Updated Branches:
  refs/heads/cassandra-1.2 beefd0b8c -> ab5372f0f
  refs/heads/cassandra-2.0 56a615d73 -> fe571421d
  refs/heads/trunk ef6d42cfc -> 65e09fa5b


Compact hints after partial replay to clean out tombstones
patch by jbellis; reviewed by ayeschenko for CASSANDRA-6666


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/ab5372f0
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/ab5372f0
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/ab5372f0

Branch: refs/heads/cassandra-1.2
Commit: ab5372f0f3b3650556242a21a9d463b4f1e93efd
Parents: beefd0b
Author: Jonathan Ellis <jb...@apache.org>
Authored: Fri Feb 7 10:30:20 2014 -0600
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Fri Feb 7 10:30:20 2014 -0600

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 .../cassandra/db/HintedHandOffManager.java      | 26 ++++++++++++--------
 2 files changed, 17 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/ab5372f0/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 5511e01..82783f8 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -2,6 +2,7 @@
  * Fix upgradesstables NPE for non-CF-based indexes (CASSANDRA-6645)
  * Fix partition and range deletes not triggering flush (CASSANDRA-6655)
  * Fix mean cells and mean row size per sstable calculations (CASSANDRA-6667)
+ * Compact hints after partial replay to clean out tombstones (CASSANDRA-6666)
 
 
 1.2.15

http://git-wip-us.apache.org/repos/asf/cassandra/blob/ab5372f0/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 ede49e4..b1ccbc3 100644
--- a/src/java/org/apache/cassandra/db/HintedHandOffManager.java
+++ b/src/java/org/apache/cassandra/db/HintedHandOffManager.java
@@ -309,6 +309,7 @@ public class HintedHandOffManager implements HintedHandOffManagerMBean
                            / (StorageService.instance.getTokenMetadata().getAllEndpoints().size() - 1);
         RateLimiter rateLimiter = RateLimiter.create(throttleInKB == 0 ? Double.MAX_VALUE : throttleInKB * 1024);
 
+        boolean finished = false;
         delivery:
         while (true)
         {
@@ -323,13 +324,17 @@ public class HintedHandOffManager implements HintedHandOffManagerMBean
                                                                      (int) (System.currentTimeMillis() / 1000));
 
             if (pagingFinished(hintsPage, startColumn))
+            {
+                logger.info("Finished hinted handoff of {} rows to endpoint {}", rowsReplayed, endpoint);
+                finished = true;
                 break;
+            }
 
             // check if node is still alive and we should continue delivery process
             if (!FailureDetector.instance.isAlive(endpoint))
             {
                 logger.info("Endpoint {} died during hint delivery; aborting ({} delivered)", endpoint, rowsReplayed);
-                return;
+                break;
             }
 
             List<WriteResponseHandler> responseHandlers = Lists.newArrayList();
@@ -420,20 +425,21 @@ public class HintedHandOffManager implements HintedHandOffManagerMBean
                 catch (WriteTimeoutException e)
                 {
                     logger.info("Timed out replaying hints to {}; aborting ({} delivered)", endpoint, rowsReplayed);
-                    return;
+                    break delivery;
                 }
             }
         }
 
-        logger.info("Finished hinted handoff of {} rows to endpoint {}", rowsReplayed, endpoint);
-
-        try
+        if (finished || rowsReplayed.get() >= DatabaseDescriptor.getTombstoneDebugThreshold())
         {
-            compact().get();
-        }
-        catch (Exception e)
-        {
-            throw new RuntimeException(e);
+            try
+            {
+                compact().get();
+            }
+            catch (Exception e)
+            {
+                throw new RuntimeException(e);
+            }
         }
     }
 


[4/6] git commit: Merge branch 'cassandra-1.2' into cassandra-2.0

Posted by jb...@apache.org.
Merge branch 'cassandra-1.2' into cassandra-2.0


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/fe571421
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/fe571421
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/fe571421

Branch: refs/heads/trunk
Commit: fe571421dadea7e8a904a7b5b3127cd6b71263a8
Parents: 56a615d ab5372f
Author: Jonathan Ellis <jb...@apache.org>
Authored: Fri Feb 7 10:30:30 2014 -0600
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Fri Feb 7 10:30:50 2014 -0600

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 .../cassandra/db/HintedHandOffManager.java      | 26 ++++++++++++--------
 2 files changed, 17 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/fe571421/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index 94cd19c,82783f8..d32490e
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -11,33 -2,24 +11,34 @@@ Merged from 1.2
   * Fix upgradesstables NPE for non-CF-based indexes (CASSANDRA-6645)
   * Fix partition and range deletes not triggering flush (CASSANDRA-6655)
   * Fix mean cells and mean row size per sstable calculations (CASSANDRA-6667)
+  * Compact hints after partial replay to clean out tombstones (CASSANDRA-6666)
  
 -
 -1.2.15
 - * Move handling of migration event source to solve bootstrap race (CASSANDRA-6648)
 - * Make sure compaction throughput value doesn't overflow with int math (CASSANDRA-6647)
 -
 -
 -1.2.14
 - * Reverted code to limit CQL prepared statement cache by size (CASSANDRA-6592)
 - * add cassandra.default_messaging_version property to allow easier
 -   upgrading from 1.1 (CASSANDRA-6619)
 - * Allow executing CREATE statements multiple times (CASSANDRA-6471)
 - * Don't send confusing info with timeouts (CASSANDRA-6491)
 - * Don't resubmit counter mutation runnables internally (CASSANDRA-6427)
 - * Don't drop local mutations without a hint (CASSANDRA-6510)
 - * Don't allow null max_hint_window_in_ms (CASSANDRA-6419)
 - * Validate SliceRange start and finish lengths (CASSANDRA-6521)
 +2.0.5
 + * Reduce garbage generated by bloom filter lookups (CASSANDRA-6609)
 + * Add ks.cf names to tombstone logging (CASSANDRA-6597)
 + * Use LOCAL_QUORUM for LWT operations at LOCAL_SERIAL (CASSANDRA-6495)
 + * Wait for gossip to settle before accepting client connections (CASSANDRA-4288)
 + * Delete unfinished compaction incrementally (CASSANDRA-6086)
 + * Allow specifying custom secondary index options in CQL3 (CASSANDRA-6480)
 + * Improve replica pinning for cache efficiency in DES (CASSANDRA-6485)
 + * Fix LOCAL_SERIAL from thrift (CASSANDRA-6584)
 + * Don't special case received counts in CAS timeout exceptions (CASSANDRA-6595)
 + * Add support for 2.1 global counter shards (CASSANDRA-6505)
 + * Fix NPE when streaming connection is not yet established (CASSANDRA-6210)
 + * Avoid rare duplicate read repair triggering (CASSANDRA-6606)
 + * Fix paging discardFirst (CASSANDRA-6555)
 + * Fix ArrayIndexOutOfBoundsException in 2ndary index query (CASSANDRA-6470)
 + * Release sstables upon rebuilding 2i (CASSANDRA-6635)
 + * Add AbstractCompactionStrategy.startup() method (CASSANDRA-6637)
 + * SSTableScanner may skip rows during cleanup (CASSANDRA-6638)
 + * sstables from stalled repair sessions can resurrect deleted data (CASSANDRA-6503)
 + * Switch stress to use ITransportFactory (CASSANDRA-6641)
 + * Fix IllegalArgumentException during prepare (CASSANDRA-6592)
 + * Fix possible loss of 2ndary index entries during compaction (CASSANDRA-6517)
 + * Fix direct Memory on architectures that do not support unaligned long access
 +   (CASSANDRA-6628)
 + * Let scrub optionally skip broken counter partitions (CASSANDRA-5930)
 +Merged from 1.2:
   * fsync compression metadata (CASSANDRA-6531)
   * Validate CF existence on execution for prepared statement (CASSANDRA-6535)
   * Add ability to throttle batchlog replay (CASSANDRA-6550)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/fe571421/src/java/org/apache/cassandra/db/HintedHandOffManager.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/db/HintedHandOffManager.java
index 40d5aaa,b1ccbc3..b9914a6
--- a/src/java/org/apache/cassandra/db/HintedHandOffManager.java
+++ b/src/java/org/apache/cassandra/db/HintedHandOffManager.java
@@@ -367,13 -318,17 +368,17 @@@ public class HintedHandOffManager imple
                                                              startColumn,
                                                              ByteBufferUtil.EMPTY_BYTE_BUFFER,
                                                              false,
 -                                                            pageSize);
 +                                                            pageSize,
 +                                                            now);
  
 -            ColumnFamily hintsPage = ColumnFamilyStore.removeDeleted(hintStore.getColumnFamily(filter),
 -                                                                     (int) (System.currentTimeMillis() / 1000));
 +            ColumnFamily hintsPage = ColumnFamilyStore.removeDeleted(hintStore.getColumnFamily(filter), (int) (now / 1000));
  
              if (pagingFinished(hintsPage, startColumn))
+             {
+                 logger.info("Finished hinted handoff of {} rows to endpoint {}", rowsReplayed, endpoint);
+                 finished = true;
                  break;
+             }
  
              // check if node is still alive and we should continue delivery process
              if (!FailureDetector.instance.isAlive(endpoint))
@@@ -475,15 -430,16 +480,16 @@@
              }
          }
  
-         logger.info("Finished hinted handoff of {} rows to endpoint {}", rowsReplayed, endpoint);
- 
-         try
-         {
-             compact().get();
-         }
-         catch (Exception e)
 -        if (finished || rowsReplayed.get() >= DatabaseDescriptor.getTombstoneDebugThreshold())
++        if (finished || rowsReplayed.get() >= DatabaseDescriptor.getTombstoneWarnThreshold())
          {
-             throw new RuntimeException(e);
+             try
+             {
+                 compact().get();
+             }
+             catch (Exception e)
+             {
+                 throw new RuntimeException(e);
+             }
          }
      }
  


[5/6] git commit: Merge branch 'cassandra-1.2' into cassandra-2.0

Posted by jb...@apache.org.
Merge branch 'cassandra-1.2' into cassandra-2.0


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/fe571421
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/fe571421
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/fe571421

Branch: refs/heads/cassandra-2.0
Commit: fe571421dadea7e8a904a7b5b3127cd6b71263a8
Parents: 56a615d ab5372f
Author: Jonathan Ellis <jb...@apache.org>
Authored: Fri Feb 7 10:30:30 2014 -0600
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Fri Feb 7 10:30:50 2014 -0600

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 .../cassandra/db/HintedHandOffManager.java      | 26 ++++++++++++--------
 2 files changed, 17 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/fe571421/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index 94cd19c,82783f8..d32490e
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -11,33 -2,24 +11,34 @@@ Merged from 1.2
   * Fix upgradesstables NPE for non-CF-based indexes (CASSANDRA-6645)
   * Fix partition and range deletes not triggering flush (CASSANDRA-6655)
   * Fix mean cells and mean row size per sstable calculations (CASSANDRA-6667)
+  * Compact hints after partial replay to clean out tombstones (CASSANDRA-6666)
  
 -
 -1.2.15
 - * Move handling of migration event source to solve bootstrap race (CASSANDRA-6648)
 - * Make sure compaction throughput value doesn't overflow with int math (CASSANDRA-6647)
 -
 -
 -1.2.14
 - * Reverted code to limit CQL prepared statement cache by size (CASSANDRA-6592)
 - * add cassandra.default_messaging_version property to allow easier
 -   upgrading from 1.1 (CASSANDRA-6619)
 - * Allow executing CREATE statements multiple times (CASSANDRA-6471)
 - * Don't send confusing info with timeouts (CASSANDRA-6491)
 - * Don't resubmit counter mutation runnables internally (CASSANDRA-6427)
 - * Don't drop local mutations without a hint (CASSANDRA-6510)
 - * Don't allow null max_hint_window_in_ms (CASSANDRA-6419)
 - * Validate SliceRange start and finish lengths (CASSANDRA-6521)
 +2.0.5
 + * Reduce garbage generated by bloom filter lookups (CASSANDRA-6609)
 + * Add ks.cf names to tombstone logging (CASSANDRA-6597)
 + * Use LOCAL_QUORUM for LWT operations at LOCAL_SERIAL (CASSANDRA-6495)
 + * Wait for gossip to settle before accepting client connections (CASSANDRA-4288)
 + * Delete unfinished compaction incrementally (CASSANDRA-6086)
 + * Allow specifying custom secondary index options in CQL3 (CASSANDRA-6480)
 + * Improve replica pinning for cache efficiency in DES (CASSANDRA-6485)
 + * Fix LOCAL_SERIAL from thrift (CASSANDRA-6584)
 + * Don't special case received counts in CAS timeout exceptions (CASSANDRA-6595)
 + * Add support for 2.1 global counter shards (CASSANDRA-6505)
 + * Fix NPE when streaming connection is not yet established (CASSANDRA-6210)
 + * Avoid rare duplicate read repair triggering (CASSANDRA-6606)
 + * Fix paging discardFirst (CASSANDRA-6555)
 + * Fix ArrayIndexOutOfBoundsException in 2ndary index query (CASSANDRA-6470)
 + * Release sstables upon rebuilding 2i (CASSANDRA-6635)
 + * Add AbstractCompactionStrategy.startup() method (CASSANDRA-6637)
 + * SSTableScanner may skip rows during cleanup (CASSANDRA-6638)
 + * sstables from stalled repair sessions can resurrect deleted data (CASSANDRA-6503)
 + * Switch stress to use ITransportFactory (CASSANDRA-6641)
 + * Fix IllegalArgumentException during prepare (CASSANDRA-6592)
 + * Fix possible loss of 2ndary index entries during compaction (CASSANDRA-6517)
 + * Fix direct Memory on architectures that do not support unaligned long access
 +   (CASSANDRA-6628)
 + * Let scrub optionally skip broken counter partitions (CASSANDRA-5930)
 +Merged from 1.2:
   * fsync compression metadata (CASSANDRA-6531)
   * Validate CF existence on execution for prepared statement (CASSANDRA-6535)
   * Add ability to throttle batchlog replay (CASSANDRA-6550)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/fe571421/src/java/org/apache/cassandra/db/HintedHandOffManager.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/db/HintedHandOffManager.java
index 40d5aaa,b1ccbc3..b9914a6
--- a/src/java/org/apache/cassandra/db/HintedHandOffManager.java
+++ b/src/java/org/apache/cassandra/db/HintedHandOffManager.java
@@@ -367,13 -318,17 +368,17 @@@ public class HintedHandOffManager imple
                                                              startColumn,
                                                              ByteBufferUtil.EMPTY_BYTE_BUFFER,
                                                              false,
 -                                                            pageSize);
 +                                                            pageSize,
 +                                                            now);
  
 -            ColumnFamily hintsPage = ColumnFamilyStore.removeDeleted(hintStore.getColumnFamily(filter),
 -                                                                     (int) (System.currentTimeMillis() / 1000));
 +            ColumnFamily hintsPage = ColumnFamilyStore.removeDeleted(hintStore.getColumnFamily(filter), (int) (now / 1000));
  
              if (pagingFinished(hintsPage, startColumn))
+             {
+                 logger.info("Finished hinted handoff of {} rows to endpoint {}", rowsReplayed, endpoint);
+                 finished = true;
                  break;
+             }
  
              // check if node is still alive and we should continue delivery process
              if (!FailureDetector.instance.isAlive(endpoint))
@@@ -475,15 -430,16 +480,16 @@@
              }
          }
  
-         logger.info("Finished hinted handoff of {} rows to endpoint {}", rowsReplayed, endpoint);
- 
-         try
-         {
-             compact().get();
-         }
-         catch (Exception e)
 -        if (finished || rowsReplayed.get() >= DatabaseDescriptor.getTombstoneDebugThreshold())
++        if (finished || rowsReplayed.get() >= DatabaseDescriptor.getTombstoneWarnThreshold())
          {
-             throw new RuntimeException(e);
+             try
+             {
+                 compact().get();
+             }
+             catch (Exception e)
+             {
+                 throw new RuntimeException(e);
+             }
          }
      }
  


[3/6] git commit: Compact hints after partial replay to clean out tombstones patch by jbellis; reviewed by ayeschenko for CASSANDRA-6666

Posted by jb...@apache.org.
Compact hints after partial replay to clean out tombstones
patch by jbellis; reviewed by ayeschenko for CASSANDRA-6666


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/ab5372f0
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/ab5372f0
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/ab5372f0

Branch: refs/heads/trunk
Commit: ab5372f0f3b3650556242a21a9d463b4f1e93efd
Parents: beefd0b
Author: Jonathan Ellis <jb...@apache.org>
Authored: Fri Feb 7 10:30:20 2014 -0600
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Fri Feb 7 10:30:20 2014 -0600

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 .../cassandra/db/HintedHandOffManager.java      | 26 ++++++++++++--------
 2 files changed, 17 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/ab5372f0/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 5511e01..82783f8 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -2,6 +2,7 @@
  * Fix upgradesstables NPE for non-CF-based indexes (CASSANDRA-6645)
  * Fix partition and range deletes not triggering flush (CASSANDRA-6655)
  * Fix mean cells and mean row size per sstable calculations (CASSANDRA-6667)
+ * Compact hints after partial replay to clean out tombstones (CASSANDRA-6666)
 
 
 1.2.15

http://git-wip-us.apache.org/repos/asf/cassandra/blob/ab5372f0/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 ede49e4..b1ccbc3 100644
--- a/src/java/org/apache/cassandra/db/HintedHandOffManager.java
+++ b/src/java/org/apache/cassandra/db/HintedHandOffManager.java
@@ -309,6 +309,7 @@ public class HintedHandOffManager implements HintedHandOffManagerMBean
                            / (StorageService.instance.getTokenMetadata().getAllEndpoints().size() - 1);
         RateLimiter rateLimiter = RateLimiter.create(throttleInKB == 0 ? Double.MAX_VALUE : throttleInKB * 1024);
 
+        boolean finished = false;
         delivery:
         while (true)
         {
@@ -323,13 +324,17 @@ public class HintedHandOffManager implements HintedHandOffManagerMBean
                                                                      (int) (System.currentTimeMillis() / 1000));
 
             if (pagingFinished(hintsPage, startColumn))
+            {
+                logger.info("Finished hinted handoff of {} rows to endpoint {}", rowsReplayed, endpoint);
+                finished = true;
                 break;
+            }
 
             // check if node is still alive and we should continue delivery process
             if (!FailureDetector.instance.isAlive(endpoint))
             {
                 logger.info("Endpoint {} died during hint delivery; aborting ({} delivered)", endpoint, rowsReplayed);
-                return;
+                break;
             }
 
             List<WriteResponseHandler> responseHandlers = Lists.newArrayList();
@@ -420,20 +425,21 @@ public class HintedHandOffManager implements HintedHandOffManagerMBean
                 catch (WriteTimeoutException e)
                 {
                     logger.info("Timed out replaying hints to {}; aborting ({} delivered)", endpoint, rowsReplayed);
-                    return;
+                    break delivery;
                 }
             }
         }
 
-        logger.info("Finished hinted handoff of {} rows to endpoint {}", rowsReplayed, endpoint);
-
-        try
+        if (finished || rowsReplayed.get() >= DatabaseDescriptor.getTombstoneDebugThreshold())
         {
-            compact().get();
-        }
-        catch (Exception e)
-        {
-            throw new RuntimeException(e);
+            try
+            {
+                compact().get();
+            }
+            catch (Exception e)
+            {
+                throw new RuntimeException(e);
+            }
         }
     }
 


[6/6] git commit: Merge branch 'cassandra-2.0' into trunk

Posted by jb...@apache.org.
Merge branch 'cassandra-2.0' into trunk


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/65e09fa5
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/65e09fa5
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/65e09fa5

Branch: refs/heads/trunk
Commit: 65e09fa5ba071f6e72987eeeea4967b2470c9337
Parents: ef6d42c fe57142
Author: Jonathan Ellis <jb...@apache.org>
Authored: Fri Feb 7 10:30:56 2014 -0600
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Fri Feb 7 10:30:56 2014 -0600

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 .../cassandra/db/HintedHandOffManager.java      | 26 ++++++++++++--------
 2 files changed, 17 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/65e09fa5/CHANGES.txt
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cassandra/blob/65e09fa5/src/java/org/apache/cassandra/db/HintedHandOffManager.java
----------------------------------------------------------------------


[2/6] git commit: Compact hints after partial replay to clean out tombstones patch by jbellis; reviewed by ayeschenko for CASSANDRA-6666

Posted by jb...@apache.org.
Compact hints after partial replay to clean out tombstones
patch by jbellis; reviewed by ayeschenko for CASSANDRA-6666


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/ab5372f0
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/ab5372f0
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/ab5372f0

Branch: refs/heads/cassandra-2.0
Commit: ab5372f0f3b3650556242a21a9d463b4f1e93efd
Parents: beefd0b
Author: Jonathan Ellis <jb...@apache.org>
Authored: Fri Feb 7 10:30:20 2014 -0600
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Fri Feb 7 10:30:20 2014 -0600

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 .../cassandra/db/HintedHandOffManager.java      | 26 ++++++++++++--------
 2 files changed, 17 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/ab5372f0/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 5511e01..82783f8 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -2,6 +2,7 @@
  * Fix upgradesstables NPE for non-CF-based indexes (CASSANDRA-6645)
  * Fix partition and range deletes not triggering flush (CASSANDRA-6655)
  * Fix mean cells and mean row size per sstable calculations (CASSANDRA-6667)
+ * Compact hints after partial replay to clean out tombstones (CASSANDRA-6666)
 
 
 1.2.15

http://git-wip-us.apache.org/repos/asf/cassandra/blob/ab5372f0/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 ede49e4..b1ccbc3 100644
--- a/src/java/org/apache/cassandra/db/HintedHandOffManager.java
+++ b/src/java/org/apache/cassandra/db/HintedHandOffManager.java
@@ -309,6 +309,7 @@ public class HintedHandOffManager implements HintedHandOffManagerMBean
                            / (StorageService.instance.getTokenMetadata().getAllEndpoints().size() - 1);
         RateLimiter rateLimiter = RateLimiter.create(throttleInKB == 0 ? Double.MAX_VALUE : throttleInKB * 1024);
 
+        boolean finished = false;
         delivery:
         while (true)
         {
@@ -323,13 +324,17 @@ public class HintedHandOffManager implements HintedHandOffManagerMBean
                                                                      (int) (System.currentTimeMillis() / 1000));
 
             if (pagingFinished(hintsPage, startColumn))
+            {
+                logger.info("Finished hinted handoff of {} rows to endpoint {}", rowsReplayed, endpoint);
+                finished = true;
                 break;
+            }
 
             // check if node is still alive and we should continue delivery process
             if (!FailureDetector.instance.isAlive(endpoint))
             {
                 logger.info("Endpoint {} died during hint delivery; aborting ({} delivered)", endpoint, rowsReplayed);
-                return;
+                break;
             }
 
             List<WriteResponseHandler> responseHandlers = Lists.newArrayList();
@@ -420,20 +425,21 @@ public class HintedHandOffManager implements HintedHandOffManagerMBean
                 catch (WriteTimeoutException e)
                 {
                     logger.info("Timed out replaying hints to {}; aborting ({} delivered)", endpoint, rowsReplayed);
-                    return;
+                    break delivery;
                 }
             }
         }
 
-        logger.info("Finished hinted handoff of {} rows to endpoint {}", rowsReplayed, endpoint);
-
-        try
+        if (finished || rowsReplayed.get() >= DatabaseDescriptor.getTombstoneDebugThreshold())
         {
-            compact().get();
-        }
-        catch (Exception e)
-        {
-            throw new RuntimeException(e);
+            try
+            {
+                compact().get();
+            }
+            catch (Exception e)
+            {
+                throw new RuntimeException(e);
+            }
         }
     }