Return-Path: X-Original-To: apmail-cassandra-commits-archive@www.apache.org Delivered-To: apmail-cassandra-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 51E74BA17 for ; Mon, 2 Jan 2012 19:34:42 +0000 (UTC) Received: (qmail 83014 invoked by uid 500); 2 Jan 2012 19:34:42 -0000 Delivered-To: apmail-cassandra-commits-archive@cassandra.apache.org Received: (qmail 82971 invoked by uid 500); 2 Jan 2012 19:34:42 -0000 Mailing-List: contact commits-help@cassandra.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cassandra.apache.org Delivered-To: mailing list commits@cassandra.apache.org Received: (qmail 82963 invoked by uid 99); 2 Jan 2012 19:34:42 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 02 Jan 2012 19:34:42 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.114] (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 02 Jan 2012 19:34:39 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id CA642315540; Mon, 2 Jan 2012 19:34:18 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: xedin@apache.org To: commits@cassandra.apache.org X-Mailer: ASF-Git Admin Mailer Subject: git commit: a way to deactivate global key/row cache on per-CF basis patch by Pavel Yaskevich; reviewed by Sylvain Lebresne for CASSANDRA-3667 Message-Id: <20120102193418.CA642315540@tyr.zones.apache.org> Date: Mon, 2 Jan 2012 19:34:18 +0000 (UTC) Updated Branches: refs/heads/trunk 329dd758e -> b9813ed38 a way to deactivate global key/row cache on per-CF basis patch by Pavel Yaskevich; reviewed by Sylvain Lebresne for CASSANDRA-3667 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/b9813ed3 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/b9813ed3 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/b9813ed3 Branch: refs/heads/trunk Commit: b9813ed388f9672ac4099d4a72c6362edc442ede Parents: 329dd75 Author: Pavel Yaskevich Authored: Mon Jan 2 22:30:16 2012 +0200 Committer: Pavel Yaskevich Committed: Mon Jan 2 22:30:16 2012 +0200 ---------------------------------------------------------------------- CHANGES.txt | 1 + interface/cassandra.thrift | 3 +- .../org/apache/cassandra/thrift/Cassandra.java | 6 +- .../org/apache/cassandra/thrift/CfDef.java | 101 ++++++++++++++- .../org/apache/cassandra/thrift/Constants.java | 2 +- src/avro/internode.genavro | 1 + src/java/org/apache/cassandra/cli/CliClient.java | 8 +- .../org/apache/cassandra/config/CFMetaData.java | 42 ++++++- .../org/apache/cassandra/db/ColumnFamilyStore.java | 7 +- .../apache/cassandra/io/sstable/SSTableReader.java | 4 +- test/unit/org/apache/cassandra/SchemaLoader.java | 4 +- 11 files changed, 164 insertions(+), 15 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/b9813ed3/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index bfb0d85..24f4656 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -36,6 +36,7 @@ * optimize memtable iteration during range scan (CASSANDRA-3638) * introduce 'crc_check_chance' in CompressionParameters to support a checksum percentage checking chance similarly to read-repair (CASSANDRA-3611) + * a way to deactivate global key/row cache on per-CF basis (CASSANDRA-3667) 1.0.7 http://git-wip-us.apache.org/repos/asf/cassandra/blob/b9813ed3/interface/cassandra.thrift ---------------------------------------------------------------------- diff --git a/interface/cassandra.thrift b/interface/cassandra.thrift index c67abce..a35387b 100644 --- a/interface/cassandra.thrift +++ b/interface/cassandra.thrift @@ -46,7 +46,7 @@ namespace rb CassandraThrift # for every edit that doesn't result in a change to major/minor. # # See the Semantic Versioning Specification (SemVer) http://semver.org. -const string VERSION = "19.24.0" +const string VERSION = "19.25.0" # @@ -414,6 +414,7 @@ struct CfDef { 30: optional map compaction_strategy_options, 32: optional map compression_options, 33: optional double bloom_filter_fp_chance, + 34: optional string caching="keys_only", } /* describes a keyspace. */ http://git-wip-us.apache.org/repos/asf/cassandra/blob/b9813ed3/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java ---------------------------------------------------------------------- diff --git a/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java b/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java index 7ad6b2d..eb0310b 100644 --- a/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java +++ b/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java @@ -9359,6 +9359,8 @@ public class Cassandra { private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException { try { + // it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor. + __isset_bit_vector = new BitSet(1); read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in))); } catch (org.apache.thrift.TException te) { throw new java.io.IOException(te); @@ -17314,6 +17316,8 @@ public class Cassandra { private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException { try { + // it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor. + __isset_bit_vector = new BitSet(1); read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in))); } catch (org.apache.thrift.TException te) { throw new java.io.IOException(te); @@ -26117,8 +26121,6 @@ public class Cassandra { private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException { try { - // it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor. - __isset_bit_vector = new BitSet(1); read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in))); } catch (org.apache.thrift.TException te) { throw new java.io.IOException(te); http://git-wip-us.apache.org/repos/asf/cassandra/blob/b9813ed3/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 a910614..7062415 100644 --- a/interface/thrift/gen-java/org/apache/cassandra/thrift/CfDef.java +++ b/interface/thrift/gen-java/org/apache/cassandra/thrift/CfDef.java @@ -66,6 +66,7 @@ public class CfDef implements org.apache.thrift.TBase, jav private static final org.apache.thrift.protocol.TField COMPACTION_STRATEGY_OPTIONS_FIELD_DESC = new org.apache.thrift.protocol.TField("compaction_strategy_options", org.apache.thrift.protocol.TType.MAP, (short)30); private static final org.apache.thrift.protocol.TField COMPRESSION_OPTIONS_FIELD_DESC = new org.apache.thrift.protocol.TField("compression_options", org.apache.thrift.protocol.TType.MAP, (short)32); private static final org.apache.thrift.protocol.TField BLOOM_FILTER_FP_CHANCE_FIELD_DESC = new org.apache.thrift.protocol.TField("bloom_filter_fp_chance", org.apache.thrift.protocol.TType.DOUBLE, (short)33); + private static final org.apache.thrift.protocol.TField CACHING_FIELD_DESC = new org.apache.thrift.protocol.TField("caching", org.apache.thrift.protocol.TType.STRING, (short)34); public String keyspace; public String name; @@ -88,6 +89,7 @@ public class CfDef implements org.apache.thrift.TBase, jav public Map compaction_strategy_options; public Map compression_options; public double bloom_filter_fp_chance; + public String caching; /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */ public enum _Fields implements org.apache.thrift.TFieldIdEnum { @@ -111,7 +113,8 @@ public class CfDef implements org.apache.thrift.TBase, jav COMPACTION_STRATEGY((short)29, "compaction_strategy"), COMPACTION_STRATEGY_OPTIONS((short)30, "compaction_strategy_options"), COMPRESSION_OPTIONS((short)32, "compression_options"), - BLOOM_FILTER_FP_CHANCE((short)33, "bloom_filter_fp_chance"); + BLOOM_FILTER_FP_CHANCE((short)33, "bloom_filter_fp_chance"), + CACHING((short)34, "caching"); private static final Map byName = new HashMap(); @@ -168,6 +171,8 @@ public class CfDef implements org.apache.thrift.TBase, jav return COMPRESSION_OPTIONS; case 33: // BLOOM_FILTER_FP_CHANCE return BLOOM_FILTER_FP_CHANCE; + case 34: // CACHING + return CACHING; default: return null; } @@ -268,6 +273,8 @@ public class CfDef implements org.apache.thrift.TBase, jav new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)))); tmpMap.put(_Fields.BLOOM_FILTER_FP_CHANCE, new org.apache.thrift.meta_data.FieldMetaData("bloom_filter_fp_chance", org.apache.thrift.TFieldRequirementType.OPTIONAL, new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.DOUBLE))); + tmpMap.put(_Fields.CACHING, new org.apache.thrift.meta_data.FieldMetaData("caching", org.apache.thrift.TFieldRequirementType.OPTIONAL, + new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING))); metaDataMap = Collections.unmodifiableMap(tmpMap); org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(CfDef.class, metaDataMap); } @@ -279,6 +286,8 @@ public class CfDef implements org.apache.thrift.TBase, jav this.read_repair_chance = 1; + this.caching = "keys_only"; + } public CfDef( @@ -372,6 +381,9 @@ public class CfDef implements org.apache.thrift.TBase, jav this.compression_options = __this__compression_options; } this.bloom_filter_fp_chance = other.bloom_filter_fp_chance; + if (other.isSetCaching()) { + this.caching = other.caching; + } } public CfDef deepCopy() { @@ -411,6 +423,8 @@ public class CfDef implements org.apache.thrift.TBase, jav this.compression_options = null; setBloom_filter_fp_chanceIsSet(false); this.bloom_filter_fp_chance = 0.0; + this.caching = "keys_only"; + } public String getKeyspace() { @@ -956,6 +970,30 @@ public class CfDef implements org.apache.thrift.TBase, jav __isset_bit_vector.set(__BLOOM_FILTER_FP_CHANCE_ISSET_ID, value); } + public String getCaching() { + return this.caching; + } + + public CfDef setCaching(String caching) { + this.caching = caching; + return this; + } + + public void unsetCaching() { + this.caching = null; + } + + /** Returns true if field caching is set (has been assigned a value) and false otherwise */ + public boolean isSetCaching() { + return this.caching != null; + } + + public void setCachingIsSet(boolean value) { + if (!value) { + this.caching = null; + } + } + public void setFieldValue(_Fields field, Object value) { switch (field) { case KEYSPACE: @@ -1126,6 +1164,14 @@ public class CfDef implements org.apache.thrift.TBase, jav } break; + case CACHING: + if (value == null) { + unsetCaching(); + } else { + setCaching((String)value); + } + break; + } } @@ -1194,6 +1240,9 @@ public class CfDef implements org.apache.thrift.TBase, jav case BLOOM_FILTER_FP_CHANCE: return new Double(getBloom_filter_fp_chance()); + case CACHING: + return getCaching(); + } throw new IllegalStateException(); } @@ -1247,6 +1296,8 @@ public class CfDef implements org.apache.thrift.TBase, jav return isSetCompression_options(); case BLOOM_FILTER_FP_CHANCE: return isSetBloom_filter_fp_chance(); + case CACHING: + return isSetCaching(); } throw new IllegalStateException(); } @@ -1453,6 +1504,15 @@ public class CfDef implements org.apache.thrift.TBase, jav return false; } + boolean this_present_caching = true && this.isSetCaching(); + boolean that_present_caching = true && that.isSetCaching(); + if (this_present_caching || that_present_caching) { + if (!(this_present_caching && that_present_caching)) + return false; + if (!this.caching.equals(that.caching)) + return false; + } + return true; } @@ -1565,6 +1625,11 @@ public class CfDef implements org.apache.thrift.TBase, jav if (present_bloom_filter_fp_chance) builder.append(bloom_filter_fp_chance); + boolean present_caching = true && (isSetCaching()); + builder.append(present_caching); + if (present_caching) + builder.append(caching); + return builder.toHashCode(); } @@ -1786,6 +1851,16 @@ public class CfDef implements org.apache.thrift.TBase, jav return lastComparison; } } + lastComparison = Boolean.valueOf(isSetCaching()).compareTo(typedOther.isSetCaching()); + if (lastComparison != 0) { + return lastComparison; + } + if (isSetCaching()) { + lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.caching, typedOther.caching); + if (lastComparison != 0) { + return lastComparison; + } + } return 0; } @@ -1993,6 +2068,13 @@ public class CfDef implements org.apache.thrift.TBase, jav org.apache.thrift.protocol.TProtocolUtil.skip(iprot, field.type); } break; + case 34: // CACHING + if (field.type == org.apache.thrift.protocol.TType.STRING) { + this.caching = iprot.readString(); + } else { + org.apache.thrift.protocol.TProtocolUtil.skip(iprot, field.type); + } + break; default: org.apache.thrift.protocol.TProtocolUtil.skip(iprot, field.type); } @@ -2158,6 +2240,13 @@ public class CfDef implements org.apache.thrift.TBase, jav oprot.writeDouble(this.bloom_filter_fp_chance); oprot.writeFieldEnd(); } + if (this.caching != null) { + if (isSetCaching()) { + oprot.writeFieldBegin(CACHING_FIELD_DESC); + oprot.writeString(this.caching); + oprot.writeFieldEnd(); + } + } oprot.writeFieldStop(); oprot.writeStructEnd(); } @@ -2340,6 +2429,16 @@ public class CfDef implements org.apache.thrift.TBase, jav sb.append(this.bloom_filter_fp_chance); first = false; } + if (isSetCaching()) { + if (!first) sb.append(", "); + sb.append("caching:"); + if (this.caching == null) { + sb.append("null"); + } else { + sb.append(this.caching); + } + first = false; + } sb.append(")"); return sb.toString(); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/b9813ed3/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 22ab877..15ad1f1 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.24.0"; + public static final String VERSION = "19.25.0"; } http://git-wip-us.apache.org/repos/asf/cassandra/blob/b9813ed3/src/avro/internode.genavro ---------------------------------------------------------------------- diff --git a/src/avro/internode.genavro b/src/avro/internode.genavro index 13de0e5..d1ea002 100644 --- a/src/avro/internode.genavro +++ b/src/avro/internode.genavro @@ -66,6 +66,7 @@ protocol InterNode { union { null, map } compaction_strategy_options = null; union { null, map } compression_options = null; union { null, double } bloom_filter_fp_chance = null; + string caching = "keys_only"; } @aliases(["org.apache.cassandra.config.avro.KsDef"]) http://git-wip-us.apache.org/repos/asf/cassandra/blob/b9813ed3/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 7a39c97..ee6b609 100644 --- a/src/java/org/apache/cassandra/cli/CliClient.java +++ b/src/java/org/apache/cassandra/cli/CliClient.java @@ -138,7 +138,8 @@ public class CliClient COMPACTION_STRATEGY, COMPACTION_STRATEGY_OPTIONS, COMPRESSION_OPTIONS, - BLOOM_FILTER_FP_CHANCE + BLOOM_FILTER_FP_CHANCE, + CACHING } private static final String DEFAULT_PLACEMENT_STRATEGY = "org.apache.cassandra.locator.NetworkTopologyStrategy"; @@ -1247,6 +1248,9 @@ public class CliClient case BLOOM_FILTER_FP_CHANCE: cfDef.setBloom_filter_fp_chance(Double.parseDouble(mValue)); break; + case CACHING: + cfDef.setCaching(mValue); + break; default: //must match one of the above or we'd throw an exception at the valueOf statement above. assert(false); @@ -1634,6 +1638,7 @@ public class CliClient writeAttr(sb, false, "max_compaction_threshold", cfDef.max_compaction_threshold); writeAttr(sb, false, "replicate_on_write", cfDef.replicate_on_write); writeAttr(sb, false, "compaction_strategy", cfDef.compaction_strategy); + writeAttr(sb, false, "caching", cfDef.caching); if (!cfDef.compaction_strategy_options.isEmpty()) { @@ -1965,6 +1970,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(" Replicate on write: %s%n", cf_def.replicate_on_write); + sessionState.out.printf(" Caching: %s%n", cf_def.caching); // if we have connection to the cfMBean established if (cfMBean != null) http://git-wip-us.apache.org/repos/asf/cassandra/blob/b9813ed3/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 d0abf09..7a3c266 100644 --- a/src/java/org/apache/cassandra/config/CFMetaData.java +++ b/src/java/org/apache/cassandra/config/CFMetaData.java @@ -23,6 +23,7 @@ import java.lang.reflect.InvocationTargetException; import java.nio.ByteBuffer; import java.util.*; +import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.HashCodeBuilder; import org.apache.commons.lang.builder.ToStringBuilder; @@ -86,6 +87,23 @@ public final class CFMetaData } } + public enum Caching + { + ALL, KEYS_ONLY, ROWS_ONLY, NONE; + + public static Caching fromString(String cache) throws ConfigurationException + { + try + { + return valueOf(cache.toUpperCase()); + } + catch (IllegalArgumentException e) + { + throw new ConfigurationException(String.format("%s not found, available types: %s.", cache, StringUtils.join(values(), ", "))); + } + } + } + //REQUIRED public final Integer cfId; // internal id, never exposed to user public final String ksName; // name of keyspace @@ -107,7 +125,8 @@ public final class CFMetaData // thrift compatibility private double mergeShardsChance; // default 0.1, chance [0.0, 1.0] of merging old shards during replication private ByteBuffer keyAlias; // default NULL - private Double bloomFilterFpChance; // default NULL + private Double bloomFilterFpChance; // default NULL + private Caching caching; // default KEYS_ONLY (possible: all, key_only, row_only, none) private Map column_metadata; public Class compactionStrategyClass; @@ -129,8 +148,8 @@ public final class CFMetaData public CFMetaData compactionStrategyClass(Class prop) {compactionStrategyClass = prop; return this;} public CFMetaData compactionStrategyOptions(Map prop) {compactionStrategyOptions = prop; return this;} public CFMetaData compressionParameters(CompressionParameters prop) {compressionParameters = prop; return this;} - public CFMetaData bloomFilterFpChance(Double prop) { - bloomFilterFpChance = prop; return this;} + public CFMetaData bloomFilterFpChance(Double prop) {bloomFilterFpChance = prop; return this;} + public CFMetaData caching(Caching prop) {caching = prop; return this;} public CFMetaData(String keyspace, String name, ColumnFamilyType type, AbstractType comp, AbstractType subcc) { @@ -149,6 +168,7 @@ public final class CFMetaData // System cfs have specific ids, and copies of old CFMDs need // to copy over the old id. cfId = id; + caching = Caching.KEYS_ONLY; this.init(); } @@ -239,7 +259,8 @@ public final class CFMetaData .compactionStrategyClass(oldCFMD.compactionStrategyClass) .compactionStrategyOptions(oldCFMD.compactionStrategyOptions) .compressionParameters(oldCFMD.compressionParameters) - .bloomFilterFpChance(oldCFMD.bloomFilterFpChance); + .bloomFilterFpChance(oldCFMD.bloomFilterFpChance) + .caching(oldCFMD.caching); } /** @@ -293,6 +314,7 @@ public final class CFMetaData } cf.compression_options = compressionParameters.asAvroOptions(); cf.bloom_filter_fp_chance = bloomFilterFpChance; + cf.caching = new Utf8(caching.toString()); return cf; } @@ -447,6 +469,11 @@ public final class CFMetaData return bloomFilterFpChance; } + public Caching getCaching() + { + return caching; + } + public boolean equals(Object obj) { if (obj == this) @@ -481,6 +508,7 @@ public final class CFMetaData .append(compactionStrategyOptions, rhs.compactionStrategyOptions) .append(compressionParameters, rhs.compressionParameters) .append(bloomFilterFpChance, rhs.bloomFilterFpChance) + .append(caching, rhs.caching) .isEquals(); } @@ -508,6 +536,7 @@ public final class CFMetaData .append(compactionStrategyOptions) .append(compressionParameters) .append(bloomFilterFpChance) + .append(caching) .toHashCode(); } @@ -571,6 +600,8 @@ public final class CFMetaData newCFMD.compactionStrategyOptions(new HashMap(cf_def.compaction_strategy_options)); if (cf_def.isSetBloom_filter_fp_chance()) newCFMD.bloomFilterFpChance(cf_def.bloom_filter_fp_chance); + if (cf_def.isSetCaching()) + newCFMD.caching(Caching.fromString(cf_def.caching)); CompressionParameters cp = CompressionParameters.create(cf_def.compression_options); @@ -626,6 +657,7 @@ public final class CFMetaData keyAlias = cf_def.key_alias; if (cf_def.bloom_filter_fp_chance != null) bloomFilterFpChance = cf_def.bloom_filter_fp_chance; + caching = Caching.fromString(cf_def.caching.toString()); // adjust column definitions. figure out who is coming and going. Set toRemove = new HashSet(); @@ -767,6 +799,7 @@ public final class CFMetaData def.setCompression_options(compressionParameters.asThriftOptions()); if (bloomFilterFpChance != null) def.setBloom_filter_fp_chance(bloomFilterFpChance); + def.setCaching(caching.toString()); return def; } @@ -904,6 +937,7 @@ public final class CFMetaData .append("compactionStrategyOptions", compactionStrategyOptions) .append("compressionOptions", compressionParameters.asThriftOptions()) .append("bloomFilterFpChance", bloomFilterFpChance) + .append("caching", caching) .toString(); } } http://git-wip-us.apache.org/repos/asf/cassandra/blob/b9813ed3/src/java/org/apache/cassandra/db/ColumnFamilyStore.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java index 706f43b..67d5113 100644 --- a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java +++ b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java @@ -25,8 +25,6 @@ import java.util.*; import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; -import java.util.concurrent.locks.Lock; -import java.util.concurrent.locks.ReentrantLock; import java.util.regex.Pattern; import javax.management.*; @@ -1113,6 +1111,11 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean public ColumnFamily cacheRow(Integer cfId, DecoratedKey decoratedKey) { + CFMetaData.Caching caching = metadata.getCaching(); + + if (caching == CFMetaData.Caching.NONE || caching == CFMetaData.Caching.KEYS_ONLY) + return null; + RowCacheKey key = new RowCacheKey(cfId, decoratedKey); ColumnFamily cached; http://git-wip-us.apache.org/repos/asf/cassandra/blob/b9813ed3/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 46d728b..6f9fcda 100644 --- a/src/java/org/apache/cassandra/io/sstable/SSTableReader.java +++ b/src/java/org/apache/cassandra/io/sstable/SSTableReader.java @@ -608,7 +608,9 @@ public class SSTableReader extends SSTable public void cacheKey(DecoratedKey key, Long info) { - if (keyCache == null) + CFMetaData.Caching caching = metadata.getCaching(); + + if (keyCache == null || caching == CFMetaData.Caching.NONE || caching == CFMetaData.Caching.ROWS_ONLY) return; // avoid keeping a permanent reference to the original key buffer http://git-wip-us.apache.org/repos/asf/cassandra/blob/b9813ed3/test/unit/org/apache/cassandra/SchemaLoader.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/SchemaLoader.java b/test/unit/org/apache/cassandra/SchemaLoader.java index 8dbfa63..198cb5f 100644 --- a/test/unit/org/apache/cassandra/SchemaLoader.java +++ b/test/unit/org/apache/cassandra/SchemaLoader.java @@ -239,8 +239,8 @@ public class SchemaLoader schema.add(KSMetaData.testMetadata(ks_rcs, simple, opts_rf1, - standardCFMD(ks_rcs, "CFWithoutCache"), - standardCFMD(ks_rcs, "CachedCF"))); + standardCFMD(ks_rcs, "CFWithoutCache").caching(CFMetaData.Caching.NONE), + standardCFMD(ks_rcs, "CachedCF").caching(CFMetaData.Caching.ALL))); schema.add(KSMetaData.testMetadataNotDurable(ks_nocommit, simple,