You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by br...@apache.org on 2013/01/31 22:12:34 UTC
git commit: Allow populate_io_cache_on_flush to be set per-CF. Patch
by Alexey Zotov, reviewed by brandwonwilliams for CASSANDRA-4694
Updated Branches:
refs/heads/cassandra-1.2 c415eb804 -> 21f63a916
Allow populate_io_cache_on_flush to be set per-CF.
Patch by Alexey Zotov, reviewed by brandwonwilliams for CASSANDRA-4694
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/21f63a91
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/21f63a91
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/21f63a91
Branch: refs/heads/cassandra-1.2
Commit: 21f63a916dbab243a5104d12587bb29dcbbb6201
Parents: c415eb8
Author: Brandon Williams <br...@apache.org>
Authored: Thu Jan 31 15:08:41 2013 -0600
Committer: Brandon Williams <br...@apache.org>
Committed: Thu Jan 31 15:12:41 2013 -0600
----------------------------------------------------------------------
CHANGES.txt | 1 +
examples/client_only/conf/cassandra.yaml | 2 +
interface/cassandra.thrift | 3 +-
.../org/apache/cassandra/thrift/CfDef.java | 104 +++++++++++++--
pylib/cqlshlib/cql3handling.py | 7 +-
pylib/cqlshlib/cqlhandling.py | 3 +-
src/java/org/apache/cassandra/cli/CliClient.java | 8 +-
.../org/apache/cassandra/config/CFMetaData.java | 25 ++++-
.../cassandra/config/DatabaseDescriptor.java | 7 -
.../apache/cassandra/cql/AlterTableStatement.java | 1 +
src/java/org/apache/cassandra/cql/CFPropDefs.java | 2 +
.../cassandra/cql/CreateColumnFamilyStatement.java | 3 +-
src/java/org/apache/cassandra/cql3/CFPropDefs.java | 3 +
.../apache/cassandra/io/sstable/SSTableWriter.java | 6 +-
.../org/apache/cassandra/cli/CliHelp.yaml | 6 +
15 files changed, 153 insertions(+), 28 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/21f63a91/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 4a67f9c..49d4802 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -3,6 +3,7 @@
* fix bug in compact storage metadata handling (CASSANDRA-5189)
* Validate login for USE queries (CASSANDRA-5207)
* cli: remove default username and password (CASSANDRA-5208)
+ * configure populate_io_cache_on_flush per-CF (CASSANDRA-4694)
1.2.1
* stream undelivered hints on decommission (CASSANDRA-5128)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/21f63a91/examples/client_only/conf/cassandra.yaml
----------------------------------------------------------------------
diff --git a/examples/client_only/conf/cassandra.yaml b/examples/client_only/conf/cassandra.yaml
index 0edc473..1661c25 100644
--- a/examples/client_only/conf/cassandra.yaml
+++ b/examples/client_only/conf/cassandra.yaml
@@ -391,6 +391,8 @@ index_interval: 128
# days). See http://wiki.apache.org/cassandra/DistributedDeletes
# - default_validation_class: specifies a validator class to use for
# validating all the column values in the CF.
+# - populate_io_cache_on_flush: populates the page cache on memtable flush
+# and compaction. Defaults to false.
# NOTE:
# min_ must be less than max_compaction_threshold!
# - min_compaction_threshold: the minimum number of SSTables needed
http://git-wip-us.apache.org/repos/asf/cassandra/blob/21f63a91/interface/cassandra.thrift
----------------------------------------------------------------------
diff --git a/interface/cassandra.thrift b/interface/cassandra.thrift
index c52263b..1649229 100644
--- a/interface/cassandra.thrift
+++ b/interface/cassandra.thrift
@@ -55,7 +55,7 @@ namespace rb CassandraThrift
# An effort should be made not to break forward-client-compatibility either
# (e.g. one should avoid removing obsolete fields from the IDL), but no
# guarantees in this respect are made by the Cassandra project.
-const string VERSION = "19.35.0"
+const string VERSION = "19.36.0"
#
@@ -442,6 +442,7 @@ struct CfDef {
33: optional double bloom_filter_fp_chance,
34: optional string caching="keys_only",
37: optional double dclocal_read_repair_chance = 0.0,
+ 38: optional bool populate_io_cache_on_flush,
/* All of the following are now ignored and unsupplied. */
http://git-wip-us.apache.org/repos/asf/cassandra/blob/21f63a91/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 ccf7fad..60aa07f 100644
--- a/interface/thrift/gen-java/org/apache/cassandra/thrift/CfDef.java
+++ b/interface/thrift/gen-java/org/apache/cassandra/thrift/CfDef.java
@@ -32,15 +32,10 @@ import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;
import java.util.EnumMap;
-import java.util.Set;
-import java.util.HashSet;
import java.util.EnumSet;
import java.util.Collections;
import java.util.BitSet;
import java.nio.ByteBuffer;
-import java.util.Arrays;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
public class CfDef implements org.apache.thrift.TBase<CfDef, CfDef._Fields>, java.io.Serializable, Cloneable {
private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("CfDef");
@@ -77,6 +72,7 @@ public class CfDef implements org.apache.thrift.TBase<CfDef, CfDef._Fields>, jav
private static final org.apache.thrift.protocol.TField MERGE_SHARDS_CHANCE_FIELD_DESC = new org.apache.thrift.protocol.TField("merge_shards_chance", org.apache.thrift.protocol.TType.DOUBLE, (short)25);
private static final org.apache.thrift.protocol.TField ROW_CACHE_PROVIDER_FIELD_DESC = new org.apache.thrift.protocol.TField("row_cache_provider", org.apache.thrift.protocol.TType.STRING, (short)27);
private static final org.apache.thrift.protocol.TField ROW_CACHE_KEYS_TO_SAVE_FIELD_DESC = new org.apache.thrift.protocol.TField("row_cache_keys_to_save", org.apache.thrift.protocol.TType.I32, (short)31);
+ private static final org.apache.thrift.protocol.TField POPULATE_IO_CACHE_ON_FLUSH_FIELD_DESC = new org.apache.thrift.protocol.TField("populate_io_cache_on_flush", org.apache.thrift.protocol.TType.BOOL, (short)38);
public String keyspace; // required
public String name; // required
@@ -100,6 +96,7 @@ public class CfDef implements org.apache.thrift.TBase<CfDef, CfDef._Fields>, jav
public double bloom_filter_fp_chance; // required
public String caching; // required
public double dclocal_read_repair_chance; // required
+ public boolean populate_io_cache_on_flush; // required
/**
* @deprecated
*/
@@ -165,6 +162,7 @@ public class CfDef implements org.apache.thrift.TBase<CfDef, CfDef._Fields>, jav
BLOOM_FILTER_FP_CHANCE((short)33, "bloom_filter_fp_chance"),
CACHING((short)34, "caching"),
DCLOCAL_READ_REPAIR_CHANCE((short)37, "dclocal_read_repair_chance"),
+ POPULATE_IO_CACHE_ON_FLUSH((short)38, "populate_io_cache_on_flush"),
/**
* @deprecated
*/
@@ -263,6 +261,8 @@ public class CfDef implements org.apache.thrift.TBase<CfDef, CfDef._Fields>, jav
return CACHING;
case 37: // DCLOCAL_READ_REPAIR_CHANCE
return DCLOCAL_READ_REPAIR_CHANCE;
+ case 38: // POPULATE_IO_CACHE_ON_FLUSH
+ return POPULATE_IO_CACHE_ON_FLUSH;
case 9: // ROW_CACHE_SIZE
return ROW_CACHE_SIZE;
case 11: // KEY_CACHE_SIZE
@@ -340,7 +340,8 @@ public class CfDef implements org.apache.thrift.TBase<CfDef, CfDef._Fields>, jav
private static final int __MEMTABLE_OPERATIONS_IN_MILLIONS_ISSET_ID = 14;
private static final int __MERGE_SHARDS_CHANCE_ISSET_ID = 15;
private static final int __ROW_CACHE_KEYS_TO_SAVE_ISSET_ID = 16;
- private BitSet __isset_bit_vector = new BitSet(17);
+ private static final int __POPULATE_IO_CACHE_ISSET_ID = 17;
+ private BitSet __isset_bit_vector = new BitSet(18);
public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
static {
@@ -374,7 +375,7 @@ 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.REPLICATE_ON_WRITE, new org.apache.thrift.meta_data.FieldMetaData("replicate_on_write", org.apache.thrift.TFieldRequirementType.OPTIONAL,
new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.BOOL)));
- tmpMap.put(_Fields.KEY_VALIDATION_CLASS, new org.apache.thrift.meta_data.FieldMetaData("key_validation_class", org.apache.thrift.TFieldRequirementType.OPTIONAL,
+ tmpMap.put(_Fields.KEY_VALIDATION_CLASS, new org.apache.thrift.meta_data.FieldMetaData("key_validation_class", org.apache.thrift.TFieldRequirementType.OPTIONAL,
new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
tmpMap.put(_Fields.KEY_ALIAS, new org.apache.thrift.meta_data.FieldMetaData("key_alias", org.apache.thrift.TFieldRequirementType.OPTIONAL,
new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING , true)));
@@ -394,7 +395,9 @@ public class CfDef implements org.apache.thrift.TBase<CfDef, CfDef._Fields>, jav
new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
tmpMap.put(_Fields.DCLOCAL_READ_REPAIR_CHANCE, new org.apache.thrift.meta_data.FieldMetaData("dclocal_read_repair_chance", org.apache.thrift.TFieldRequirementType.OPTIONAL,
new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.DOUBLE)));
- tmpMap.put(_Fields.ROW_CACHE_SIZE, new org.apache.thrift.meta_data.FieldMetaData("row_cache_size", org.apache.thrift.TFieldRequirementType.OPTIONAL,
+ tmpMap.put(_Fields.POPULATE_IO_CACHE_ON_FLUSH, new org.apache.thrift.meta_data.FieldMetaData("populate_io_cache_on_flush", org.apache.thrift.TFieldRequirementType.OPTIONAL,
+ new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.BOOL)));
+ 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,
new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.DOUBLE)));
@@ -426,7 +429,6 @@ public class CfDef implements org.apache.thrift.TBase<CfDef, CfDef._Fields>, jav
this.caching = "keys_only";
this.dclocal_read_repair_chance = 0;
-
}
public CfDef(
@@ -483,7 +485,6 @@ public class CfDef implements org.apache.thrift.TBase<CfDef, CfDef._Fields>, jav
}
if (other.isSetKey_alias()) {
this.key_alias = org.apache.thrift.TBaseHelper.copyBinary(other.key_alias);
-;
}
if (other.isSetCompaction_strategy()) {
this.compaction_strategy = other.compaction_strategy;
@@ -523,6 +524,7 @@ public class CfDef implements org.apache.thrift.TBase<CfDef, CfDef._Fields>, jav
this.caching = other.caching;
}
this.dclocal_read_repair_chance = other.dclocal_read_repair_chance;
+ this.populate_io_cache_on_flush = other.populate_io_cache_on_flush;
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;
@@ -573,8 +575,9 @@ public class CfDef implements org.apache.thrift.TBase<CfDef, CfDef._Fields>, jav
setBloom_filter_fp_chanceIsSet(false);
this.bloom_filter_fp_chance = 0.0;
this.caching = "keys_only";
-
this.dclocal_read_repair_chance = 0;
+ setPopulate_io_cache_on_flushIsSet(false);
+ this.populate_io_cache_on_flush = false;
setRow_cache_sizeIsSet(false);
this.row_cache_size = 0.0;
@@ -1151,6 +1154,16 @@ public class CfDef implements org.apache.thrift.TBase<CfDef, CfDef._Fields>, jav
return this;
}
+ public boolean getPopulate_io_cache_on_flush() {
+ return this.populate_io_cache_on_flush;
+ }
+
+ public CfDef setPopulate_io_cache_on_flush(boolean populate_io_cache_on_flush) {
+ this.populate_io_cache_on_flush = populate_io_cache_on_flush;
+ setPopulate_io_cache_on_flushIsSet(true);
+ return this;
+ }
+
public void unsetDclocal_read_repair_chance() {
__isset_bit_vector.clear(__DCLOCAL_READ_REPAIR_CHANCE_ISSET_ID);
}
@@ -1164,6 +1177,19 @@ public class CfDef implements org.apache.thrift.TBase<CfDef, CfDef._Fields>, jav
__isset_bit_vector.set(__DCLOCAL_READ_REPAIR_CHANCE_ISSET_ID, value);
}
+ public void unsetPopulate_io_cache_on_flush() {
+ __isset_bit_vector.clear(__POPULATE_IO_CACHE_ISSET_ID);
+ }
+
+ /** Returns true if field populate_io_cache_on_flush is set (has been assigned a value) and false otherwise */
+ public boolean isSetPopulate_io_cache_on_flush() {
+ return __isset_bit_vector.get(__POPULATE_IO_CACHE_ISSET_ID);
+ }
+
+ public void setPopulate_io_cache_on_flushIsSet(boolean value) {
+ __isset_bit_vector.set(__POPULATE_IO_CACHE_ISSET_ID, value);
+ }
+
/**
* @deprecated
*/
@@ -1633,6 +1659,14 @@ public class CfDef implements org.apache.thrift.TBase<CfDef, CfDef._Fields>, jav
}
break;
+ case POPULATE_IO_CACHE_ON_FLUSH:
+ if (value == null) {
+ unsetPopulate_io_cache_on_flush();
+ } else {
+ setPopulate_io_cache_on_flush((Boolean) value);
+ }
+ break;
+
case ROW_CACHE_SIZE:
if (value == null) {
unsetRow_cache_size();
@@ -1784,6 +1818,9 @@ public class CfDef implements org.apache.thrift.TBase<CfDef, CfDef._Fields>, jav
case DCLOCAL_READ_REPAIR_CHANCE:
return Double.valueOf(getDclocal_read_repair_chance());
+ case POPULATE_IO_CACHE_ON_FLUSH:
+ return Boolean.valueOf(getPopulate_io_cache_on_flush());
+
case ROW_CACHE_SIZE:
return Double.valueOf(getRow_cache_size());
@@ -1869,6 +1906,8 @@ public class CfDef implements org.apache.thrift.TBase<CfDef, CfDef._Fields>, jav
return isSetCaching();
case DCLOCAL_READ_REPAIR_CHANCE:
return isSetDclocal_read_repair_chance();
+ case POPULATE_IO_CACHE_ON_FLUSH:
+ return isSetPopulate_io_cache_on_flush();
case ROW_CACHE_SIZE:
return isSetRow_cache_size();
case KEY_CACHE_SIZE:
@@ -2104,6 +2143,15 @@ public class CfDef implements org.apache.thrift.TBase<CfDef, CfDef._Fields>, jav
return false;
}
+ boolean this_present_populate_io_cache_on_flush = true && this.isSetPopulate_io_cache_on_flush();
+ boolean that_present_populate_io_cache_on_flush = true && that.isSetPopulate_io_cache_on_flush();
+ if (this_present_populate_io_cache_on_flush || that_present_populate_io_cache_on_flush) {
+ if (!(this_present_populate_io_cache_on_flush && that_present_populate_io_cache_on_flush))
+ return false;
+ if (this.populate_io_cache_on_flush != that.populate_io_cache_on_flush)
+ 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) {
@@ -2311,6 +2359,11 @@ public class CfDef implements org.apache.thrift.TBase<CfDef, CfDef._Fields>, jav
if (present_dclocal_read_repair_chance)
builder.append(dclocal_read_repair_chance);
+ boolean present_populate_io_cache_on_flush = true && (isSetPopulate_io_cache_on_flush());
+ builder.append(present_populate_io_cache_on_flush);
+ if (present_populate_io_cache_on_flush)
+ builder.append(populate_io_cache_on_flush);
+
boolean present_row_cache_size = true && (isSetRow_cache_size());
builder.append(present_row_cache_size);
if (present_row_cache_size)
@@ -2592,6 +2645,16 @@ public class CfDef implements org.apache.thrift.TBase<CfDef, CfDef._Fields>, jav
return lastComparison;
}
}
+ lastComparison = Boolean.valueOf(isSetPopulate_io_cache_on_flush()).compareTo(typedOther.isSetPopulate_io_cache_on_flush());
+ if (lastComparison != 0) {
+ return lastComparison;
+ }
+ if (isSetPopulate_io_cache_on_flush()) {
+ lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.populate_io_cache_on_flush, typedOther.populate_io_cache_on_flush);
+ if (lastComparison != 0) {
+ return lastComparison;
+ }
+ }
lastComparison = Boolean.valueOf(isSetRow_cache_size()).compareTo(typedOther.isSetRow_cache_size());
if (lastComparison != 0) {
return lastComparison;
@@ -2906,6 +2969,14 @@ public class CfDef implements org.apache.thrift.TBase<CfDef, CfDef._Fields>, jav
org.apache.thrift.protocol.TProtocolUtil.skip(iprot, field.type);
}
break;
+ case 38: // POPULATE_IO_CACHE_ON_FLUSH
+ if (field.type == org.apache.thrift.protocol.TType.BOOL) {
+ this.populate_io_cache_on_flush = iprot.readBool();
+ setPopulate_io_cache_on_flushIsSet(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();
@@ -3209,6 +3280,11 @@ public class CfDef implements org.apache.thrift.TBase<CfDef, CfDef._Fields>, jav
oprot.writeDouble(this.dclocal_read_repair_chance);
oprot.writeFieldEnd();
}
+ if (isSetPopulate_io_cache_on_flush()) {
+ oprot.writeFieldBegin(POPULATE_IO_CACHE_ON_FLUSH_FIELD_DESC);
+ oprot.writeBool(this.populate_io_cache_on_flush);
+ oprot.writeFieldEnd();
+ }
oprot.writeFieldStop();
oprot.writeStructEnd();
}
@@ -3401,6 +3477,12 @@ public class CfDef implements org.apache.thrift.TBase<CfDef, CfDef._Fields>, jav
sb.append(this.dclocal_read_repair_chance);
first = false;
}
+ if (isSetPopulate_io_cache_on_flush()) {
+ if (!first) sb.append(", ");
+ sb.append("populate_io_cache_on_flush:");
+ sb.append(this.populate_io_cache_on_flush);
+ 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/21f63a91/pylib/cqlshlib/cql3handling.py
----------------------------------------------------------------------
diff --git a/pylib/cqlshlib/cql3handling.py b/pylib/cqlshlib/cql3handling.py
index f620d28..27bd67b 100644
--- a/pylib/cqlshlib/cql3handling.py
+++ b/pylib/cqlshlib/cql3handling.py
@@ -64,6 +64,7 @@ class Cql3ParsingRuleSet(CqlParsingRuleSet):
('gc_grace_seconds', None),
('read_repair_chance', None),
('replicate_on_write', None),
+ ('populate_io_cache_on_flush', None),
)
old_columnfamily_layout_options = (
@@ -76,6 +77,7 @@ class Cql3ParsingRuleSet(CqlParsingRuleSet):
('gc_grace_seconds', None),
('read_repair_chance', None),
('replicate_on_write', None),
+ ('populate_io_cache_on_flush', None),
)
new_columnfamily_layout_options = (
@@ -86,6 +88,7 @@ class Cql3ParsingRuleSet(CqlParsingRuleSet):
('gc_grace_seconds', None),
('read_repair_chance', None),
('replicate_on_write', None),
+ ('populate_io_cache_on_flush', None),
)
old_columnfamily_layout_map_options = (
@@ -492,7 +495,7 @@ def cf_new_prop_val_completer(ctxt, cass):
if this_opt in ('read_repair_chance', 'bloom_filter_fp_chance',
'dclocal_read_repair_chance'):
return [Hint('<float_between_0_and_1>')]
- if this_opt == 'replicate_on_write':
+ if this_opt in ('replicate_on_write', 'populate_io_cache_on_flush'):
return ["'yes'", "'no'"]
if this_opt in ('min_compaction_threshold', 'max_compaction_threshold',
'gc_grace_seconds'):
@@ -628,7 +631,7 @@ def cf_old_prop_val_completer(ctxt, cass):
return simple_cql_types
if this_opt in ('read_repair_chance', 'bloom_filter_fp_chance'):
return [Hint('<float_between_0_and_1>')]
- if this_opt == 'replicate_on_write':
+ if this_opt in ('replicate_on_write', 'populate_io_cache_on_flush'):
return [Hint('<yes_or_no>')]
if this_opt in ('min_compaction_threshold', 'max_compaction_threshold', 'gc_grace_seconds'):
return [Hint('<integer>')]
http://git-wip-us.apache.org/repos/asf/cassandra/blob/21f63a91/pylib/cqlshlib/cqlhandling.py
----------------------------------------------------------------------
diff --git a/pylib/cqlshlib/cqlhandling.py b/pylib/cqlshlib/cqlhandling.py
index e085df5..83e1dc2 100644
--- a/pylib/cqlshlib/cqlhandling.py
+++ b/pylib/cqlshlib/cqlhandling.py
@@ -50,6 +50,7 @@ class CqlParsingRuleSet(pylexotron.ParsingRuleSet):
('max_compaction_threshold', None),
('replicate_on_write', None),
('compaction_strategy_class', 'compaction_strategy'),
+ ('populate_io_cache_on_flush', None),
)
obsolete_cf_options = (
@@ -832,7 +833,7 @@ def create_cf_option_val_completer(ctxt, cass):
return cqltypes.cql_types
if this_opt == 'read_repair_chance':
return [Hint('<float_between_0_and_1>')]
- if this_opt == 'replicate_on_write':
+ if this_opt in ('replicate_on_write', 'populate_io_cache_on_flush'):
return [Hint('<yes_or_no>')]
if this_opt in ('min_compaction_threshold', 'max_compaction_threshold', 'gc_grace_seconds'):
return [Hint('<integer>')]
http://git-wip-us.apache.org/repos/asf/cassandra/blob/21f63a91/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 e7a934b..8e297ee 100644
--- a/src/java/org/apache/cassandra/cli/CliClient.java
+++ b/src/java/org/apache/cassandra/cli/CliClient.java
@@ -137,7 +137,8 @@ public class CliClient
COMPACTION_STRATEGY_OPTIONS,
COMPRESSION_OPTIONS,
BLOOM_FILTER_FP_CHANCE,
- CACHING
+ CACHING,
+ POPULATE_IO_CACHE_ON_FLUSH
}
private static final String DEFAULT_PLACEMENT_STRATEGY = "org.apache.cassandra.locator.NetworkTopologyStrategy";
@@ -1326,6 +1327,9 @@ public class CliClient
case CACHING:
cfDef.setCaching(CliUtils.unescapeSQLString(mValue));
break;
+ case POPULATE_IO_CACHE_ON_FLUSH:
+ cfDef.setPopulate_io_cache_on_flush(Boolean.parseBoolean(mValue));
+ break;
default:
//must match one of the above or we'd throw an exception at the valueOf statement above.
assert(false);
@@ -1774,6 +1778,7 @@ public class CliClient
writeAttr(output, false, "read_repair_chance", cfDef.read_repair_chance);
writeAttr(output, false, "dclocal_read_repair_chance", cfDef.dclocal_read_repair_chance);
+ writeAttr(output, false, "populate_io_cache_on_flush", cfDef.populate_io_cache_on_flush);
writeAttr(output, false, "gc_grace", cfDef.gc_grace_seconds);
writeAttr(output, false, "min_compaction_threshold", cfDef.min_compaction_threshold);
writeAttr(output, false, "max_compaction_threshold", cfDef.max_compaction_threshold);
@@ -2143,6 +2148,7 @@ public class CliClient
sessionState.out.printf(" Compaction min/max thresholds: %s/%s%n", cf_def.min_compaction_threshold, cf_def.max_compaction_threshold);
sessionState.out.printf(" Read repair chance: %s%n", cf_def.read_repair_chance);
sessionState.out.printf(" DC Local Read repair chance: %s%n", cf_def.dclocal_read_repair_chance);
+ sessionState.out.printf(" Populate IO Cache on flush: %b%n", cf_def.populate_io_cache_on_flush);
sessionState.out.printf(" Replicate on write: %s%n", cf_def.replicate_on_write);
sessionState.out.printf(" Caching: %s%n", cf_def.caching);
sessionState.out.printf(" Bloom Filter FP chance: %s%n", cf_def.isSetBloom_filter_fp_chance() ? cf_def.bloom_filter_fp_chance : "default");
http://git-wip-us.apache.org/repos/asf/cassandra/blob/21f63a91/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 c829fa3..7fba681 100644
--- a/src/java/org/apache/cassandra/config/CFMetaData.java
+++ b/src/java/org/apache/cassandra/config/CFMetaData.java
@@ -77,6 +77,7 @@ public final class CFMetaData
public final static Class<? extends AbstractCompactionStrategy> DEFAULT_COMPACTION_STRATEGY_CLASS = SizeTieredCompactionStrategy.class;
public final static ByteBuffer DEFAULT_KEY_NAME = ByteBufferUtil.bytes("KEY");
public final static Caching DEFAULT_CACHING_STRATEGY = Caching.KEYS_ONLY;
+ public final static boolean DEFAULT_POPULATE_IO_CACHE_ON_FLUSH = false;
// Note that this is the default only for user created tables
public final static String DEFAULT_COMPRESSOR = SnappyCompressor.isAvailable() ? SnappyCompressor.class.getCanonicalName() : null;
@@ -129,6 +130,7 @@ public final class CFMetaData
+ "key_aliases text,"
+ "bloom_filter_fp_chance double,"
+ "caching text,"
+ + "populate_io_cache_on_flush boolean,"
+ "compaction_strategy_class text,"
+ "compression_parameters text,"
+ "value_alias text,"
@@ -266,6 +268,7 @@ public final class CFMetaData
private volatile ByteBuffer valueAlias = null;
private volatile Double bloomFilterFpChance = null;
private volatile Caching caching = DEFAULT_CACHING_STRATEGY;
+ private volatile boolean populateIoCacheOnFlush = DEFAULT_POPULATE_IO_CACHE_ON_FLUSH;
volatile Map<ByteBuffer, ColumnDefinition> column_metadata = new HashMap<ByteBuffer,ColumnDefinition>();
public volatile Class<? extends AbstractCompactionStrategy> compactionStrategyClass = DEFAULT_COMPACTION_STRATEGY_CLASS;
@@ -296,6 +299,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 populateIoCacheOnFlush(boolean prop) {populateIoCacheOnFlush = prop; return this;}
public CFMetaData(String keyspace, String name, ColumnFamilyType type, AbstractType<?> comp, AbstractType<?> subcc)
{
@@ -434,7 +438,8 @@ public final class CFMetaData
.compactionStrategyOptions(oldCFMD.compactionStrategyOptions)
.compressionParameters(oldCFMD.compressionParameters)
.bloomFilterFpChance(oldCFMD.bloomFilterFpChance)
- .caching(oldCFMD.caching);
+ .caching(oldCFMD.caching)
+ .populateIoCacheOnFlush(oldCFMD.populateIoCacheOnFlush);
}
/**
@@ -483,6 +488,11 @@ public final class CFMetaData
return replicateOnWrite;
}
+ public boolean populateIoCacheOnFlush()
+ {
+ return populateIoCacheOnFlush;
+ }
+
public int getGcGraceSeconds()
{
return gcGraceSeconds;
@@ -597,6 +607,7 @@ public final class CFMetaData
.append(compressionParameters, rhs.compressionParameters)
.append(bloomFilterFpChance, rhs.bloomFilterFpChance)
.append(caching, rhs.caching)
+ .append(populateIoCacheOnFlush, rhs.populateIoCacheOnFlush)
.isEquals();
}
@@ -627,6 +638,7 @@ public final class CFMetaData
.append(compressionParameters)
.append(bloomFilterFpChance)
.append(caching)
+ .append(populateIoCacheOnFlush)
.toHashCode();
}
@@ -649,6 +661,8 @@ public final class CFMetaData
cf_def.setComment("");
if (!cf_def.isSetReplicate_on_write())
cf_def.setReplicate_on_write(CFMetaData.DEFAULT_REPLICATE_ON_WRITE);
+ if (!cf_def.isSetPopulate_io_cache_on_flush())
+ cf_def.setPopulate_io_cache_on_flush(CFMetaData.DEFAULT_POPULATE_IO_CACHE_ON_FLUSH);
if (!cf_def.isSetMin_compaction_threshold())
cf_def.setMin_compaction_threshold(CFMetaData.DEFAULT_MIN_COMPACTION_THRESHOLD);
if (!cf_def.isSetMax_compaction_threshold())
@@ -704,6 +718,8 @@ public final class CFMetaData
newCFMD.readRepairChance(cf_def.read_repair_chance);
if (cf_def.isSetDclocal_read_repair_chance())
newCFMD.dcLocalReadRepairChance(cf_def.dclocal_read_repair_chance);
+ if (cf_def.isSetPopulate_io_cache_on_flush())
+ newCFMD.populateIoCacheOnFlush(cf_def.populate_io_cache_on_flush);
CompressionParameters cp = CompressionParameters.create(cf_def.compression_options);
@@ -786,6 +802,7 @@ public final class CFMetaData
bloomFilterFpChance = cfm.bloomFilterFpChance;
caching = cfm.caching;
+ populateIoCacheOnFlush = cfm.populateIoCacheOnFlush;
MapDifference<ByteBuffer, ColumnDefinition> columnDiff = Maps.difference(column_metadata, cfm.column_metadata);
// columns that are no longer needed
@@ -921,6 +938,7 @@ public final class CFMetaData
def.setRead_repair_chance(readRepairChance);
def.setDclocal_read_repair_chance(dcLocalReadRepairChance);
def.setReplicate_on_write(replicateOnWrite);
+ def.setPopulate_io_cache_on_flush(populateIoCacheOnFlush);
def.setGc_grace_seconds(gcGraceSeconds);
def.setDefault_validation_class(defaultValidator == null ? null : defaultValidator.toString());
def.setKey_validation_class(keyValidator.toString());
@@ -1272,6 +1290,7 @@ public final class CFMetaData
cf.addColumn(DeletedColumn.create(ldt, timestamp, cfName, "read_repair_chance"));
cf.addColumn(DeletedColumn.create(ldt, timestamp, cfName, "local_read_repair_chance"));
cf.addColumn(DeletedColumn.create(ldt, timestamp, cfName, "replicate_on_write"));
+ cf.addColumn(DeletedColumn.create(ldt, timestamp, cfName, "populate_io_cache_on_flush"));
cf.addColumn(DeletedColumn.create(ldt, timestamp, cfName, "gc_grace_seconds"));
cf.addColumn(DeletedColumn.create(ldt, timestamp, cfName, "default_validator"));
cf.addColumn(DeletedColumn.create(ldt, timestamp, cfName, "key_validator"));
@@ -1322,6 +1341,7 @@ public final class CFMetaData
cf.addColumn(Column.create(readRepairChance, timestamp, cfName, "read_repair_chance"));
cf.addColumn(Column.create(dcLocalReadRepairChance, timestamp, cfName, "local_read_repair_chance"));
cf.addColumn(Column.create(replicateOnWrite, timestamp, cfName, "replicate_on_write"));
+ cf.addColumn(Column.create(populateIoCacheOnFlush, timestamp, cfName, "populate_io_cache_on_flush"));
cf.addColumn(Column.create(gcGraceSeconds, timestamp, cfName, "gc_grace_seconds"));
cf.addColumn(Column.create(defaultValidator.toString(), timestamp, cfName, "default_validator"));
cf.addColumn(Column.create(keyValidator.toString(), timestamp, cfName, "key_validator"));
@@ -1381,6 +1401,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("populate_io_cache_on_flush"))
+ cfm.populateIoCacheOnFlush(result.getBoolean("populate_io_cache_on_flush"));
return cfm;
}
@@ -1544,6 +1566,7 @@ public final class CFMetaData
.append("compressionOptions", compressionParameters.asThriftOptions())
.append("bloomFilterFpChance", bloomFilterFpChance)
.append("caching", caching)
+ .append("populateIoCacheOnFlush", populateIoCacheOnFlush)
.toString();
}
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/21f63a91/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 7c33203..18d856c 100644
--- a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
+++ b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
@@ -203,8 +203,6 @@ public class DatabaseDescriptor
logger.info("disk_failure_policy is " + conf.disk_failure_policy);
- logger.debug("page_cache_hinting is " + conf.populate_io_cache_on_flush);
-
/* Authentication and authorization backend, implementing IAuthenticator and IAuthorizer */
if (conf.authenticator != null)
authenticator = FBUtilities.construct(conf.authenticator, "authenticator");
@@ -1256,11 +1254,6 @@ public class DatabaseDescriptor
return conf.streaming_socket_timeout_in_ms;
}
- public static boolean populateIOCacheOnFlush()
- {
- return conf.populate_io_cache_on_flush;
- }
-
public static String getLocalDataCenter()
{
return localDC;
http://git-wip-us.apache.org/repos/asf/cassandra/blob/21f63a91/src/java/org/apache/cassandra/cql/AlterTableStatement.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql/AlterTableStatement.java b/src/java/org/apache/cassandra/cql/AlterTableStatement.java
index a0ebc30..c73aaf9 100644
--- a/src/java/org/apache/cassandra/cql/AlterTableStatement.java
+++ b/src/java/org/apache/cassandra/cql/AlterTableStatement.java
@@ -186,6 +186,7 @@ public class AlterTableStatement
cfm.minCompactionThreshold(cfProps.getPropertyInt(CFPropDefs.KW_MINCOMPACTIONTHRESHOLD, cfm.getMinCompactionThreshold()));
cfm.maxCompactionThreshold(cfProps.getPropertyInt(CFPropDefs.KW_MAXCOMPACTIONTHRESHOLD, cfm.getMaxCompactionThreshold()));
cfm.caching(CFMetaData.Caching.fromString(cfProps.getPropertyString(CFPropDefs.KW_CACHING, cfm.getCaching().toString())));
+ cfm.populateIoCacheOnFlush(cfProps.getPropertyBoolean(CFPropDefs.KW_POPULATE_IO_CACHE_ON_FLUSH, cfm.populateIoCacheOnFlush()));
cfm.bloomFilterFpChance(cfProps.getPropertyDouble(CFPropDefs.KW_BF_FP_CHANCE, cfm.getBloomFilterFpChance()));
if (!cfProps.compactionStrategyOptions.isEmpty())
http://git-wip-us.apache.org/repos/asf/cassandra/blob/21f63a91/src/java/org/apache/cassandra/cql/CFPropDefs.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql/CFPropDefs.java b/src/java/org/apache/cassandra/cql/CFPropDefs.java
index b488ecf..7185b52 100644
--- a/src/java/org/apache/cassandra/cql/CFPropDefs.java
+++ b/src/java/org/apache/cassandra/cql/CFPropDefs.java
@@ -48,6 +48,7 @@ public class CFPropDefs {
public static final String KW_REPLICATEONWRITE = "replicate_on_write";
public static final String KW_COMPACTION_STRATEGY_CLASS = "compaction_strategy_class";
public static final String KW_CACHING = "caching";
+ public static final String KW_POPULATE_IO_CACHE_ON_FLUSH = "populate_io_cache_on_flush";
public static final String KW_BF_FP_CHANCE = "bloom_filter_fp_chance";
// Maps CQL short names to the respective Cassandra comparator/validator class names
@@ -87,6 +88,7 @@ public class CFPropDefs {
keywords.add(KW_REPLICATEONWRITE);
keywords.add(KW_COMPACTION_STRATEGY_CLASS);
keywords.add(KW_CACHING);
+ keywords.add(KW_POPULATE_IO_CACHE_ON_FLUSH);
keywords.add(KW_BF_FP_CHANCE);
obsoleteKeywords.add("row_cache_size");
http://git-wip-us.apache.org/repos/asf/cassandra/blob/21f63a91/src/java/org/apache/cassandra/cql/CreateColumnFamilyStatement.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql/CreateColumnFamilyStatement.java b/src/java/org/apache/cassandra/cql/CreateColumnFamilyStatement.java
index 41fb291..3221e48 100644
--- a/src/java/org/apache/cassandra/cql/CreateColumnFamilyStatement.java
+++ b/src/java/org/apache/cassandra/cql/CreateColumnFamilyStatement.java
@@ -194,7 +194,8 @@ public class CreateColumnFamilyStatement
.compactionStrategyOptions(cfProps.compactionStrategyOptions)
.compressionParameters(CompressionParameters.create(cfProps.compressionParameters))
.caching(CFMetaData.Caching.fromString(getPropertyString(CFPropDefs.KW_CACHING, CFMetaData.DEFAULT_CACHING_STRATEGY.toString())))
- .bloomFilterFpChance(getPropertyDouble(CFPropDefs.KW_BF_FP_CHANCE, null));
+ .bloomFilterFpChance(getPropertyDouble(CFPropDefs.KW_BF_FP_CHANCE, null))
+ .populateIoCacheOnFlush(getPropertyBoolean(CFPropDefs.KW_POPULATE_IO_CACHE_ON_FLUSH, CFMetaData.DEFAULT_POPULATE_IO_CACHE_ON_FLUSH));
// CQL2 can have null keyAliases
if (keyAlias != null)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/21f63a91/src/java/org/apache/cassandra/cql3/CFPropDefs.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/CFPropDefs.java b/src/java/org/apache/cassandra/cql3/CFPropDefs.java
index c546cfc..ccef5f8 100644
--- a/src/java/org/apache/cassandra/cql3/CFPropDefs.java
+++ b/src/java/org/apache/cassandra/cql3/CFPropDefs.java
@@ -40,6 +40,7 @@ public class CFPropDefs extends PropertyDefinitions
public static final String KW_MAXCOMPACTIONTHRESHOLD = "max_threshold";
public static final String KW_REPLICATEONWRITE = "replicate_on_write";
public static final String KW_CACHING = "caching";
+ public static final String KW_POPULATE_IO_CACHE_ON_FLUSH = "populate_io_cache_on_flush";
public static final String KW_BF_FP_CHANCE = "bloom_filter_fp_chance";
public static final String KW_COMPACTION = "compaction";
@@ -58,6 +59,7 @@ public class CFPropDefs extends PropertyDefinitions
keywords.add(KW_GCGRACESECONDS);
keywords.add(KW_REPLICATEONWRITE);
keywords.add(KW_CACHING);
+ keywords.add(KW_POPULATE_IO_CACHE_ON_FLUSH);
keywords.add(KW_BF_FP_CHANCE);
keywords.add(KW_COMPACTION);
keywords.add(KW_COMPRESSION);
@@ -123,6 +125,7 @@ public class CFPropDefs extends PropertyDefinitions
cfm.minCompactionThreshold(toInt(KW_MINCOMPACTIONTHRESHOLD, getCompactionOptions().get(KW_MINCOMPACTIONTHRESHOLD), cfm.getMinCompactionThreshold()));
cfm.maxCompactionThreshold(toInt(KW_MAXCOMPACTIONTHRESHOLD, getCompactionOptions().get(KW_MAXCOMPACTIONTHRESHOLD), cfm.getMaxCompactionThreshold()));
cfm.caching(CFMetaData.Caching.fromString(getString(KW_CACHING, cfm.getCaching().toString())));
+ cfm.populateIoCacheOnFlush(getBoolean(KW_POPULATE_IO_CACHE_ON_FLUSH, cfm.populateIoCacheOnFlush()));
if (compactionStrategyClass != null)
{
http://git-wip-us.apache.org/repos/asf/cassandra/blob/21f63a91/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 f578064..e05a34e 100644
--- a/src/java/org/apache/cassandra/io/sstable/SSTableWriter.java
+++ b/src/java/org/apache/cassandra/io/sstable/SSTableWriter.java
@@ -96,7 +96,7 @@ public class SSTableWriter extends SSTable
dbuilder = SegmentedFile.getCompressedBuilder();
dataFile = CompressedSequentialWriter.open(getFilename(),
descriptor.filenameFor(Component.COMPRESSION_INFO),
- !DatabaseDescriptor.populateIOCacheOnFlush(),
+ !metadata.populateIoCacheOnFlush(),
metadata.compressionParameters(),
sstableMetadataCollector);
}
@@ -104,7 +104,7 @@ public class SSTableWriter extends SSTable
{
dbuilder = SegmentedFile.getBuilder(DatabaseDescriptor.getDiskAccessMode());
dataFile = SequentialWriter.open(new File(getFilename()),
- !DatabaseDescriptor.populateIOCacheOnFlush());
+ !metadata.populateIoCacheOnFlush());
dataFile.setComputeDigest();
}
@@ -439,7 +439,7 @@ public class SSTableWriter extends SSTable
IndexWriter(long keyCount)
{
indexFile = SequentialWriter.open(new File(descriptor.filenameFor(SSTable.COMPONENT_INDEX)),
- !DatabaseDescriptor.populateIOCacheOnFlush());
+ !metadata.populateIoCacheOnFlush());
builder = SegmentedFile.getBuilder(DatabaseDescriptor.getIndexAccessMode());
summary = new IndexSummary(keyCount);
bf = FilterFactory.getFilter(keyCount, metadata.getBloomFilterFpChance(), true);
http://git-wip-us.apache.org/repos/asf/cassandra/blob/21f63a91/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..73467cd 100644
--- a/src/resources/org/apache/cassandra/cli/CliHelp.yaml
+++ b/src/resources/org/apache/cassandra/cli/CliHelp.yaml
@@ -539,6 +539,9 @@ commands:
- replicate_on_write: Replicate every counter update from the leader to the
follower replicas. Accepts the values true and false.
+ - populate_io_cache_on_flush: Populates the page cache on memtable flush
+ and compaction. Accepts the values true and false.
+
- compression_options: Options related to compression.
Options have the form {key:value}.
The main recognized options are:
@@ -808,6 +811,9 @@ commands:
- replicate_on_write: Replicate every counter update from the leader to the
follower replicas. Accepts the values true and false.
+ - populate_io_cache_on_flush: Populates the page cache on memtable flush
+ and compaction. Accepts the values true and false.
+
- compression_options: Options related to compression.
Options have the form {key:value}.
The main recognized options are: