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)