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/19 17:01:34 UTC
[10/12] git commit: merge from 2.0
merge from 2.0
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/8e101bef
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/8e101bef
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/8e101bef
Branch: refs/heads/trunk
Commit: 8e101bef056eb00173f51ec7fb6e3b6b251d105d
Parents: 5afd2bd 84103bb
Author: Jonathan Ellis <jb...@apache.org>
Authored: Wed Feb 19 10:01:10 2014 -0600
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Wed Feb 19 10:01:10 2014 -0600
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../apache/cassandra/db/ColumnFamilyStore.java | 30 +++++++-------------
.../org/apache/cassandra/db/DataTracker.java | 21 ++++++++------
.../apache/cassandra/db/marshal/DateType.java | 2 +-
4 files changed, 25 insertions(+), 29 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/8e101bef/CHANGES.txt
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/8e101bef/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/db/ColumnFamilyStore.java
index ca4ff0a,f25f934..76160ea
--- a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
+++ b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
@@@ -1708,43 -1448,7 +1708,33 @@@ public class ColumnFamilyStore implemen
return markCurrentViewReferenced().sstables;
}
+ public Set<SSTableReader> getUnrepairedSSTables()
+ {
+ Set<SSTableReader> unRepairedSSTables = new HashSet<>(getSSTables());
+ Iterator<SSTableReader> sstableIterator = unRepairedSSTables.iterator();
+ while(sstableIterator.hasNext())
+ {
+ SSTableReader sstable = sstableIterator.next();
+ if (sstable.isRepaired())
+ sstableIterator.remove();
+ }
+ return unRepairedSSTables;
+ }
+
+ public Set<SSTableReader> getRepairedSSTables()
+ {
+ Set<SSTableReader> repairedSSTables = new HashSet<>(getSSTables());
+ Iterator<SSTableReader> sstableIterator = repairedSSTables.iterator();
+ while(sstableIterator.hasNext())
+ {
+ SSTableReader sstable = sstableIterator.next();
+ if (!sstable.isRepaired())
+ sstableIterator.remove();
+ }
+ return repairedSSTables;
+ }
+
- abstract class AbstractViewSSTableFinder
- {
- abstract List<SSTableReader> findSSTables(DataTracker.View view);
- protected List<SSTableReader> sstablesForRowBounds(AbstractBounds<RowPosition> rowBounds, DataTracker.View view)
- {
- RowPosition stopInTree = rowBounds.right.isMinimum() ? view.intervalTree.max() : rowBounds.right;
- return view.intervalTree.search(Interval.<RowPosition, SSTableReader>create(rowBounds.left, stopInTree));
- }
- }
-
- private ViewFragment markReferenced(AbstractViewSSTableFinder finder)
+ private ViewFragment markReferenced(Function<DataTracker.View, List<SSTableReader>> filter)
{
List<SSTableReader> sstables;
DataTracker.View view;
http://git-wip-us.apache.org/repos/asf/cassandra/blob/8e101bef/src/java/org/apache/cassandra/db/DataTracker.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/db/DataTracker.java
index e51f380,c1ae00f..30bd360
--- a/src/java/org/apache/cassandra/db/DataTracker.java
+++ b/src/java/org/apache/cassandra/db/DataTracker.java
@@@ -32,12 -29,14 +29,14 @@@ import org.slf4j.LoggerFactory
import org.apache.cassandra.config.DatabaseDescriptor;
import org.apache.cassandra.db.compaction.OperationType;
+ import org.apache.cassandra.dht.AbstractBounds;
-import org.apache.cassandra.io.sstable.Descriptor;
import org.apache.cassandra.io.sstable.SSTableReader;
import org.apache.cassandra.io.util.FileUtils;
import org.apache.cassandra.metrics.StorageMetrics;
import org.apache.cassandra.notifications.*;
import org.apache.cassandra.utils.Interval;
import org.apache.cassandra.utils.IntervalTree;
++import org.apache.cassandra.utils.concurrent.OpOrder;
public class DataTracker
{
@@@ -317,47 -322,11 +316,47 @@@
/** (Re)initializes the tracker, purging all references. */
void init()
{
- view.set(new View(new Memtable(cfstore),
- Collections.<Memtable>emptySet(),
- Collections.<SSTableReader>emptySet(),
- Collections.<SSTableReader>emptySet(),
- SSTableIntervalTree.empty()));
+ view.set(new View(
- ImmutableList.of(new Memtable(cfstore)),
- ImmutableList.<Memtable>of(),
- Collections.<SSTableReader>emptySet(),
- Collections.<SSTableReader>emptySet(),
- SSTableIntervalTree.empty()));
++ ImmutableList.of(new Memtable(cfstore)),
++ ImmutableList.<Memtable>of(),
++ Collections.<SSTableReader>emptySet(),
++ Collections.<SSTableReader>emptySet(),
++ SSTableIntervalTree.empty()));
+ }
+
+ /**
+ * A special kind of replacement for SSTableReaders that were cloned with a new index summary sampling level (see
+ * SSTableReader.cloneWithNewSummarySamplingLevel and CASSANDRA-5519). This does not mark the old reader
+ * as compacted.
+ * @param oldSSTables replaced readers
+ * @param newSSTables replacement readers
+ */
+ public void replaceReaders(Collection<SSTableReader> oldSSTables, Collection<SSTableReader> newSSTables)
+ {
+ // data component will be unchanged but the index summary will be a different size
+ // (since we save that to make restart fast)
+ long sizeIncrease = 0;
+ for (SSTableReader sstable : oldSSTables)
+ sizeIncrease -= sstable.bytesOnDisk();
+ for (SSTableReader sstable : newSSTables)
+ sizeIncrease += sstable.bytesOnDisk();
+
+ View currentView, newView;
+ do
+ {
+ currentView = view.get();
+ newView = currentView.replace(oldSSTables, newSSTables);
+ }
+ while (!view.compareAndSet(currentView, newView));
+
+ StorageMetrics.load.inc(sizeIncrease);
+ cfstore.metric.liveDiskSpaceUsed.inc(sizeIncrease);
+
+ for (SSTableReader sstable : newSSTables)
+ sstable.setTrackedBy(this);
+
+ for (SSTableReader sstable : oldSSTables)
+ sstable.releaseReference();
}
private void replace(Collection<SSTableReader> oldSSTables, Iterable<SSTableReader> replacements)
@@@ -690,7 -593,13 +689,13 @@@
@Override
public String toString()
{
- return String.format("View(pending_count=%d, sstables=%s, compacting=%s)", memtablesPendingFlush.size(), sstables, compacting);
+ return String.format("View(pending_count=%d, sstables=%s, compacting=%s)", liveMemtables.size() + flushingMemtables.size() - 1, sstables, compacting);
}
+
+ public List<SSTableReader> sstablesInBounds(AbstractBounds<RowPosition> rowBounds)
+ {
- RowPosition stopInTree = rowBounds.right.isMinimum(memtable.cfs.partitioner) ? intervalTree.max() : rowBounds.right;
++ RowPosition stopInTree = rowBounds.right.isMinimum(liveMemtables.get(0).cfs.partitioner) ? intervalTree.max() : rowBounds.right;
+ return intervalTree.search(Interval.<RowPosition, SSTableReader>create(rowBounds.left, stopInTree));
+ }
}
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/8e101bef/src/java/org/apache/cassandra/db/marshal/DateType.java
----------------------------------------------------------------------