Author: jbellis Date: Wed Oct 19 04:04:55 2011 New Revision: 1185961 URL: http://svn.apache.org/viewvc?rev=1185961&view=rev Log: add KSM.systemKeyspace and cloneWith methods patch by jbellis; reviewed by pyaskevich for CASSANDRA-3292
Modified: cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/config/DatabaseDescriptor.java cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/config/KSMetaData.java cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/migration/AddColumnFamily.java cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/migration/DropColumnFamily.java cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/migration/UpdateKeyspace.java Modified: cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/config/DatabaseDescriptor.java URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/config/DatabaseDescriptor.java?rev=1185961&r1=1185960&r2=1185961&view=diff ============================================================================== --- cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/config/DatabaseDescriptor.java (original) +++ cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/config/DatabaseDescriptor.java Wed Oct 19 04:04:55 2011 @@ -18,7 +18,10 @@ package org.apache.cassandra.config; -import java.io.*; +import java.io.File; +import java.io.FileFilter; +import java.io.IOException; +import java.io.InputStream; import java.net.InetAddress; import java.net.URL; import java.net.UnknownHostException; @@ -388,15 +391,7 @@ public class DatabaseDescriptor partitioner.getTokenFactory().validate(conf.initial_token); // Hardcoded system tables - KSMetaData systemMeta = new KSMetaData(Table.SYSTEM_TABLE, - LocalStrategy.class, - KSMetaData.optsWithRF(1), - CFMetaData.StatusCf, - CFMetaData.HintsCf, - CFMetaData.MigrationsCf, - CFMetaData.SchemaCf, - CFMetaData.IndexCf, - CFMetaData.NodeIdCf); + KSMetaData systemMeta = KSMetaData.systemKeyspace(); CFMetaData.map(CFMetaData.StatusCf); CFMetaData.map(CFMetaData.HintsCf); CFMetaData.map(CFMetaData.MigrationsCf); Modified: cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/config/KSMetaData.java URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/config/KSMetaData.java?rev=1185961&r1=1185960&r2=1185961&view=diff ============================================================================== --- cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/config/KSMetaData.java (original) +++ cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/config/KSMetaData.java Wed Oct 19 04:04:55 2011 @@ -21,16 +21,17 @@ package org.apache.cassandra.config; import java.util.*; import org.apache.commons.lang.ObjectUtils; +import org.apache.commons.lang.StringUtils; import org.apache.avro.util.Utf8; +import org.apache.cassandra.db.Table; import org.apache.cassandra.io.SerDeUtils; import org.apache.cassandra.locator.AbstractReplicationStrategy; +import org.apache.cassandra.locator.LocalStrategy; import org.apache.cassandra.locator.NetworkTopologyStrategy; import org.apache.cassandra.thrift.CfDef; import org.apache.cassandra.thrift.KsDef; -import org.apache.commons.lang.StringUtils; - public final class KSMetaData { public final String name; @@ -56,6 +57,35 @@ public final class KSMetaData this.durableWrites = durable_writes; } + private KSMetaData(String name, Class<? extends AbstractReplicationStrategy> strategyClass, Map<String, String> strategyOptions, boolean durableWrites, Iterable<CFMetaData> cfDefs) + { + this.name = name; + this.strategyClass = strategyClass == null ? NetworkTopologyStrategy.class : strategyClass; + this.strategyOptions = strategyOptions; + Map<String, CFMetaData> cfmap = new HashMap<String, CFMetaData>(); + for (CFMetaData cfm : cfDefs) + cfmap.put(cfm.cfName, cfm); + this.cfMetaData = Collections.unmodifiableMap(cfmap); + this.durableWrites = durableWrites; + } + + public static KSMetaData cloneWith(KSMetaData ksm, Iterable<CFMetaData> cfDefs) + { + return new KSMetaData(ksm.name, ksm.strategyClass, ksm.strategyOptions, ksm.durableWrites, cfDefs); + } + + public static KSMetaData systemKeyspace() + { + List<CFMetaData> cfDefs = Arrays.asList(CFMetaData.StatusCf, + CFMetaData.HintsCf, + CFMetaData.MigrationsCf, + CFMetaData.SchemaCf, + CFMetaData.IndexCf, + CFMetaData.NodeIdCf); + return new KSMetaData(Table.SYSTEM_TABLE, LocalStrategy.class, optsWithRF(1), false, cfDefs); + } + + public static Map<String, String> forwardsCompatibleOptions(KsDef ks_def) { Map<String, String> options; @@ -165,10 +195,10 @@ public final class KSMetaData maybeAddReplicationFactor(strategyOptions, ks.strategy_class.toString(), ks.replication_factor); int cfsz = ks.cf_defs.size(); - CFMetaData[] cfMetaData = new CFMetaData[cfsz]; + List<CFMetaData> cfMetaData = new ArrayList<CFMetaData>(cfsz); Iterator<org.apache.cassandra.db.migration.avro.CfDef> cfiter = ks.cf_defs.iterator(); for (int i = 0; i < cfsz; i++) - cfMetaData[i] = CFMetaData.inflate(cfiter.next()); + cfMetaData.add(CFMetaData.inflate(cfiter.next())); return new KSMetaData(ks.name.toString(), repStratClass, strategyOptions, ks.durable_writes, cfMetaData); } @@ -192,7 +222,7 @@ public final class KSMetaData AbstractReplicationStrategy.getClass(ksd.strategy_class), forwardsCompatibleOptions(ksd), ksd.durable_writes, - cfDefs); + Arrays.asList(cfDefs)); } public static KsDef toThrift(KSMetaData ksm) Modified: cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/migration/AddColumnFamily.java URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/migration/AddColumnFamily.java?rev=1185961&r1=1185960&r2=1185961&view=diff ============================================================================== --- cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/migration/AddColumnFamily.java (original) +++ cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/migration/AddColumnFamily.java Wed Oct 19 04:04:55 2011 @@ -2,9 +2,9 @@ package org.apache.cassandra.db.migratio import java.io.IOException; import java.nio.ByteBuffer; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; +import java.util.*; + +import com.google.common.collect.Iterables; import org.apache.cassandra.config.*; import org.apache.cassandra.db.Table; @@ -67,9 +67,7 @@ public class AddColumnFamily extends Mig private KSMetaData makeNewKeyspaceDefinition(KSMetaData ksm) { - List<CFMetaData> newCfs = new ArrayList<CFMetaData>(ksm.cfMetaData().values()); - newCfs.add(cfm); - return new KSMetaData(ksm.name, ksm.strategyClass, ksm.strategyOptions, newCfs.toArray(new CFMetaData[newCfs.size()])); + return KSMetaData.cloneWith(ksm, Iterables.concat(ksm.cfMetaData().values(), Collections.singleton(cfm))); } public void applyModels() throws IOException Modified: cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/migration/DropColumnFamily.java URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/migration/DropColumnFamily.java?rev=1185961&r1=1185960&r2=1185961&view=diff ============================================================================== --- cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/migration/DropColumnFamily.java (original) +++ cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/migration/DropColumnFamily.java Wed Oct 19 04:04:55 2011 @@ -65,7 +65,7 @@ public class DropColumnFamily extends Mi List<CFMetaData> newCfs = new ArrayList<CFMetaData>(ksm.cfMetaData().values()); newCfs.remove(cfm); assert newCfs.size() == ksm.cfMetaData().size() - 1; - return new KSMetaData(ksm.name, ksm.strategyClass, ksm.strategyOptions, newCfs.toArray(new CFMetaData[newCfs.size()])); + return KSMetaData.cloneWith(ksm, newCfs); } public void applyModels() throws IOException Modified: cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/migration/UpdateKeyspace.java URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/migration/UpdateKeyspace.java?rev=1185961&r1=1185960&r2=1185961&view=diff ============================================================================== --- cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/migration/UpdateKeyspace.java (original) +++ cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/migration/UpdateKeyspace.java Wed Oct 19 04:04:55 2011 @@ -52,7 +52,7 @@ public class UpdateKeyspace extends Migr if (oldKsm == null) throw new ConfigurationException(ksm.name + " cannot be updated because it doesn't exist."); - this.newKsm = new KSMetaData(ksm.name, ksm.strategyClass, ksm.strategyOptions, ksm.durableWrites, oldKsm.cfMetaData().values().toArray(new CFMetaData[]{})); + this.newKsm = KSMetaData.cloneWith(ksm, oldKsm.cfMetaData().values()); rm = makeDefinitionMutation(newKsm, oldKsm, newVersion); }