You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by al...@apache.org on 2015/02/10 01:57:26 UTC
cassandra git commit: Re-enable CASSANDRA-7688
Repository: cassandra
Updated Branches:
refs/heads/cassandra-2.1 fd6f9c6f9 -> 97da271b2
Re-enable CASSANDRA-7688
- properly handle empty intervalTree in DT.View#sstablesInBounds
- switch gc gs to 0 for system.size_estimates table
- add a -D param to alter the estimates update interval
- log the duration of the estimation process
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/97da271b
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/97da271b
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/97da271b
Branch: refs/heads/cassandra-2.1
Commit: 97da271b29941596da7b401c2ed7352de111dc10
Parents: fd6f9c6
Author: Aleksey Yeschenko <al...@apache.org>
Authored: Tue Feb 10 03:54:22 2015 +0300
Committer: Aleksey Yeschenko <al...@apache.org>
Committed: Tue Feb 10 03:54:22 2015 +0300
----------------------------------------------------------------------
CHANGES.txt | 4 ++++
.../org/apache/cassandra/config/CFMetaData.java | 3 ++-
.../org/apache/cassandra/db/DataTracker.java | 2 ++
.../cassandra/db/SizeEstimatesRecorder.java | 20 +++++++++++++++-----
.../cassandra/service/CassandraDaemon.java | 5 ++++-
5 files changed, 27 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/97da271b/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index d44d70d..c5cff48 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,3 +1,7 @@
+2.1.4
+ * Write partition size estimates into a system table (CASSANDRA-7688)
+
+
2.1.3
* Upgrade libthrift to 0.9.2 (CASSANDRA-8685)
* Don't use the shared ref in sstableloader (CASSANDRA-8704)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/97da271b/src/java/org/apache/cassandra/config/CFMetaData.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/config/CFMetaData.java b/src/java/org/apache/cassandra/config/CFMetaData.java
index d55d1c0..8bb5ccf 100644
--- a/src/java/org/apache/cassandra/config/CFMetaData.java
+++ b/src/java/org/apache/cassandra/config/CFMetaData.java
@@ -298,7 +298,8 @@ public final class CFMetaData
+ "mean_partition_size bigint,"
+ "partitions_count bigint,"
+ "PRIMARY KEY ((keyspace_name), table_name, range_start, range_end)"
- + ") WITH COMMENT='per-table primary range size estimates'");
+ + ") WITH COMMENT='per-table primary range size estimates' "
+ + "AND gc_grace_seconds=0");
public static class SpeculativeRetry
http://git-wip-us.apache.org/repos/asf/cassandra/blob/97da271b/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 f672cf2..5ec06bc 100644
--- a/src/java/org/apache/cassandra/db/DataTracker.java
+++ b/src/java/org/apache/cassandra/db/DataTracker.java
@@ -758,6 +758,8 @@ public class DataTracker
public List<SSTableReader> sstablesInBounds(AbstractBounds<RowPosition> rowBounds)
{
+ if (intervalTree.isEmpty())
+ return Collections.emptyList();
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/97da271b/src/java/org/apache/cassandra/db/SizeEstimatesRecorder.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/SizeEstimatesRecorder.java b/src/java/org/apache/cassandra/db/SizeEstimatesRecorder.java
index b7e5715..1472c11 100644
--- a/src/java/org/apache/cassandra/db/SizeEstimatesRecorder.java
+++ b/src/java/org/apache/cassandra/db/SizeEstimatesRecorder.java
@@ -18,6 +18,7 @@
package org.apache.cassandra.db;
import java.util.*;
+import java.util.concurrent.TimeUnit;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -61,8 +62,18 @@ public class SizeEstimatesRecorder extends MigrationListener implements Runnable
Collection<Range<Token>> localRanges = StorageService.instance.getTokenMetadata().getPrimaryRangesFor(localTokens);
for (Keyspace keyspace : Keyspace.nonSystem())
+ {
for (ColumnFamilyStore table : keyspace.getColumnFamilyStores())
+ {
+ long start = System.nanoTime();
recordSizeEstimates(table, localRanges);
+ long passed = System.nanoTime() - start;
+ logger.debug("Spent {} milliseconds on estimating {}.{} size",
+ TimeUnit.NANOSECONDS.toMillis(passed),
+ table.metadata.ksName,
+ table.metadata.cfName);
+ }
+ }
}
private void recordSizeEstimates(ColumnFamilyStore table, Collection<Range<Token>> localRanges)
@@ -72,20 +83,19 @@ public class SizeEstimatesRecorder extends MigrationListener implements Runnable
for (Range<Token> range : localRanges)
{
// filter sstables that have partitions in this range.
- List<SSTableReader> sstables = null;
Refs<SSTableReader> refs = null;
while (refs == null)
{
- sstables = table.viewFilter(range.toRowBounds()).apply(table.getDataTracker().getView());
- refs = Refs.tryRef(sstables);
+ ColumnFamilyStore.ViewFragment view = table.select(table.viewFilter(range.toRowBounds()));
+ refs = Refs.tryRef(view.sstables);
}
long partitionsCount, meanPartitionSize;
try
{
// calculate the estimates.
- partitionsCount = estimatePartitionsCount(sstables, range);
- meanPartitionSize = estimateMeanPartitionSize(sstables);
+ partitionsCount = estimatePartitionsCount(refs, range);
+ meanPartitionSize = estimateMeanPartitionSize(refs);
}
finally
{
http://git-wip-us.apache.org/repos/asf/cassandra/blob/97da271b/src/java/org/apache/cassandra/service/CassandraDaemon.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/service/CassandraDaemon.java b/src/java/org/apache/cassandra/service/CassandraDaemon.java
index 50c8295..67d737e 100644
--- a/src/java/org/apache/cassandra/service/CassandraDaemon.java
+++ b/src/java/org/apache/cassandra/service/CassandraDaemon.java
@@ -366,7 +366,10 @@ public class CassandraDaemon
waitForGossipToSettle();
// schedule periodic dumps of table size estimates into SystemKeyspace.SIZE_ESTIMATES_CF
- // ScheduledExecutors.optionalTasks.scheduleWithFixedDelay(SizeEstimatesRecorder.instance, 30, 5 * 60, TimeUnit.SECONDS);
+ // set cassandra.size_recorder_interval to 0 to disable
+ int sizeRecorderInterval = Integer.getInteger("cassandra.size_recorder_interval", 5 * 60);
+ if (sizeRecorderInterval > 0)
+ ScheduledExecutors.optionalTasks.scheduleWithFixedDelay(SizeEstimatesRecorder.instance, 30, sizeRecorderInterval, TimeUnit.SECONDS);
// Thrift
InetAddress rpcAddr = DatabaseDescriptor.getRpcAddress();