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/12/01 02:04:17 UTC
[3/3] make index_interval configurable per columnfamily patch by
Radim Kolar; reviewed by jbellis for CASSANDRA-3961
http://git-wip-us.apache.org/repos/asf/cassandra/blob/6a5c9ed8/interface/thrift/gen-java/org/apache/cassandra/thrift/CfDef.java
----------------------------------------------------------------------
diff --git a/interface/thrift/gen-java/org/apache/cassandra/thrift/CfDef.java b/interface/thrift/gen-java/org/apache/cassandra/thrift/CfDef.java
index 7e4f56e..e2c32cc 100644
--- a/interface/thrift/gen-java/org/apache/cassandra/thrift/CfDef.java
+++ b/interface/thrift/gen-java/org/apache/cassandra/thrift/CfDef.java
@@ -69,6 +69,7 @@ public class CfDef implements org.apache.thrift.TBase<CfDef, CfDef._Fields>, jav
private static final org.apache.thrift.protocol.TField DCLOCAL_READ_REPAIR_CHANCE_FIELD_DESC = new org.apache.thrift.protocol.TField("dclocal_read_repair_chance", org.apache.thrift.protocol.TType.DOUBLE, (short)37);
private static final org.apache.thrift.protocol.TField MEMTABLE_FLUSH_PERIOD_IN_MS_FIELD_DESC = new org.apache.thrift.protocol.TField("memtable_flush_period_in_ms", org.apache.thrift.protocol.TType.I32, (short)38);
private static final org.apache.thrift.protocol.TField DEFAULT_TIME_TO_LIVE_FIELD_DESC = new org.apache.thrift.protocol.TField("default_time_to_live", org.apache.thrift.protocol.TType.I32, (short)39);
+ private static final org.apache.thrift.protocol.TField INDEX_INTERVAL_FIELD_DESC = new org.apache.thrift.protocol.TField("index_interval", org.apache.thrift.protocol.TType.I32, (short)40);
private static final org.apache.thrift.protocol.TField ROW_CACHE_SIZE_FIELD_DESC = new org.apache.thrift.protocol.TField("row_cache_size", org.apache.thrift.protocol.TType.DOUBLE, (short)9);
private static final org.apache.thrift.protocol.TField KEY_CACHE_SIZE_FIELD_DESC = new org.apache.thrift.protocol.TField("key_cache_size", org.apache.thrift.protocol.TType.DOUBLE, (short)11);
private static final org.apache.thrift.protocol.TField ROW_CACHE_SAVE_PERIOD_IN_SECONDS_FIELD_DESC = new org.apache.thrift.protocol.TField("row_cache_save_period_in_seconds", org.apache.thrift.protocol.TType.I32, (short)19);
@@ -104,6 +105,7 @@ public class CfDef implements org.apache.thrift.TBase<CfDef, CfDef._Fields>, jav
public double dclocal_read_repair_chance; // required
public int memtable_flush_period_in_ms; // required
public int default_time_to_live; // required
+ public int index_interval; // required
/**
* @deprecated
*/
@@ -171,6 +173,7 @@ public class CfDef implements org.apache.thrift.TBase<CfDef, CfDef._Fields>, jav
DCLOCAL_READ_REPAIR_CHANCE((short)37, "dclocal_read_repair_chance"),
MEMTABLE_FLUSH_PERIOD_IN_MS((short)38, "memtable_flush_period_in_ms"),
DEFAULT_TIME_TO_LIVE((short)39, "default_time_to_live"),
+ INDEX_INTERVAL((short)40, "index_interval"),
/**
* @deprecated
*/
@@ -273,6 +276,8 @@ public class CfDef implements org.apache.thrift.TBase<CfDef, CfDef._Fields>, jav
return MEMTABLE_FLUSH_PERIOD_IN_MS;
case 39: // DEFAULT_TIME_TO_LIVE
return DEFAULT_TIME_TO_LIVE;
+ case 40: // INDEX_INTERVAL
+ return INDEX_INTERVAL;
case 9: // ROW_CACHE_SIZE
return ROW_CACHE_SIZE;
case 11: // KEY_CACHE_SIZE
@@ -343,16 +348,17 @@ public class CfDef implements org.apache.thrift.TBase<CfDef, CfDef._Fields>, jav
private static final int __DCLOCAL_READ_REPAIR_CHANCE_ISSET_ID = 7;
private static final int __MEMTABLE_FLUSH_PERIOD_IN_MS_ISSET_ID = 8;
private static final int __DEFAULT_TIME_TO_LIVE_ISSET_ID = 9;
- private static final int __ROW_CACHE_SIZE_ISSET_ID = 10;
- private static final int __KEY_CACHE_SIZE_ISSET_ID = 11;
- private static final int __ROW_CACHE_SAVE_PERIOD_IN_SECONDS_ISSET_ID = 12;
- private static final int __KEY_CACHE_SAVE_PERIOD_IN_SECONDS_ISSET_ID = 13;
- private static final int __MEMTABLE_FLUSH_AFTER_MINS_ISSET_ID = 14;
- private static final int __MEMTABLE_THROUGHPUT_IN_MB_ISSET_ID = 15;
- private static final int __MEMTABLE_OPERATIONS_IN_MILLIONS_ISSET_ID = 16;
- private static final int __MERGE_SHARDS_CHANCE_ISSET_ID = 17;
- private static final int __ROW_CACHE_KEYS_TO_SAVE_ISSET_ID = 18;
- private BitSet __isset_bit_vector = new BitSet(19);
+ private static final int __INDEX_INTERVAL_ISSET_ID = 10;
+ private static final int __ROW_CACHE_SIZE_ISSET_ID = 11;
+ private static final int __KEY_CACHE_SIZE_ISSET_ID = 12;
+ private static final int __ROW_CACHE_SAVE_PERIOD_IN_SECONDS_ISSET_ID = 13;
+ private static final int __KEY_CACHE_SAVE_PERIOD_IN_SECONDS_ISSET_ID = 14;
+ private static final int __MEMTABLE_FLUSH_AFTER_MINS_ISSET_ID = 15;
+ private static final int __MEMTABLE_THROUGHPUT_IN_MB_ISSET_ID = 16;
+ private static final int __MEMTABLE_OPERATIONS_IN_MILLIONS_ISSET_ID = 17;
+ private static final int __MERGE_SHARDS_CHANCE_ISSET_ID = 18;
+ private static final int __ROW_CACHE_KEYS_TO_SAVE_ISSET_ID = 19;
+ private BitSet __isset_bit_vector = new BitSet(20);
public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
static {
@@ -410,6 +416,8 @@ public class CfDef implements org.apache.thrift.TBase<CfDef, CfDef._Fields>, jav
new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
tmpMap.put(_Fields.DEFAULT_TIME_TO_LIVE, new org.apache.thrift.meta_data.FieldMetaData("default_time_to_live", org.apache.thrift.TFieldRequirementType.OPTIONAL,
new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
+ tmpMap.put(_Fields.INDEX_INTERVAL, new org.apache.thrift.meta_data.FieldMetaData("index_interval", org.apache.thrift.TFieldRequirementType.OPTIONAL,
+ new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
tmpMap.put(_Fields.ROW_CACHE_SIZE, new org.apache.thrift.meta_data.FieldMetaData("row_cache_size", org.apache.thrift.TFieldRequirementType.OPTIONAL,
new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.DOUBLE)));
tmpMap.put(_Fields.KEY_CACHE_SIZE, new org.apache.thrift.meta_data.FieldMetaData("key_cache_size", org.apache.thrift.TFieldRequirementType.OPTIONAL,
@@ -541,6 +549,7 @@ public class CfDef implements org.apache.thrift.TBase<CfDef, CfDef._Fields>, jav
this.dclocal_read_repair_chance = other.dclocal_read_repair_chance;
this.memtable_flush_period_in_ms = other.memtable_flush_period_in_ms;
this.default_time_to_live = other.default_time_to_live;
+ this.index_interval = other.index_interval;
this.row_cache_size = other.row_cache_size;
this.key_cache_size = other.key_cache_size;
this.row_cache_save_period_in_seconds = other.row_cache_save_period_in_seconds;
@@ -598,6 +607,8 @@ public class CfDef implements org.apache.thrift.TBase<CfDef, CfDef._Fields>, jav
this.memtable_flush_period_in_ms = 0;
setDefault_time_to_liveIsSet(false);
this.default_time_to_live = 0;
+ setIndex_intervalIsSet(false);
+ this.index_interval = 0;
setRow_cache_sizeIsSet(false);
this.row_cache_size = 0.0;
setKey_cache_sizeIsSet(false);
@@ -1232,6 +1243,29 @@ public class CfDef implements org.apache.thrift.TBase<CfDef, CfDef._Fields>, jav
__isset_bit_vector.set(__DEFAULT_TIME_TO_LIVE_ISSET_ID, value);
}
+ public int getIndex_interval() {
+ return this.index_interval;
+ }
+
+ public CfDef setIndex_interval(int index_interval) {
+ this.index_interval = index_interval;
+ setIndex_intervalIsSet(true);
+ return this;
+ }
+
+ public void unsetIndex_interval() {
+ __isset_bit_vector.clear(__INDEX_INTERVAL_ISSET_ID);
+ }
+
+ /** Returns true if field index_interval is set (has been assigned a value) and false otherwise */
+ public boolean isSetIndex_interval() {
+ return __isset_bit_vector.get(__INDEX_INTERVAL_ISSET_ID);
+ }
+
+ public void setIndex_intervalIsSet(boolean value) {
+ __isset_bit_vector.set(__INDEX_INTERVAL_ISSET_ID, value);
+ }
+
/**
* @deprecated
*/
@@ -1717,6 +1751,14 @@ public class CfDef implements org.apache.thrift.TBase<CfDef, CfDef._Fields>, jav
}
break;
+ case INDEX_INTERVAL:
+ if (value == null) {
+ unsetIndex_interval();
+ } else {
+ setIndex_interval((Integer)value);
+ }
+ break;
+
case ROW_CACHE_SIZE:
if (value == null) {
unsetRow_cache_size();
@@ -1874,6 +1916,9 @@ public class CfDef implements org.apache.thrift.TBase<CfDef, CfDef._Fields>, jav
case DEFAULT_TIME_TO_LIVE:
return Integer.valueOf(getDefault_time_to_live());
+ case INDEX_INTERVAL:
+ return Integer.valueOf(getIndex_interval());
+
case ROW_CACHE_SIZE:
return Double.valueOf(getRow_cache_size());
@@ -1963,6 +2008,8 @@ public class CfDef implements org.apache.thrift.TBase<CfDef, CfDef._Fields>, jav
return isSetMemtable_flush_period_in_ms();
case DEFAULT_TIME_TO_LIVE:
return isSetDefault_time_to_live();
+ case INDEX_INTERVAL:
+ return isSetIndex_interval();
case ROW_CACHE_SIZE:
return isSetRow_cache_size();
case KEY_CACHE_SIZE:
@@ -2216,6 +2263,15 @@ public class CfDef implements org.apache.thrift.TBase<CfDef, CfDef._Fields>, jav
return false;
}
+ boolean this_present_index_interval = true && this.isSetIndex_interval();
+ boolean that_present_index_interval = true && that.isSetIndex_interval();
+ if (this_present_index_interval || that_present_index_interval) {
+ if (!(this_present_index_interval && that_present_index_interval))
+ return false;
+ if (this.index_interval != that.index_interval)
+ return false;
+ }
+
boolean this_present_row_cache_size = true && this.isSetRow_cache_size();
boolean that_present_row_cache_size = true && that.isSetRow_cache_size();
if (this_present_row_cache_size || that_present_row_cache_size) {
@@ -2433,6 +2489,11 @@ public class CfDef implements org.apache.thrift.TBase<CfDef, CfDef._Fields>, jav
if (present_default_time_to_live)
builder.append(default_time_to_live);
+ boolean present_index_interval = true && (isSetIndex_interval());
+ builder.append(present_index_interval);
+ if (present_index_interval)
+ builder.append(index_interval);
+
boolean present_row_cache_size = true && (isSetRow_cache_size());
builder.append(present_row_cache_size);
if (present_row_cache_size)
@@ -2734,6 +2795,16 @@ public class CfDef implements org.apache.thrift.TBase<CfDef, CfDef._Fields>, jav
return lastComparison;
}
}
+ lastComparison = Boolean.valueOf(isSetIndex_interval()).compareTo(typedOther.isSetIndex_interval());
+ if (lastComparison != 0) {
+ return lastComparison;
+ }
+ if (isSetIndex_interval()) {
+ lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.index_interval, typedOther.index_interval);
+ if (lastComparison != 0) {
+ return lastComparison;
+ }
+ }
lastComparison = Boolean.valueOf(isSetRow_cache_size()).compareTo(typedOther.isSetRow_cache_size());
if (lastComparison != 0) {
return lastComparison;
@@ -3064,6 +3135,14 @@ public class CfDef implements org.apache.thrift.TBase<CfDef, CfDef._Fields>, jav
org.apache.thrift.protocol.TProtocolUtil.skip(iprot, field.type);
}
break;
+ case 40: // INDEX_INTERVAL
+ if (field.type == org.apache.thrift.protocol.TType.I32) {
+ this.index_interval = iprot.readI32();
+ setIndex_intervalIsSet(true);
+ } else {
+ org.apache.thrift.protocol.TProtocolUtil.skip(iprot, field.type);
+ }
+ break;
case 9: // ROW_CACHE_SIZE
if (field.type == org.apache.thrift.protocol.TType.DOUBLE) {
this.row_cache_size = iprot.readDouble();
@@ -3377,6 +3456,11 @@ public class CfDef implements org.apache.thrift.TBase<CfDef, CfDef._Fields>, jav
oprot.writeI32(this.default_time_to_live);
oprot.writeFieldEnd();
}
+ if (isSetIndex_interval()) {
+ oprot.writeFieldBegin(INDEX_INTERVAL_FIELD_DESC);
+ oprot.writeI32(this.index_interval);
+ oprot.writeFieldEnd();
+ }
oprot.writeFieldStop();
oprot.writeStructEnd();
}
@@ -3581,6 +3665,12 @@ public class CfDef implements org.apache.thrift.TBase<CfDef, CfDef._Fields>, jav
sb.append(this.default_time_to_live);
first = false;
}
+ if (isSetIndex_interval()) {
+ if (!first) sb.append(", ");
+ sb.append("index_interval:");
+ sb.append(this.index_interval);
+ first = false;
+ }
if (isSetRow_cache_size()) {
if (!first) sb.append(", ");
sb.append("row_cache_size:");
http://git-wip-us.apache.org/repos/asf/cassandra/blob/6a5c9ed8/interface/thrift/gen-java/org/apache/cassandra/thrift/Constants.java
----------------------------------------------------------------------
diff --git a/interface/thrift/gen-java/org/apache/cassandra/thrift/Constants.java b/interface/thrift/gen-java/org/apache/cassandra/thrift/Constants.java
index 8721462..d8ab801 100644
--- a/interface/thrift/gen-java/org/apache/cassandra/thrift/Constants.java
+++ b/interface/thrift/gen-java/org/apache/cassandra/thrift/Constants.java
@@ -44,6 +44,6 @@ import org.slf4j.LoggerFactory;
public class Constants {
- public static final String VERSION = "19.35.0";
+ public static final String VERSION = "19.36.0";
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/6a5c9ed8/interface/thrift/gen-java/org/apache/cassandra/thrift/IndexClause.java
----------------------------------------------------------------------
diff --git a/interface/thrift/gen-java/org/apache/cassandra/thrift/IndexClause.java b/interface/thrift/gen-java/org/apache/cassandra/thrift/IndexClause.java
index 1fcebf0..76c2606 100644
--- a/interface/thrift/gen-java/org/apache/cassandra/thrift/IndexClause.java
+++ b/interface/thrift/gen-java/org/apache/cassandra/thrift/IndexClause.java
@@ -43,7 +43,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
- * @Deprecated: use a KeyRange with row_filter in get_range_slices instead
+ * @deprecated use a KeyRange with row_filter in get_range_slices instead
*/
public class IndexClause implements org.apache.thrift.TBase<IndexClause, IndexClause._Fields>, java.io.Serializable, Cloneable {
private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("IndexClause");
http://git-wip-us.apache.org/repos/asf/cassandra/blob/6a5c9ed8/interface/thrift/gen-java/org/apache/cassandra/thrift/KsDef.java
----------------------------------------------------------------------
diff --git a/interface/thrift/gen-java/org/apache/cassandra/thrift/KsDef.java b/interface/thrift/gen-java/org/apache/cassandra/thrift/KsDef.java
index 8623cec..1004a6d 100644
--- a/interface/thrift/gen-java/org/apache/cassandra/thrift/KsDef.java
+++ b/interface/thrift/gen-java/org/apache/cassandra/thrift/KsDef.java
@@ -56,7 +56,7 @@ public class KsDef implements org.apache.thrift.TBase<KsDef, KsDef._Fields>, jav
public String strategy_class; // required
public Map<String,String> strategy_options; // required
/**
- * @deprecated, ignored
+ * @deprecated ignored
*/
public int replication_factor; // required
public List<CfDef> cf_defs; // required
@@ -68,7 +68,7 @@ public class KsDef implements org.apache.thrift.TBase<KsDef, KsDef._Fields>, jav
STRATEGY_CLASS((short)2, "strategy_class"),
STRATEGY_OPTIONS((short)3, "strategy_options"),
/**
- * @deprecated, ignored
+ * @deprecated ignored
*/
REPLICATION_FACTOR((short)4, "replication_factor"),
CF_DEFS((short)5, "cf_defs"),
@@ -319,14 +319,14 @@ public class KsDef implements org.apache.thrift.TBase<KsDef, KsDef._Fields>, jav
}
/**
- * @deprecated, ignored
+ * @deprecated ignored
*/
public int getReplication_factor() {
return this.replication_factor;
}
/**
- * @deprecated, ignored
+ * @deprecated ignored
*/
public KsDef setReplication_factor(int replication_factor) {
this.replication_factor = replication_factor;
http://git-wip-us.apache.org/repos/asf/cassandra/blob/6a5c9ed8/pylib/cqlshlib/cql3handling.py
----------------------------------------------------------------------
diff --git a/pylib/cqlshlib/cql3handling.py b/pylib/cqlshlib/cql3handling.py
index cbb2700..2cb8b10 100644
--- a/pylib/cqlshlib/cql3handling.py
+++ b/pylib/cqlshlib/cql3handling.py
@@ -64,6 +64,7 @@ class Cql3ParsingRuleSet(CqlParsingRuleSet):
('default_validation', 'default_validation_class'),
('replicate_on_write', None),
('compaction_strategy_class', 'compaction_strategy'),
+ ('index_interval', None),
)
old_columnfamily_layout_options = (
@@ -76,6 +77,7 @@ class Cql3ParsingRuleSet(CqlParsingRuleSet):
('gc_grace_seconds', None),
('replicate_on_write', None),
('compaction_strategy_class', None),
+ ('index_interval', None),
)
new_columnfamily_layout_options = (
@@ -88,6 +90,7 @@ class Cql3ParsingRuleSet(CqlParsingRuleSet):
('replicate_on_write', None),
('default_read_consistency', None),
('default_write_consistency', None),
+ ('index_interval', None),
)
old_columnfamily_layout_map_options = (
@@ -490,7 +493,7 @@ def cf_new_prop_val_completer(ctxt, cass):
if this_opt == 'replicate_on_write':
return ["'yes'", "'no'"]
if this_opt in ('min_compaction_threshold', 'max_compaction_threshold',
- 'gc_grace_seconds'):
+ 'gc_grace_seconds', 'index_interval'):
return [Hint('<integer>')]
if this_opt == 'default_read_consistency':
return [cl for cl in CqlRuleSet.consistency_levels if cl != 'ANY']
http://git-wip-us.apache.org/repos/asf/cassandra/blob/6a5c9ed8/src/java/org/apache/cassandra/cli/CliClient.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cli/CliClient.java b/src/java/org/apache/cassandra/cli/CliClient.java
index ccda8b8..90f4784 100644
--- a/src/java/org/apache/cassandra/cli/CliClient.java
+++ b/src/java/org/apache/cassandra/cli/CliClient.java
@@ -137,6 +137,7 @@ public class CliClient
COMPACTION_STRATEGY_OPTIONS,
COMPRESSION_OPTIONS,
BLOOM_FILTER_FP_CHANCE,
+ INDEX_INTERVAL,
MEMTABLE_FLUSH_PERIOD_IN_MS,
CACHING,
DEFAULT_TIME_TO_LIVE
@@ -1334,6 +1335,9 @@ public class CliClient
case DEFAULT_TIME_TO_LIVE:
cfDef.setDefault_time_to_live(Integer.parseInt(mValue));
break;
+ case INDEX_INTERVAL:
+ cfDef.setIndex_interval(Integer.parseInt(mValue));
+ break;
default:
//must match one of the above or we'd throw an exception at the valueOf statement above.
assert(false);
@@ -1861,6 +1865,8 @@ public class CliClient
writeAttrRaw(output, false, "compression_options", compOptions.toString());
}
+ if (cfDef.isSetIndex_interval())
+ writeAttr(output, false, "index_interval", cfDef.index_interval);
output.append(";");
output.append(NEWLINE);
@@ -2156,6 +2162,7 @@ public class CliClient
sessionState.out.printf(" Caching: %s%n", cf_def.caching);
sessionState.out.printf(" Default time to live: %s%n", cf_def.default_time_to_live);
sessionState.out.printf(" Bloom Filter FP chance: %s%n", cf_def.isSetBloom_filter_fp_chance() ? cf_def.bloom_filter_fp_chance : "default");
+ sessionState.out.printf(" Index interval: %s%n", cf_def.isSetIndex_interval() ? cf_def.index_interval : "default");
// if we have connection to the cfMBean established
if (cfMBean != null)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/6a5c9ed8/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 3cedf13..e4c173e 100644
--- a/src/java/org/apache/cassandra/config/CFMetaData.java
+++ b/src/java/org/apache/cassandra/config/CFMetaData.java
@@ -76,6 +76,7 @@ public final class CFMetaData
public final static ByteBuffer DEFAULT_KEY_NAME = ByteBufferUtil.bytes("KEY");
public final static Caching DEFAULT_CACHING_STRATEGY = Caching.KEYS_ONLY;
public final static int DEFAULT_DEFAULT_TIME_TO_LIVE = 0;
+ public final static int DEFAULT_INDEX_INTERVAL = 128;
// Note that this is the default only for user created tables
public final static String DEFAULT_COMPRESSOR = SnappyCompressor.isAvailable() ? SnappyCompressor.class.getCanonicalName() : null;
@@ -262,6 +263,7 @@ public final class CFMetaData
private volatile ByteBuffer valueAlias = null;
private volatile Double bloomFilterFpChance = null;
private volatile Caching caching = DEFAULT_CACHING_STRATEGY;
+ private volatile int indexInterval = DEFAULT_INDEX_INTERVAL;
private int memtableFlushPeriod = 0;
private volatile int defaultTimeToLive = DEFAULT_DEFAULT_TIME_TO_LIVE;
@@ -294,6 +296,7 @@ public final class CFMetaData
public CFMetaData compressionParameters(CompressionParameters prop) {compressionParameters = prop; return this;}
public CFMetaData bloomFilterFpChance(Double prop) {bloomFilterFpChance = prop; return this;}
public CFMetaData caching(Caching prop) {caching = prop; return this;}
+ public CFMetaData indexInterval(int prop) {indexInterval = prop; return this;}
public CFMetaData memtableFlushPeriod(int prop) {memtableFlushPeriod = prop; return this;}
public CFMetaData defaultTimeToLive(int prop) {defaultTimeToLive = prop; return this;}
@@ -435,8 +438,9 @@ public final class CFMetaData
.compressionParameters(oldCFMD.compressionParameters)
.bloomFilterFpChance(oldCFMD.bloomFilterFpChance)
.caching(oldCFMD.caching)
- .memtableFlushPeriod(oldCFMD.memtableFlushPeriod)
- .defaultTimeToLive(oldCFMD.defaultTimeToLive);
+ .defaultTimeToLive(oldCFMD.defaultTimeToLive)
+ .indexInterval(oldCFMD.indexInterval)
+ .memtableFlushPeriod(oldCFMD.memtableFlushPeriod);
}
/**
@@ -549,6 +553,11 @@ public final class CFMetaData
return caching;
}
+ public int getIndexInterval()
+ {
+ return indexInterval;
+ }
+
public int getMemtableFlushPeriod()
{
return memtableFlushPeriod;
@@ -598,6 +607,7 @@ public final class CFMetaData
.append(memtableFlushPeriod, rhs.memtableFlushPeriod)
.append(caching, rhs.caching)
.append(defaultTimeToLive, rhs.defaultTimeToLive)
+ .append(indexInterval, rhs.indexInterval)
.isEquals();
}
@@ -630,6 +640,7 @@ public final class CFMetaData
.append(memtableFlushPeriod)
.append(caching)
.append(defaultTimeToLive)
+ .append(indexInterval)
.toHashCode();
}
@@ -713,6 +724,8 @@ public final class CFMetaData
newCFMD.defaultTimeToLive(cf_def.default_time_to_live);
if (cf_def.isSetDclocal_read_repair_chance())
newCFMD.dcLocalReadRepairChance(cf_def.dclocal_read_repair_chance);
+ if (cf_def.isSetIndex_interval())
+ newCFMD.indexInterval(cf_def.index_interval);
CompressionParameters cp = CompressionParameters.create(cf_def.compression_options);
@@ -911,6 +924,7 @@ public final class CFMetaData
def.setCompression_options(compressionParameters.asThriftOptions());
if (bloomFilterFpChance != null)
def.setBloom_filter_fp_chance(bloomFilterFpChance);
+ def.setIndex_interval(indexInterval);
def.setMemtable_flush_period_in_ms(memtableFlushPeriod);
def.setCaching(caching.toString());
def.setDefault_time_to_live(defaultTimeToLive);
@@ -1260,6 +1274,7 @@ public final class CFMetaData
cf.addColumn(DeletedColumn.create(ldt, timestamp, cfName, "value_alias"));
cf.addColumn(DeletedColumn.create(ldt, timestamp, cfName, "column_aliases"));
cf.addColumn(DeletedColumn.create(ldt, timestamp, cfName, "compaction_strategy_options"));
+ cf.addColumn(DeletedColumn.create(ldt, timestamp, cfName, "index_interval"));
for (ColumnDefinition cd : column_metadata.values())
cd.deleteFromSchema(rm, cfName, getColumnDefinitionComparator(cd), timestamp);
@@ -1313,6 +1328,7 @@ public final class CFMetaData
: Column.create(valueAlias, timestamp, cfName, "value_alias"));
cf.addColumn(Column.create(json(aliasesAsStrings(columnAliases)), timestamp, cfName, "column_aliases"));
cf.addColumn(Column.create(json(compactionStrategyOptions), timestamp, cfName, "compaction_strategy_options"));
+ cf.addColumn(Column.create(indexInterval, timestamp, cfName, "index_interval"));
}
// Package protected for use by tests
@@ -1361,6 +1377,8 @@ public final class CFMetaData
if (result.has("value_alias"))
cfm.valueAlias(result.getBytes("value_alias"));
cfm.compactionStrategyOptions(fromJsonMap(result.getString("compaction_strategy_options")));
+ if (result.has("index_interval"))
+ cfm.indexInterval(result.getInt("index_interval"));
return cfm;
}
@@ -1526,6 +1544,7 @@ public final class CFMetaData
.append("memtable_flush_period_in_ms", memtableFlushPeriod)
.append("caching", caching)
.append("defaultTimeToLive", defaultTimeToLive)
+ .append("indexInterval", indexInterval)
.toString();
}
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/6a5c9ed8/src/java/org/apache/cassandra/config/Config.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/config/Config.java b/src/java/org/apache/cassandra/config/Config.java
index 48ce5f8..7d142fe 100644
--- a/src/java/org/apache/cassandra/config/Config.java
+++ b/src/java/org/apache/cassandra/config/Config.java
@@ -138,8 +138,6 @@ public class Config
public InternodeCompression internode_compression = InternodeCompression.none;
- public Integer index_interval = 128;
-
public Double flush_largest_memtables_at = 1.0;
public Double reduce_cache_sizes_at = 1.0;
public double reduce_cache_capacity_to = 0.6;
http://git-wip-us.apache.org/repos/asf/cassandra/blob/6a5c9ed8/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
index f8f2787..f037fe4 100644
--- a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
+++ b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
@@ -1059,11 +1059,6 @@ public class DatabaseDescriptor
return conf.max_hint_window_in_ms;
}
- public static Integer getIndexInterval()
- {
- return conf.index_interval;
- }
-
public static File getSerializedCachePath(String ksName, String cfName, CacheService.CacheType cacheType, String version)
{
return new File(conf.saved_caches_directory + File.separator + ksName + "-" + cfName + "-" + cacheType + (version == null ? "" : "-" + version + ".db"));
http://git-wip-us.apache.org/repos/asf/cassandra/blob/6a5c9ed8/src/java/org/apache/cassandra/db/compaction/CompactionManager.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/compaction/CompactionManager.java b/src/java/org/apache/cassandra/db/compaction/CompactionManager.java
index 198fa01..4103da8 100644
--- a/src/java/org/apache/cassandra/db/compaction/CompactionManager.java
+++ b/src/java/org/apache/cassandra/db/compaction/CompactionManager.java
@@ -575,8 +575,8 @@ public class CompactionManager implements CompactionManagerMBean
long totalkeysWritten = 0;
- int expectedBloomFilterSize = Math.max(DatabaseDescriptor.getIndexInterval(),
- (int)(SSTableReader.getApproximateKeyCount(Arrays.asList(sstable))));
+ int expectedBloomFilterSize = Math.max(cfs.metadata.getIndexInterval(),
+ (int)(SSTableReader.getApproximateKeyCount(Arrays.asList(sstable),cfs.metadata)));
if (logger.isDebugEnabled())
logger.debug("Expected bloom filter size : " + expectedBloomFilterSize);
http://git-wip-us.apache.org/repos/asf/cassandra/blob/6a5c9ed8/src/java/org/apache/cassandra/db/compaction/CompactionTask.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/compaction/CompactionTask.java b/src/java/org/apache/cassandra/db/compaction/CompactionTask.java
index cb47354..ee89232 100644
--- a/src/java/org/apache/cassandra/db/compaction/CompactionTask.java
+++ b/src/java/org/apache/cassandra/db/compaction/CompactionTask.java
@@ -119,7 +119,7 @@ public class CompactionTask extends AbstractCompactionTask
long totalkeysWritten = 0;
AbstractCompactionStrategy strategy = cfs.getCompactionStrategy();
- long estimatedTotalKeys = Math.max(DatabaseDescriptor.getIndexInterval(), SSTableReader.getApproximateKeyCount(toCompact));
+ long estimatedTotalKeys = Math.max(cfs.metadata.getIndexInterval(), SSTableReader.getApproximateKeyCount(toCompact, cfs.metadata));
long estimatedSSTables = Math.max(1, SSTable.getTotalBytes(toCompact) / strategy.getMaxSSTableSize());
long keysPerSSTable = (long) Math.ceil((double) estimatedTotalKeys / estimatedSSTables);
if (logger.isDebugEnabled())
http://git-wip-us.apache.org/repos/asf/cassandra/blob/6a5c9ed8/src/java/org/apache/cassandra/db/compaction/Scrubber.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/compaction/Scrubber.java b/src/java/org/apache/cassandra/db/compaction/Scrubber.java
index c6855e8..ac05a3f 100644
--- a/src/java/org/apache/cassandra/db/compaction/Scrubber.java
+++ b/src/java/org/apache/cassandra/db/compaction/Scrubber.java
@@ -88,7 +88,7 @@ public class Scrubber implements Closeable
? new ScrubController(cfs)
: new CompactionController(cfs, Collections.singletonList(sstable), CompactionManager.getDefaultGcBefore(cfs));
this.isCommutative = cfs.metadata.getDefaultValidator().isCommutative();
- this.expectedBloomFilterSize = Math.max(DatabaseDescriptor.getIndexInterval(), (int)(SSTableReader.getApproximateKeyCount(toScrub)));
+ this.expectedBloomFilterSize = Math.max(cfs.metadata.getIndexInterval(), (int)(SSTableReader.getApproximateKeyCount(toScrub,cfs.metadata)));
// loop through each row, deserializing to check for damage.
// we'll also loop through the index at the same time, using the position from the index to recover if the
http://git-wip-us.apache.org/repos/asf/cassandra/blob/6a5c9ed8/src/java/org/apache/cassandra/dht/AbstractByteOrderedPartitioner.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/dht/AbstractByteOrderedPartitioner.java b/src/java/org/apache/cassandra/dht/AbstractByteOrderedPartitioner.java
index cff4754..f9e1c81 100644
--- a/src/java/org/apache/cassandra/dht/AbstractByteOrderedPartitioner.java
+++ b/src/java/org/apache/cassandra/dht/AbstractByteOrderedPartitioner.java
@@ -201,7 +201,7 @@ public abstract class AbstractByteOrderedPartitioner extends AbstractPartitioner
for (Range<Token> r : sortedRanges)
{
// Looping over every KS:CF:Range, get the splits size and add it to the count
- allTokens.put(r.right, allTokens.get(r.right) + StorageService.instance.getSplits(ks, cfmd.cfName, r, 1).size());
+ allTokens.put(r.right, allTokens.get(r.right) + StorageService.instance.getSplits(ks, cfmd.cfName, r, 1, cfmd).size());
}
}
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/6a5c9ed8/src/java/org/apache/cassandra/dht/OrderPreservingPartitioner.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/dht/OrderPreservingPartitioner.java b/src/java/org/apache/cassandra/dht/OrderPreservingPartitioner.java
index 25f26f4..5658e44 100644
--- a/src/java/org/apache/cassandra/dht/OrderPreservingPartitioner.java
+++ b/src/java/org/apache/cassandra/dht/OrderPreservingPartitioner.java
@@ -194,7 +194,7 @@ public class OrderPreservingPartitioner extends AbstractPartitioner<StringToken>
for (Range<Token> r : sortedRanges)
{
// Looping over every KS:CF:Range, get the splits size and add it to the count
- allTokens.put(r.right, allTokens.get(r.right) + StorageService.instance.getSplits(ks, cfmd.cfName, r, DatabaseDescriptor.getIndexInterval()).size());
+ allTokens.put(r.right, allTokens.get(r.right) + StorageService.instance.getSplits(ks, cfmd.cfName, r, cfmd.getIndexInterval(), cfmd).size());
}
}
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/6a5c9ed8/src/java/org/apache/cassandra/io/sstable/IndexSummary.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/io/sstable/IndexSummary.java b/src/java/org/apache/cassandra/io/sstable/IndexSummary.java
index 1b9291b..ccb8208 100644
--- a/src/java/org/apache/cassandra/io/sstable/IndexSummary.java
+++ b/src/java/org/apache/cassandra/io/sstable/IndexSummary.java
@@ -24,7 +24,6 @@ import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.List;
-import org.apache.cassandra.config.DatabaseDescriptor;
import org.apache.cassandra.db.DecoratedKey;
import org.apache.cassandra.dht.IPartitioner;
import org.apache.cassandra.utils.ByteBufferUtil;
@@ -40,21 +39,23 @@ public class IndexSummary
private final ArrayList<Long> positions;
private final ArrayList<DecoratedKey> keys;
private long keysWritten = 0;
+ private int indexInterval;
- public IndexSummary(long expectedKeys)
+ private IndexSummary()
{
- long expectedEntries = expectedKeys / DatabaseDescriptor.getIndexInterval();
+ positions = new ArrayList<Long>();
+ keys = new ArrayList<DecoratedKey>();
+ }
+
+ public IndexSummary(long expectedKeys, int indexInterval)
+ {
+ long expectedEntries = expectedKeys / indexInterval;
if (expectedEntries > Integer.MAX_VALUE)
// TODO: that's a _lot_ of keys, or a very low interval
- throw new RuntimeException("Cannot use index_interval of " + DatabaseDescriptor.getIndexInterval() + " with " + expectedKeys + " (expected) keys.");
+ throw new RuntimeException("Cannot use index_interval of " + indexInterval + " with " + expectedKeys + " (expected) keys.");
positions = new ArrayList<Long>((int)expectedEntries);
keys = new ArrayList<DecoratedKey>((int)expectedEntries);
- }
-
- private IndexSummary()
- {
- positions = new ArrayList<Long>();
- keys = new ArrayList<DecoratedKey>();
+ this.indexInterval = indexInterval;
}
public void incrementRowid()
@@ -64,7 +65,7 @@ public class IndexSummary
public boolean shouldAddEntry()
{
- return keysWritten % DatabaseDescriptor.getIndexInterval() == 0;
+ return keysWritten % indexInterval == 0;
}
public void addEntry(DecoratedKey key, long indexPosition)
@@ -90,7 +91,11 @@ public class IndexSummary
return positions.get(index);
}
- public void complete()
+ public int getIndexInterval() {
+ return indexInterval;
+ }
+
+ public void complete()
{
keys.trimToSize();
positions.trimToSize();
@@ -101,7 +106,7 @@ public class IndexSummary
public void serialize(IndexSummary t, DataOutput dos) throws IOException
{
assert t.keys.size() == t.positions.size() : "keysize and the position sizes are not same.";
- dos.writeInt(DatabaseDescriptor.getIndexInterval());
+ dos.writeInt(t.indexInterval);
dos.writeInt(t.keys.size());
for (int i = 0; i < t.keys.size(); i++)
{
@@ -113,8 +118,7 @@ public class IndexSummary
public IndexSummary deserialize(DataInput dis, IPartitioner partitioner) throws IOException
{
IndexSummary summary = new IndexSummary();
- if (dis.readInt() != DatabaseDescriptor.getIndexInterval())
- throw new IOException("Cannot read the saved summary because Index Interval changed.");
+ summary.indexInterval = dis.readInt();
int size = dis.readInt();
for (int i = 0; i < size; i++)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/6a5c9ed8/src/java/org/apache/cassandra/io/sstable/SSTableReader.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/io/sstable/SSTableReader.java b/src/java/org/apache/cassandra/io/sstable/SSTableReader.java
index 8fe820a..c1c751c 100644
--- a/src/java/org/apache/cassandra/io/sstable/SSTableReader.java
+++ b/src/java/org/apache/cassandra/io/sstable/SSTableReader.java
@@ -62,7 +62,7 @@ public class SSTableReader extends SSTable
private static final Logger logger = LoggerFactory.getLogger(SSTableReader.class);
// guesstimated size of INDEX_INTERVAL index entries
- private static final int INDEX_FILE_BUFFER_BYTES = 16 * DatabaseDescriptor.getIndexInterval();
+ private static final int INDEX_FILE_BUFFER_BYTES = 16 * CFMetaData.DEFAULT_INDEX_INTERVAL;
/**
* maxDataAge is a timestamp in local server time (e.g. System.currentTimeMilli) which represents an uppper bound
@@ -98,14 +98,14 @@ public class SSTableReader extends SSTable
private final SSTableMetadata sstableMetadata;
- public static long getApproximateKeyCount(Iterable<SSTableReader> sstables)
+ public static long getApproximateKeyCount(Iterable<SSTableReader> sstables, CFMetaData metadata)
{
long count = 0;
for (SSTableReader sstable : sstables)
{
int indexKeyCount = sstable.getKeySamples().size();
- count = count + (indexKeyCount + 1) * DatabaseDescriptor.getIndexInterval();
+ count = count + (indexKeyCount + 1) * metadata.getIndexInterval();
if (logger.isDebugEnabled())
logger.debug("index size for bloom filter calc for file : " + sstable.getFilename() + " : " + count);
}
@@ -354,7 +354,7 @@ public class SSTableReader extends SSTable
// try to load summaries from the disk and check if we need
// to read primary index because we should re-create a BloomFilter or pre-load KeyCache
- final boolean summaryLoaded = loadSummary(this, ibuilder, dbuilder);
+ final boolean summaryLoaded = loadSummary(this, ibuilder, dbuilder, metadata);
final boolean readIndex = recreatebloom || !summaryLoaded;
try
{
@@ -367,7 +367,7 @@ public class SSTableReader extends SSTable
bf = LegacyBloomFilter.getFilter(estimatedKeys, 15);
if (!summaryLoaded)
- indexSummary = new IndexSummary(estimatedKeys);
+ indexSummary = new IndexSummary(estimatedKeys, metadata.getIndexInterval());
long indexPosition;
while (readIndex && (indexPosition = primaryIndex.getFilePointer()) != indexSize)
@@ -406,7 +406,7 @@ public class SSTableReader extends SSTable
saveSummary(this, ibuilder, dbuilder);
}
- public static boolean loadSummary(SSTableReader reader, SegmentedFile.Builder ibuilder, SegmentedFile.Builder dbuilder)
+ public static boolean loadSummary(SSTableReader reader, SegmentedFile.Builder ibuilder, SegmentedFile.Builder dbuilder, CFMetaData metadata)
{
File summariesFile = new File(reader.descriptor.filenameFor(Component.SUMMARY));
if (!summariesFile.exists())
@@ -417,6 +417,14 @@ public class SSTableReader extends SSTable
{
iStream = new DataInputStream(new FileInputStream(summariesFile));
reader.indexSummary = IndexSummary.serializer.deserialize(iStream, reader.partitioner);
+ if (reader.indexSummary.getIndexInterval() != metadata.getIndexInterval())
+ {
+ iStream.close();
+ logger.debug("Cannot read the saved summary for {} because Index Interval changed from {} to {}.",
+ reader.toString(), reader.indexSummary.getIndexInterval(), metadata.getIndexInterval());
+ FileUtils.deleteWithConfirm(summariesFile);
+ return false;
+ }
reader.first = decodeKey(reader.partitioner, reader.descriptor, ByteBufferUtil.readWithLength(iStream));
reader.last = decodeKey(reader.partitioner, reader.descriptor, ByteBufferUtil.readWithLength(iStream));
ibuilder.deserializeBounds(iStream);
@@ -425,10 +433,8 @@ public class SSTableReader extends SSTable
catch (IOException e)
{
logger.debug("Cannot deserialize SSTable Summary: ", e);
- // corrupted hence delete it and let it load it now.
- if (summariesFile.exists())
- summariesFile.delete();
-
+ // corrupted; delete it and fall back to creating a new summary
+ FileUtils.deleteWithConfirm(summariesFile);
return false;
}
finally
@@ -530,7 +536,7 @@ public class SSTableReader extends SSTable
*/
public long estimatedKeys()
{
- return indexSummary.getKeys().size() * DatabaseDescriptor.getIndexInterval();
+ return indexSummary.getKeys().size() * metadata.getIndexInterval();
}
/**
@@ -543,7 +549,7 @@ public class SSTableReader extends SSTable
List<Pair<Integer, Integer>> sampleIndexes = getSampleIndexesForRanges(indexSummary.getKeys(), ranges);
for (Pair<Integer, Integer> sampleIndexRange : sampleIndexes)
sampleKeyCount += (sampleIndexRange.right - sampleIndexRange.left + 1);
- return Math.max(1, sampleKeyCount * DatabaseDescriptor.getIndexInterval());
+ return Math.max(1, sampleKeyCount * metadata.getIndexInterval());
}
/**
@@ -778,12 +784,12 @@ public class SSTableReader extends SSTable
// of the next interval).
int i = 0;
Iterator<FileDataInput> segments = ifile.iterator(sampledPosition, INDEX_FILE_BUFFER_BYTES);
- while (segments.hasNext() && i <= DatabaseDescriptor.getIndexInterval())
+ while (segments.hasNext() && i <= metadata.getIndexInterval())
{
FileDataInput in = segments.next();
try
{
- while (!in.isEOF() && i <= DatabaseDescriptor.getIndexInterval())
+ while (!in.isEOF() && i <= metadata.getIndexInterval())
{
i++;
http://git-wip-us.apache.org/repos/asf/cassandra/blob/6a5c9ed8/src/java/org/apache/cassandra/io/sstable/SSTableWriter.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/io/sstable/SSTableWriter.java b/src/java/org/apache/cassandra/io/sstable/SSTableWriter.java
index 3e4656a..cc0a262 100644
--- a/src/java/org/apache/cassandra/io/sstable/SSTableWriter.java
+++ b/src/java/org/apache/cassandra/io/sstable/SSTableWriter.java
@@ -438,7 +438,7 @@ public class SSTableWriter extends SSTable
indexFile = SequentialWriter.open(new File(descriptor.filenameFor(SSTable.COMPONENT_INDEX)),
!DatabaseDescriptor.populateIOCacheOnFlush());
builder = SegmentedFile.getBuilder(DatabaseDescriptor.getIndexAccessMode());
- summary = new IndexSummary(keyCount);
+ summary = new IndexSummary(keyCount, metadata.getIndexInterval());
double fpChance = metadata.getBloomFilterFpChance();
if (fpChance == 0)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/6a5c9ed8/src/java/org/apache/cassandra/service/StorageService.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/service/StorageService.java b/src/java/org/apache/cassandra/service/StorageService.java
index a760d5e..b38be75 100644
--- a/src/java/org/apache/cassandra/service/StorageService.java
+++ b/src/java/org/apache/cassandra/service/StorageService.java
@@ -2475,13 +2475,13 @@ public class StorageService implements IEndpointStateChangeSubscriber, StorageSe
* @return list of Token ranges (_not_ keys!) together with estimated key count,
* breaking up the data this node is responsible for into pieces of roughly keysPerSplit
*/
- public List<Pair<Range<Token>, Long>> getSplits(String table, String cfName, Range<Token> range, int keysPerSplit)
+ public List<Pair<Range<Token>, Long>> getSplits(String table, String cfName, Range<Token> range, int keysPerSplit, CFMetaData metadata)
{
Table t = Table.open(table);
ColumnFamilyStore cfs = t.getColumnFamilyStore(cfName);
List<DecoratedKey> keys = keySamples(Collections.singleton(cfs), range);
- final long totalRowCountEstimate = (keys.size() + 1) * DatabaseDescriptor.getIndexInterval();
+ final long totalRowCountEstimate = (keys.size() + 1) * metadata.getIndexInterval();
// splitCount should be much smaller than number of key samples, to avoid huge sampling error
final int minSamplesPerSplit = 4;
@@ -2489,10 +2489,10 @@ public class StorageService implements IEndpointStateChangeSubscriber, StorageSe
final int splitCount = Math.max(1, Math.min(maxSplitCount, (int)(totalRowCountEstimate / keysPerSplit)));
List<Token> tokens = keysToTokens(range, keys);
- return getSplits(tokens, splitCount);
+ return getSplits(tokens, splitCount, metadata);
}
- private List<Pair<Range<Token>, Long>> getSplits(List<Token> tokens, int splitCount)
+ private List<Pair<Range<Token>, Long>> getSplits(List<Token> tokens, int splitCount, CFMetaData metadata)
{
final double step = (double) (tokens.size() - 1) / splitCount;
int prevIndex = 0;
@@ -2502,7 +2502,7 @@ public class StorageService implements IEndpointStateChangeSubscriber, StorageSe
{
int index = (int) Math.round(i * step);
Token token = tokens.get(index);
- long rowCountEstimate = (index - prevIndex) * DatabaseDescriptor.getIndexInterval();
+ long rowCountEstimate = (index - prevIndex) * metadata.getIndexInterval();
splits.add(Pair.create(new Range<Token>(prevToken, token), rowCountEstimate));
prevIndex = index;
prevToken = token;
http://git-wip-us.apache.org/repos/asf/cassandra/blob/6a5c9ed8/src/java/org/apache/cassandra/thrift/CassandraServer.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/thrift/CassandraServer.java b/src/java/org/apache/cassandra/thrift/CassandraServer.java
index 3cf2d68..cce149e 100644
--- a/src/java/org/apache/cassandra/thrift/CassandraServer.java
+++ b/src/java/org/apache/cassandra/thrift/CassandraServer.java
@@ -1224,7 +1224,7 @@ public class CassandraServer implements Cassandra.Iface
Token.TokenFactory tf = StorageService.getPartitioner().getTokenFactory();
Range<Token> tr = new Range<Token>(tf.fromString(start_token), tf.fromString(end_token));
List<Pair<Range<Token>, Long>> splits =
- StorageService.instance.getSplits(state().getKeyspace(), cfName, tr, keys_per_split);
+ StorageService.instance.getSplits(state().getKeyspace(), cfName, tr, keys_per_split, Schema.instance.getCFMetaData(state().getKeyspace(), cfName));
List<CfSplit> result = new ArrayList<CfSplit>(splits.size());
for (Pair<Range<Token>, Long> split : splits)
result.add(new CfSplit(split.left.left.toString(), split.left.right.toString(), split.right));
http://git-wip-us.apache.org/repos/asf/cassandra/blob/6a5c9ed8/src/resources/org/apache/cassandra/cli/CliHelp.yaml
----------------------------------------------------------------------
diff --git a/src/resources/org/apache/cassandra/cli/CliHelp.yaml b/src/resources/org/apache/cassandra/cli/CliHelp.yaml
index 80b5dcb..069a6ce 100644
--- a/src/resources/org/apache/cassandra/cli/CliHelp.yaml
+++ b/src/resources/org/apache/cassandra/cli/CliHelp.yaml
@@ -394,6 +394,11 @@ commands:
- bloom_filter_fp_chance: Desired false positive probability for
sstable row bloom filters. Default is 0.000744.
+ - index_interval: controls the sampling of entries from the primrary
+ row index in terms of space versus time. The larger the interval,
+ the smaller and less effective the sampling will be. All the sampled
+ entries must fit in memory. Default value is 128.
+
- column_type: Type of columns this column family holds, valid values are
Standard and Super. Default is Standard.
http://git-wip-us.apache.org/repos/asf/cassandra/blob/6a5c9ed8/test/long/org/apache/cassandra/db/compaction/LongCompactionsTest.java
----------------------------------------------------------------------
diff --git a/test/long/org/apache/cassandra/db/compaction/LongCompactionsTest.java b/test/long/org/apache/cassandra/db/compaction/LongCompactionsTest.java
index 7944555..de44468 100644
--- a/test/long/org/apache/cassandra/db/compaction/LongCompactionsTest.java
+++ b/test/long/org/apache/cassandra/db/compaction/LongCompactionsTest.java
@@ -119,7 +119,7 @@ public class LongCompactionsTest extends SchemaLoader
cfs.clearUnsafe();
final int ROWS_PER_SSTABLE = 10;
- final int SSTABLES = DatabaseDescriptor.getIndexInterval() * 3 / ROWS_PER_SSTABLE;
+ final int SSTABLES = cfs.metadata.getIndexInterval() * 3 / ROWS_PER_SSTABLE;
// disable compaction while flushing
cfs.disableAutoCompaction();
@@ -159,7 +159,7 @@ public class LongCompactionsTest extends SchemaLoader
ColumnFamilyStore cfs = table.getColumnFamilyStore("Super1");
final int ROWS_PER_SSTABLE = 10;
- final int SSTABLES = DatabaseDescriptor.getIndexInterval() * 3 / ROWS_PER_SSTABLE;
+ final int SSTABLES = cfs.metadata.getIndexInterval() * 3 / ROWS_PER_SSTABLE;
//disable compaction while flushing
cfs.disableAutoCompaction();
http://git-wip-us.apache.org/repos/asf/cassandra/blob/6a5c9ed8/test/unit/org/apache/cassandra/db/KeyCollisionTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/db/KeyCollisionTest.java b/test/unit/org/apache/cassandra/db/KeyCollisionTest.java
index e9b8ef3..e152a5d 100644
--- a/test/unit/org/apache/cassandra/db/KeyCollisionTest.java
+++ b/test/unit/org/apache/cassandra/db/KeyCollisionTest.java
@@ -192,7 +192,7 @@ public class KeyCollisionTest extends SchemaLoader
for (Range<Token> r : sortedRanges)
{
// Looping over every KS:CF:Range, get the splits size and add it to the count
- allTokens.put(r.right, allTokens.get(r.right) + StorageService.instance.getSplits(ks, cfmd.cfName, r, 1).size());
+ allTokens.put(r.right, allTokens.get(r.right) + StorageService.instance.getSplits(ks, cfmd.cfName, r, 1, cfmd).size());
}
}
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/6a5c9ed8/test/unit/org/apache/cassandra/db/compaction/CompactionsTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/db/compaction/CompactionsTest.java b/test/unit/org/apache/cassandra/db/compaction/CompactionsTest.java
index c92c7bb..b013d6d 100644
--- a/test/unit/org/apache/cassandra/db/compaction/CompactionsTest.java
+++ b/test/unit/org/apache/cassandra/db/compaction/CompactionsTest.java
@@ -289,7 +289,7 @@ public class CompactionsTest extends SchemaLoader
final ColumnFamilyStore cfs = table.getColumnFamilyStore("Standard1");
final int ROWS_PER_SSTABLE = 10;
- final int SSTABLES = DatabaseDescriptor.getIndexInterval() * 2 / ROWS_PER_SSTABLE;
+ final int SSTABLES = cfs.metadata.getIndexInterval() * 2 / ROWS_PER_SSTABLE;
cfs.setCompactionStrategyClass(compactionStrategy);
http://git-wip-us.apache.org/repos/asf/cassandra/blob/6a5c9ed8/test/unit/org/apache/cassandra/io/LazilyCompactedRowTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/io/LazilyCompactedRowTest.java b/test/unit/org/apache/cassandra/io/LazilyCompactedRowTest.java
index 0608366..fe67a03 100644
--- a/test/unit/org/apache/cassandra/io/LazilyCompactedRowTest.java
+++ b/test/unit/org/apache/cassandra/io/LazilyCompactedRowTest.java
@@ -278,7 +278,7 @@ public class LazilyCompactedRowTest extends SchemaLoader
ColumnFamilyStore cfs = table.getColumnFamilyStore("Standard1");
final int ROWS_PER_SSTABLE = 10;
- for (int j = 0; j < (DatabaseDescriptor.getIndexInterval() * 3) / ROWS_PER_SSTABLE; j++)
+ for (int j = 0; j < (cfs.metadata.getIndexInterval() * 3) / ROWS_PER_SSTABLE; j++)
{
for (int i = 0; i < ROWS_PER_SSTABLE; i++)
{
http://git-wip-us.apache.org/repos/asf/cassandra/blob/6a5c9ed8/test/unit/org/apache/cassandra/io/sstable/SSTableReaderTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/io/sstable/SSTableReaderTest.java b/test/unit/org/apache/cassandra/io/sstable/SSTableReaderTest.java
index 1f9798c..1026301 100644
--- a/test/unit/org/apache/cassandra/io/sstable/SSTableReaderTest.java
+++ b/test/unit/org/apache/cassandra/io/sstable/SSTableReaderTest.java
@@ -260,7 +260,7 @@ public class SSTableReaderTest extends SchemaLoader
DecoratedKey firstKey = null, lastKey = null;
long timestamp = System.currentTimeMillis();
- for (int i = 0; i < DatabaseDescriptor.getIndexInterval(); i++)
+ for (int i = 0; i < store.metadata.getIndexInterval(); i++)
{
DecoratedKey key = Util.dk(String.valueOf(i));
if (firstKey == null)