CQL3: move {max/min}_compaction_thresholds to compaction options
patch by slebresne; reviewed by jbellis for CASSANDRA-4187
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/f960f13a
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/f960f13a
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/f960f13a
Branch: refs/heads/trunk
Commit: f960f13a5405addb861bcf5dc6512efa7b18226d
Parents: 8dd6a34
Author: Sylvain Lebresne <[email protected]>
Authored: Thu May 3 17:29:02 2012 +0200
Committer: Sylvain Lebresne <[email protected]>
Committed: Thu May 3 17:30:40 2012 +0200
----------------------------------------------------------------------
CHANGES.txt | 2 +
.../org/apache/cassandra/config/CFMetaData.java | 4 +-
src/java/org/apache/cassandra/cql3/CFPropDefs.java | 73 +++++++--------
.../cql3/statements/AlterTableStatement.java | 29 +------
.../statements/CreateColumnFamilyStatement.java | 17 +---
5 files changed, 44 insertions(+), 81 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/f960f13a/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 8097485..3f3ff72 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -29,6 +29,8 @@
* (cql3) Minor fixes (CASSANDRA-4185)
* (cql3) Fix prepared statement in BATCH (CASSANDRA-4202)
* (cql3) Reduce the list of reserved keywords (CASSANDRA-4186)
+ * (cql3) Move max/min compaction thresholds to compaction strategy options
+ (CASSANDRA-4187)
Merged from 1.0:
* Fix super columns bug where cache is not updated (CASSANDRA-4190)
* fix maxTimestamp to include row tombstones (CASSANDRA-4116)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/f960f13a/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 14b964f..e903bd7 100644
--- a/src/java/org/apache/cassandra/config/CFMetaData.java
+++ b/src/java/org/apache/cassandra/config/CFMetaData.java
@@ -254,8 +254,6 @@ public final class CFMetaData
// System cfs have specific ids, and copies of old CFMDs need
// to copy over the old id.
cfId = id;
- caching = DEFAULT_CACHING_STRATEGY;
- bloomFilterFpChance = DEFAULT_BF_FP_CHANCE;
this.init();
}
@@ -279,6 +277,8 @@ public final class CFMetaData
gcGraceSeconds = DEFAULT_GC_GRACE_SECONDS;
minCompactionThreshold = DEFAULT_MIN_COMPACTION_THRESHOLD;
maxCompactionThreshold = DEFAULT_MAX_COMPACTION_THRESHOLD;
+ caching = DEFAULT_CACHING_STRATEGY;
+ bloomFilterFpChance = DEFAULT_BF_FP_CHANCE;
// Defaults strange or simple enough to not need a DEFAULT_T for
defaultValidator = BytesType.instance;
http://git-wip-us.apache.org/repos/asf/cassandra/blob/f960f13a/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 8196c4e..7072176 100644
--- a/src/java/org/apache/cassandra/cql3/CFPropDefs.java
+++ b/src/java/org/apache/cassandra/cql3/CFPropDefs.java
@@ -80,8 +80,6 @@ public class CFPropDefs
keywords.add(KW_READREPAIRCHANCE);
keywords.add(KW_DCLOCALREADREPAIRCHANCE);
keywords.add(KW_GCGRACESECONDS);
- keywords.add(KW_MINCOMPACTIONTHRESHOLD);
- keywords.add(KW_MAXCOMPACTIONTHRESHOLD);
keywords.add(KW_REPLICATEONWRITE);
keywords.add(KW_COMPACTION_STRATEGY_CLASS);
keywords.add(KW_CACHING);
@@ -120,41 +118,13 @@ public class CFPropDefs
* knows what they are doing (a custom comparator/validator for example),
and pass it on as-is.
*/
- public void validate() throws InvalidRequestException
+ public void validate() throws ConfigurationException
{
// Catch the case where someone passed a kwarg that is not recognized.
for (String bogus : Sets.difference(properties.keySet(),
allowedKeywords))
- throw new InvalidRequestException(bogus + " is not a valid keyword
argument for CREATE COLUMNFAMILY");
+ throw new ConfigurationException(bogus + " is not a valid keyword
argument for CREATE TABLE");
for (String obsolete : Sets.intersection(properties.keySet(),
obsoleteKeywords))
logger.warn("Ignoring obsolete property {}", obsolete);
-
- // Validate min/max compaction thresholds
- Integer minCompaction = getInt(KW_MINCOMPACTIONTHRESHOLD, null);
- Integer maxCompaction = getInt(KW_MAXCOMPACTIONTHRESHOLD, null);
-
- if ((minCompaction != null) && (maxCompaction != null)) // Both
min and max are set
- {
- if ((minCompaction > maxCompaction) && (maxCompaction != 0))
- throw new InvalidRequestException(String.format("%s cannot be
larger than %s",
- KW_MINCOMPACTIONTHRESHOLD,
- KW_MAXCOMPACTIONTHRESHOLD));
- }
- else if (minCompaction != null) // Only the min threshold is set
- {
- if (minCompaction > CFMetaData.DEFAULT_MAX_COMPACTION_THRESHOLD)
- throw new InvalidRequestException(String.format("%s cannot be
larger than %s, (default %s)",
- KW_MINCOMPACTIONTHRESHOLD,
- KW_MAXCOMPACTIONTHRESHOLD,
- CFMetaData.DEFAULT_MAX_COMPACTION_THRESHOLD));
- }
- else if (maxCompaction != null) // Only the max threshold is set
- {
- if ((maxCompaction < CFMetaData.DEFAULT_MIN_COMPACTION_THRESHOLD)
&& (maxCompaction != 0))
- throw new InvalidRequestException(String.format("%s cannot be
smaller than %s, (default %s)",
- KW_MAXCOMPACTIONTHRESHOLD,
- KW_MINCOMPACTIONTHRESHOLD,
- CFMetaData.DEFAULT_MIN_COMPACTION_THRESHOLD));
- }
}
/** Map a keyword to the corresponding value */
@@ -188,6 +158,27 @@ public class CFPropDefs
return properties.containsKey(name);
}
+ public void applyToCFMetadata(CFMetaData cfm) throws ConfigurationException
+ {
+ if (hasProperty(KW_COMMENT))
+ cfm.comment(get(KW_COMMENT));
+
+ cfm.readRepairChance(getDouble(KW_READREPAIRCHANCE,
cfm.getReadRepairChance()));
+ cfm.dcLocalReadRepairChance(getDouble(KW_DCLOCALREADREPAIRCHANCE,
cfm.getDcLocalReadRepair()));
+ cfm.gcGraceSeconds(getInt(KW_GCGRACESECONDS, cfm.getGcGraceSeconds()));
+ cfm.replicateOnWrite(getBoolean(KW_REPLICATEONWRITE,
cfm.getReplicateOnWrite()));
+ cfm.minCompactionThreshold(toInt(KW_MINCOMPACTIONTHRESHOLD,
compactionStrategyOptions.get(KW_MINCOMPACTIONTHRESHOLD),
cfm.getMinCompactionThreshold()));
+ cfm.maxCompactionThreshold(toInt(KW_MAXCOMPACTIONTHRESHOLD,
compactionStrategyOptions.get(KW_MAXCOMPACTIONTHRESHOLD),
cfm.getMaxCompactionThreshold()));
+ cfm.caching(CFMetaData.Caching.fromString(getString(KW_CACHING,
cfm.getCaching().toString())));
+ cfm.bloomFilterFpChance(getDouble(KW_BF_FP_CHANCE,
cfm.getBloomFilterFpChance()));
+
+ if (!compactionStrategyOptions.isEmpty())
+ cfm.compactionStrategyOptions(new HashMap<String,
String>(compactionStrategyOptions));
+
+ if (!compressionParameters.isEmpty())
+
cfm.compressionParameters(CompressionParameters.create(compressionParameters));
+ }
+
public String get(String name)
{
return properties.get(name);
@@ -200,14 +191,14 @@ public class CFPropDefs
}
// Return a property value, typed as a Boolean
- public Boolean getBoolean(String key, Boolean defaultValue) throws
InvalidRequestException
+ public Boolean getBoolean(String key, Boolean defaultValue)
{
String value = properties.get(key);
return (value == null) ? defaultValue :
value.toLowerCase().matches("(1|true|yes)");
}
// Return a property value, typed as a Double
- public Double getDouble(String key, Double defaultValue) throws
InvalidRequestException
+ public Double getDouble(String key, Double defaultValue) throws
ConfigurationException
{
Double result;
String value = properties.get(key);
@@ -222,17 +213,22 @@ public class CFPropDefs
}
catch (NumberFormatException e)
{
- throw new InvalidRequestException(String.format("%s not valid
for \"%s\"", value, key));
+ throw new ConfigurationException(String.format("%s not valid
for \"%s\"", value, key));
}
}
return result;
}
// Return a property value, typed as an Integer
- public Integer getInt(String key, Integer defaultValue) throws
InvalidRequestException
+ public Integer getInt(String key, Integer defaultValue) throws
ConfigurationException
{
- Integer result;
String value = properties.get(key);
+ return toInt(key, value, defaultValue);
+ }
+
+ public static Integer toInt(String key, String value, Integer
defaultValue) throws ConfigurationException
+ {
+ Integer result;
if (value == null)
result = defaultValue;
@@ -244,12 +240,13 @@ public class CFPropDefs
}
catch (NumberFormatException e)
{
- throw new InvalidRequestException(String.format("%s not valid
for \"%s\"", value, key));
+ throw new ConfigurationException(String.format("%s not valid
for \"%s\"", value, key));
}
}
return result;
}
+
public String toString()
{
return String.format("CFPropDefs(%s, compaction: %s, compression: %s)",
http://git-wip-us.apache.org/repos/asf/cassandra/blob/f960f13a/src/java/org/apache/cassandra/cql3/statements/AlterTableStatement.java
----------------------------------------------------------------------
diff --git
a/src/java/org/apache/cassandra/cql3/statements/AlterTableStatement.java
b/src/java/org/apache/cassandra/cql3/statements/AlterTableStatement.java
index b1291fe..67b7dd7 100644
--- a/src/java/org/apache/cassandra/cql3/statements/AlterTableStatement.java
+++ b/src/java/org/apache/cassandra/cql3/statements/AlterTableStatement.java
@@ -138,40 +138,13 @@ public class AlterTableStatement extends
SchemaAlteringStatement
throw new InvalidRequestException(String.format("ALTER
COLUMNFAMILY WITH invoked, but no parameters found"));
cfProps.validate();
- applyPropertiesToCFMetadata(cfm, cfProps);
+ cfProps.applyToCFMetadata(cfm);
break;
}
MigrationManager.announceColumnFamilyUpdate(cfm);
}
- public static void applyPropertiesToCFMetadata(CFMetaData cfm, CFPropDefs
cfProps) throws InvalidRequestException, ConfigurationException
- {
- if (cfProps.hasProperty(CFPropDefs.KW_COMMENT))
- {
- cfm.comment(cfProps.get(CFPropDefs.KW_COMMENT));
- }
-
- cfm.readRepairChance(cfProps.getDouble(CFPropDefs.KW_READREPAIRCHANCE,
cfm.getReadRepairChance()));
-
cfm.dcLocalReadRepairChance(cfProps.getDouble(CFPropDefs.KW_DCLOCALREADREPAIRCHANCE,
cfm.getDcLocalReadRepair()));
- cfm.gcGraceSeconds(cfProps.getInt(CFPropDefs.KW_GCGRACESECONDS,
cfm.getGcGraceSeconds()));
-
cfm.replicateOnWrite(cfProps.getBoolean(CFPropDefs.KW_REPLICATEONWRITE,
cfm.getReplicateOnWrite()));
-
cfm.minCompactionThreshold(cfProps.getInt(CFPropDefs.KW_MINCOMPACTIONTHRESHOLD,
cfm.getMinCompactionThreshold()));
-
cfm.maxCompactionThreshold(cfProps.getInt(CFPropDefs.KW_MAXCOMPACTIONTHRESHOLD,
cfm.getMaxCompactionThreshold()));
-
cfm.caching(CFMetaData.Caching.fromString(cfProps.getString(CFPropDefs.KW_CACHING,
cfm.getCaching().toString())));
- cfm.bloomFilterFpChance(cfProps.getDouble(CFPropDefs.KW_BF_FP_CHANCE,
cfm.getBloomFilterFpChance()));
-
- if (!cfProps.compactionStrategyOptions.isEmpty())
- {
- cfm.compactionStrategyOptions(new HashMap<String,
String>(cfProps.compactionStrategyOptions));
- }
-
- if (!cfProps.compressionParameters.isEmpty())
- {
-
cfm.compressionParameters(CompressionParameters.create(cfProps.compressionParameters));
- }
- }
-
public String toString()
{
return String.format("AlterTableStatement(name=%s, type=%s, column=%s,
validator=%s)",
http://git-wip-us.apache.org/repos/asf/cassandra/blob/f960f13a/src/java/org/apache/cassandra/cql3/statements/CreateColumnFamilyStatement.java
----------------------------------------------------------------------
diff --git
a/src/java/org/apache/cassandra/cql3/statements/CreateColumnFamilyStatement.java
b/src/java/org/apache/cassandra/cql3/statements/CreateColumnFamilyStatement.java
index c2dca2e..8c0806f 100644
---
a/src/java/org/apache/cassandra/cql3/statements/CreateColumnFamilyStatement.java
+++
b/src/java/org/apache/cassandra/cql3/statements/CreateColumnFamilyStatement.java
@@ -101,23 +101,14 @@ public class CreateColumnFamilyStatement extends
SchemaAlteringStatement
comparator,
null);
- newCFMD.comment(properties.get(CFPropDefs.KW_COMMENT))
-
.readRepairChance(properties.getDouble(CFPropDefs.KW_READREPAIRCHANCE,
CFMetaData.DEFAULT_READ_REPAIR_CHANCE))
-
.dcLocalReadRepairChance(properties.getDouble(CFPropDefs.KW_DCLOCALREADREPAIRCHANCE,
CFMetaData.DEFAULT_DCLOCAL_READ_REPAIR_CHANCE))
-
.replicateOnWrite(properties.getBoolean(CFPropDefs.KW_REPLICATEONWRITE,
CFMetaData.DEFAULT_REPLICATE_ON_WRITE))
-
.gcGraceSeconds(properties.getInt(CFPropDefs.KW_GCGRACESECONDS,
CFMetaData.DEFAULT_GC_GRACE_SECONDS))
- .defaultValidator(defaultValidator)
-
.minCompactionThreshold(properties.getInt(CFPropDefs.KW_MINCOMPACTIONTHRESHOLD,
CFMetaData.DEFAULT_MIN_COMPACTION_THRESHOLD))
-
.maxCompactionThreshold(properties.getInt(CFPropDefs.KW_MAXCOMPACTIONTHRESHOLD,
CFMetaData.DEFAULT_MAX_COMPACTION_THRESHOLD))
+ newCFMD.defaultValidator(defaultValidator)
.columnMetadata(getColumns())
.keyValidator(keyValidator)
.keyAlias(keyAlias)
.columnAliases(columnAliases)
- .valueAlias(valueAlias)
-
.compactionStrategyOptions(properties.compactionStrategyOptions)
-
.compressionParameters(CompressionParameters.create(properties.compressionParameters))
-
.caching(CFMetaData.Caching.fromString(properties.getString(CFPropDefs.KW_CACHING,
CFMetaData.DEFAULT_CACHING_STRATEGY.toString())))
-
.bloomFilterFpChance(properties.getDouble(CFPropDefs.KW_BF_FP_CHANCE,
CFMetaData.DEFAULT_BF_FP_CHANCE));
+ .valueAlias(valueAlias);
+
+ properties.applyToCFMetadata(newCFMD);
}
catch (ConfigurationException e)
{