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 2012/10/06 06:09:30 UTC

git commit: handle empty flushes of batchlog memtable patch by jbellis; tested by Aleksey Yeschenko for CASSANDRA-4667

Updated Branches:
  refs/heads/trunk 6b83663ca -> 801d7d3f5


handle empty flushes of batchlog memtable
patch by jbellis; tested by Aleksey Yeschenko for CASSANDRA-4667


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

Branch: refs/heads/trunk
Commit: 801d7d3f5c5ce31e1335d2633e82111faa512716
Parents: 6b83663
Author: Jonathan Ellis <jb...@apache.org>
Authored: Fri Oct 5 23:08:02 2012 -0500
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Fri Oct 5 23:08:56 2012 -0500

----------------------------------------------------------------------
 .../org/apache/cassandra/db/ColumnFamilyStore.java |    3 +-
 src/java/org/apache/cassandra/db/DataTracker.java  |   21 ++++++++++----
 src/java/org/apache/cassandra/db/Memtable.java     |   16 +++++++++--
 3 files changed, 30 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/801d7d3f/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
index b539228..8f1b21c 100644
--- a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
+++ b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
@@ -972,7 +972,8 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean
     void replaceFlushed(Memtable memtable, SSTableReader sstable)
     {
         data.replaceFlushed(memtable, sstable);
-        CompactionManager.instance.submitBackground(this);
+        if (sstable != null)
+            CompactionManager.instance.submitBackground(this);
     }
 
     public boolean isValid()

http://git-wip-us.apache.org/repos/asf/cassandra/blob/801d7d3f/src/java/org/apache/cassandra/db/DataTracker.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/DataTracker.java b/src/java/org/apache/cassandra/db/DataTracker.java
index 1e7b1bf..fd11f6c 100644
--- a/src/java/org/apache/cassandra/db/DataTracker.java
+++ b/src/java/org/apache/cassandra/db/DataTracker.java
@@ -123,13 +123,17 @@ public class DataTracker
 
     public void replaceFlushed(Memtable memtable, SSTableReader sstable)
     {
+        // sstable may be null if we flushed batchlog and nothing needed to be retained
+
         if (!cfstore.isValid())
         {
             View currentView, newView;
             do
             {
                 currentView = view.get();
-                newView = currentView.replaceFlushed(memtable, sstable).replace(Arrays.asList(sstable), Collections.<SSTableReader>emptyList());
+                newView = currentView.replaceFlushed(memtable, sstable);
+                if (sstable != null)
+                    newView = newView.replace(Arrays.asList(sstable), Collections.<SSTableReader>emptyList());
             }
             while (!view.compareAndSet(currentView, newView));
             return;
@@ -143,10 +147,12 @@ public class DataTracker
         }
         while (!view.compareAndSet(currentView, newView));
 
-        addNewSSTablesSize(Arrays.asList(sstable));
-
-        notifyAdded(sstable);
-        incrementallyBackup(sstable);
+        if (sstable != null)
+        {
+            addNewSSTablesSize(Arrays.asList(sstable));
+            notifyAdded(sstable);
+            incrementallyBackup(sstable);
+        }
     }
 
     public void incrementallyBackup(final SSTableReader sstable)
@@ -504,7 +510,9 @@ public class DataTracker
         public View replaceFlushed(Memtable flushedMemtable, SSTableReader newSSTable)
         {
             Set<Memtable> newPending = ImmutableSet.copyOf(Sets.difference(memtablesPendingFlush, Collections.singleton(flushedMemtable)));
-            List<SSTableReader> newSSTables = newSSTables(newSSTable);
+            List<SSTableReader> newSSTables = newSSTable == null
+                                            ? Collections.<SSTableReader>emptyList()
+                                            : newSSTables(newSSTable);
             SSTableIntervalTree intervalTree = buildIntervalTree(newSSTables);
             return new View(memtable, newPending, Collections.unmodifiableList(newSSTables), compacting, intervalTree);
         }
@@ -530,6 +538,7 @@ public class DataTracker
 
         private List<SSTableReader> newSSTables(SSTableReader newSSTable)
         {
+            assert newSSTable != null;
             // not performance-sensitive, don't obsess over doing a selection merge here
             return newSSTables(Collections.<SSTableReader>emptyList(), Collections.singletonList(newSSTable));
         }

http://git-wip-us.apache.org/repos/asf/cassandra/blob/801d7d3f/src/java/org/apache/cassandra/db/Memtable.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/Memtable.java b/src/java/org/apache/cassandra/db/Memtable.java
index 4631690..053d47f 100644
--- a/src/java/org/apache/cassandra/db/Memtable.java
+++ b/src/java/org/apache/cassandra/db/Memtable.java
@@ -457,9 +457,19 @@ public class Memtable
                     writer.append((DecoratedKey)entry.getKey(), cf);
                 }
 
-                ssTable = writer.closeAndOpenReader();
-                logger.info(String.format("Completed flushing %s (%d bytes) for commitlog position %s",
-                            ssTable.getFilename(), new File(ssTable.getFilename()).length(), context.get()));
+                if (writer.getFilePointer() > 0)
+                {
+                    ssTable = writer.closeAndOpenReader();
+                    logger.info(String.format("Completed flushing %s (%d bytes) for commitlog position %s",
+                                              ssTable.getFilename(), new File(ssTable.getFilename()).length(), context.get()));
+                }
+                else
+                {
+                    writer.abort();
+                    ssTable = null;
+                    logger.info("Completed flushing; nothing needed to be retained.  Commitlog position was {}",
+                                context.get());
+                }
                 return ssTable;
             }
             catch (Throwable e)