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);
}