Author: xedin Date: Mon Sep 12 23:00:40 2011 New Revision: 1169971 URL: http://svn.apache.org/viewvc?rev=1169971&view=rev Log: Fix backwards compatibilty for cql memtable properties patch by Jonathan Ellis; reviewed by Pavel Yaskevich for CASSANDRA-3190
Modified: cassandra/branches/cassandra-1.0.0/CHANGES.txt cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/cql/CreateColumnFamilyStatement.java Modified: cassandra/branches/cassandra-1.0.0/CHANGES.txt URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0.0/CHANGES.txt?rev=1169971&r1=1169970&r2=1169971&view=diff ============================================================================== --- cassandra/branches/cassandra-1.0.0/CHANGES.txt (original) +++ cassandra/branches/cassandra-1.0.0/CHANGES.txt Mon Sep 12 23:00:40 2011 @@ -71,6 +71,7 @@ * Default RR chance to 0.1 (CASSANDRA-3169) * Add RowLevel support to secondary index API (CASSANDRA-3147) * Make SerializingCacheProvider the default if JNA is available (CASSANDRA-3183) + * Fix backwards compatibilty for CQL memtable properties (CASSANDRA-3190) 0.8.6 * avoid trying to watch cassandra-topology.properties when loaded from jar Modified: cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/cql/CreateColumnFamilyStatement.java URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/cql/CreateColumnFamilyStatement.java?rev=1169971&r1=1169970&r2=1169971&view=diff ============================================================================== --- cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/cql/CreateColumnFamilyStatement.java (original) +++ cassandra/branches/cassandra-1.0.0/src/java/org/apache/cassandra/cql/CreateColumnFamilyStatement.java Mon Sep 12 23:00:40 2011 @@ -28,6 +28,11 @@ import java.util.List; import java.util.Map; import java.util.Set; +import com.google.common.collect.Sets; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import org.apache.cassandra.config.CFMetaData; import org.apache.cassandra.config.ColumnDefinition; import org.apache.cassandra.config.ConfigurationException; @@ -41,6 +46,8 @@ import org.apache.cassandra.utils.FBUtil /** A <code>CREATE COLUMNFAMILY</code> parsed from a CQL query statement. */ public class CreateColumnFamilyStatement { + private static Logger logger = LoggerFactory.getLogger(CreateColumnFamilyStatement.class); + private static final String KW_COMPARATOR = "comparator"; private static final String KW_COMMENT = "comment"; private static final String KW_ROWCACHESIZE = "row_cache_size"; @@ -52,14 +59,13 @@ public class CreateColumnFamilyStatement private static final String KW_MAXCOMPACTIONTHRESHOLD = "max_compaction_threshold"; private static final String KW_ROWCACHESAVEPERIODSECS = "row_cache_save_period_in_seconds"; private static final String KW_KEYCACHESAVEPERIODSECS = "key_cache_save_period_in_seconds"; - private static final String KW_MEMTABLESIZEINMB = "memtable_throughput_in_mb"; - private static final String KW_MEMTABLEOPSINMILLIONS = "memtable_operations_in_millions"; private static final String KW_REPLICATEONWRITE = "replicate_on_write"; private static final String KW_ROW_CACHE_PROVIDER = "row_cache_provider"; // Maps CQL short names to the respective Cassandra comparator/validator class names public static final Map<String, String> comparators = new HashMap<String, String>(); private static final Set<String> keywords = new HashSet<String>(); + private static final Set<String> obsoleteKeywords = new HashSet<String>(); static { @@ -89,10 +95,12 @@ public class CreateColumnFamilyStatement keywords.add(KW_MAXCOMPACTIONTHRESHOLD); keywords.add(KW_ROWCACHESAVEPERIODSECS); keywords.add(KW_KEYCACHESAVEPERIODSECS); - keywords.add(KW_MEMTABLESIZEINMB); - keywords.add(KW_MEMTABLEOPSINMILLIONS); keywords.add(KW_REPLICATEONWRITE); keywords.add(KW_ROW_CACHE_PROVIDER); + + obsoleteKeywords.add("memtable_throughput_in_mb"); + obsoleteKeywords.add("memtable_operations_in_millions"); + obsoleteKeywords.add("memtable_flush_after_mins"); } private final String name; @@ -114,11 +122,10 @@ public class CreateColumnFamilyStatement throw new InvalidRequestException(String.format("\"%s\" is not a valid column family name", name)); // Catch the case where someone passed a kwarg that is not recognized. - Set<String> keywordsFound = new HashSet<String>(properties.keySet()); - keywordsFound.removeAll(keywords); - - for (String bogus : keywordsFound) + for (String bogus : Sets.difference(properties.keySet(), Sets.union(keywords, obsoleteKeywords))) throw new InvalidRequestException(bogus + " is not a valid keyword argument for CREATE COLUMNFAMILY"); + for (String obsolete : Sets.intersection(properties.keySet(), obsoleteKeywords)) + logger.warn("Ignoring obsolete property {}", obsolete); // Validate min/max compaction thresholds Integer minCompaction = getPropertyInt(KW_MINCOMPACTIONTHRESHOLD, null); @@ -148,17 +155,6 @@ public class CreateColumnFamilyStatement CFMetaData.DEFAULT_MIN_COMPACTION_THRESHOLD)); } - // Validate memtable settings - Integer memMb = getPropertyInt(KW_MEMTABLESIZEINMB, null); - Double memOps = getPropertyDouble(KW_MEMTABLEOPSINMILLIONS, null); - - if ((memMb != null) && (memMb <= 0)) - throw new InvalidRequestException(String.format("%s must be non-negative and greater than zero", - KW_MEMTABLESIZEINMB)); - if ((memOps != null) && (memOps <=0)) - throw new InvalidRequestException(String.format("%s must be non-negative and greater than zero", - KW_MEMTABLEOPSINMILLIONS)); - // Ensure that exactly one key has been specified. if (keyValidator.size() < 1) throw new InvalidRequestException("You must specify a PRIMARY KEY");