You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by gd...@apache.org on 2010/07/28 23:01:30 UTC
svn commit: r980215 - in /cassandra/trunk/src/java/org/apache/cassandra:
config/KSMetaData.java db/migration/AddColumnFamily.java
db/migration/DropColumnFamily.java db/migration/RenameColumnFamily.java
db/migration/RenameKeyspace.java
Author: gdusbabek
Date: Wed Jul 28 21:01:30 2010
New Revision: 980215
URL: http://svn.apache.org/viewvc?rev=980215&view=rev
Log:
move KSM modification code into copy methods. patch by stuhood, reviewed by gdusbabek. CASSANDRA-1237
Modified:
cassandra/trunk/src/java/org/apache/cassandra/config/KSMetaData.java
cassandra/trunk/src/java/org/apache/cassandra/db/migration/AddColumnFamily.java
cassandra/trunk/src/java/org/apache/cassandra/db/migration/DropColumnFamily.java
cassandra/trunk/src/java/org/apache/cassandra/db/migration/RenameColumnFamily.java
cassandra/trunk/src/java/org/apache/cassandra/db/migration/RenameKeyspace.java
Modified: cassandra/trunk/src/java/org/apache/cassandra/config/KSMetaData.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/config/KSMetaData.java?rev=980215&r1=980214&r2=980215&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/config/KSMetaData.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/config/KSMetaData.java Wed Jul 28 21:01:30 2010
@@ -49,7 +49,41 @@ public final class KSMetaData
cfmap.put(cfm.cfName, cfm);
this.cfMetaData = Collections.unmodifiableMap(cfmap);
}
-
+
+ /**
+ * Copies this KSMetaData, adding an additional ColumnFamily.
+ */
+ public KSMetaData withColumnFamily(CFMetaData cfm)
+ {
+ List<CFMetaData> newCfs = new ArrayList<CFMetaData>(cfMetaData().values());
+ newCfs.add(cfm);
+ return new KSMetaData(name, strategyClass, replicationFactor, newCfs.toArray(new CFMetaData[newCfs.size()]));
+ }
+
+ /**
+ * Copies this KSMetaData, removing the ColumnFamily with the given name (which must exist).
+ */
+ public KSMetaData withoutColumnFamily(String cfName)
+ {
+ CFMetaData cfm = cfMetaData().get(cfName);
+ List<CFMetaData> newCfs = new ArrayList<CFMetaData>(cfMetaData().values());
+ newCfs.remove(cfm);
+ assert newCfs.size() == cfMetaData().size() - 1;
+ return new KSMetaData(name, strategyClass, replicationFactor, newCfs.toArray(new CFMetaData[newCfs.size()]));
+ }
+
+ /**
+ * Copies this KSMetaData, returning a renamed copy.
+ */
+ public KSMetaData withName(String ksName)
+ {
+ // cfs will need to have their tablenames reset, but their ids will not change
+ List<CFMetaData> newCfs = new ArrayList<CFMetaData>(cfMetaData().size());
+ for (CFMetaData oldCf : cfMetaData().values())
+ newCfs.add(CFMetaData.renameTable(oldCf, ksName));
+ return new KSMetaData(ksName, strategyClass, replicationFactor, newCfs.toArray(new CFMetaData[newCfs.size()]));
+ }
+
public boolean equals(Object obj)
{
if (obj == null)
Modified: cassandra/trunk/src/java/org/apache/cassandra/db/migration/AddColumnFamily.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/migration/AddColumnFamily.java?rev=980215&r1=980214&r2=980215&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/migration/AddColumnFamily.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/migration/AddColumnFamily.java Wed Jul 28 21:01:30 2010
@@ -73,23 +73,16 @@ public class AddColumnFamily extends Mig
throw new ConfigurationException("CF is already defined in that keyspace.");
// clone ksm but include the new cf def.
- KSMetaData newKsm = makeNewKeyspaceDefinition(ksm);
+ KSMetaData newKsm = ksm.withColumnFamily(cfm);
rm = Migration.makeDefinitionMutation(newKsm, null, newVersion);
}
- 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.replicationFactor, newCfs.toArray(new CFMetaData[newCfs.size()]));
- }
-
public void applyModels() throws IOException
{
// reinitialize the table.
KSMetaData ksm = DatabaseDescriptor.getTableDefinition(cfm.tableName);
- ksm = makeNewKeyspaceDefinition(ksm);
+ ksm = ksm.withColumnFamily(cfm);
try
{
CFMetaData.map(cfm);
Modified: cassandra/trunk/src/java/org/apache/cassandra/db/migration/DropColumnFamily.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/migration/DropColumnFamily.java?rev=980215&r1=980214&r2=980215&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/migration/DropColumnFamily.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/migration/DropColumnFamily.java Wed Jul 28 21:01:30 2010
@@ -70,20 +70,10 @@ public class DropColumnFamily extends Mi
else if (!ksm.cfMetaData().containsKey(cfName))
throw new ConfigurationException("CF is not defined in that keyspace.");
- KSMetaData newKsm = makeNewKeyspaceDefinition(ksm);
+ KSMetaData newKsm = ksm.withoutColumnFamily(cfName);
rm = Migration.makeDefinitionMutation(newKsm, null, newVersion);
}
- private KSMetaData makeNewKeyspaceDefinition(KSMetaData ksm)
- {
- // clone ksm but do not include the new def
- CFMetaData cfm = ksm.cfMetaData().get(cfName);
- 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.replicationFactor, newCfs.toArray(new CFMetaData[newCfs.size()]));
- }
-
@Override
public void beforeApplyModels()
{
@@ -105,7 +95,7 @@ public class DropColumnFamily extends Mi
// reinitialize the table.
KSMetaData existing = DatabaseDescriptor.getTableDefinition(tableName);
CFMetaData cfm = existing.cfMetaData().get(cfName);
- KSMetaData ksm = makeNewKeyspaceDefinition(existing);
+ KSMetaData ksm = existing.withoutColumnFamily(cfName);
CFMetaData.purge(cfm);
DatabaseDescriptor.setTableDefinition(ksm, newVersion);
Modified: cassandra/trunk/src/java/org/apache/cassandra/db/migration/RenameColumnFamily.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/migration/RenameColumnFamily.java?rev=980215&r1=980214&r2=980215&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/migration/RenameColumnFamily.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/migration/RenameColumnFamily.java Wed Jul 28 21:01:30 2010
@@ -38,8 +38,6 @@ import java.util.List;
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
-
public class RenameColumnFamily extends Migration
{
private static final Serializer serializer = new Serializer();
@@ -86,12 +84,8 @@ public class RenameColumnFamily extends
private KSMetaData makeNewKeyspaceDefinition(KSMetaData ksm)
{
CFMetaData oldCfm = ksm.cfMetaData().get(oldName);
- List<CFMetaData> newCfs = new ArrayList<CFMetaData>(ksm.cfMetaData().values());
- newCfs.remove(oldCfm);
- assert newCfs.size() == ksm.cfMetaData().size() - 1;
- CFMetaData newCfm = CFMetaData.rename(oldCfm, newName);
- newCfs.add(newCfm);
- return new KSMetaData(ksm.name, ksm.strategyClass, ksm.replicationFactor, newCfs.toArray(new CFMetaData[newCfs.size()]));
+ KSMetaData temp = ksm.withoutColumnFamily(oldName);
+ return temp.withColumnFamily(CFMetaData.rename(oldCfm, newName));
}
@Override
Modified: cassandra/trunk/src/java/org/apache/cassandra/db/migration/RenameKeyspace.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/migration/RenameKeyspace.java?rev=980215&r1=980214&r2=980215&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/migration/RenameKeyspace.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/migration/RenameKeyspace.java Wed Jul 28 21:01:30 2010
@@ -69,25 +69,11 @@ public class RenameKeyspace extends Migr
throw new ConfigurationException("Keyspace already exists.");
// clone the ksm, replacing thename.
- KSMetaData newKsm = rename(oldKsm, newName, false);
+ KSMetaData newKsm = oldKsm.withName(newName);
rm = makeDefinitionMutation(newKsm, oldKsm, newVersion);
}
- private static KSMetaData rename(KSMetaData ksm, String newName, boolean purgeOldCfs)
- {
- // cfs will need to have their tablenames reset. CFMetaData are immutable, so new ones get created with the
- // same ids.
- List<CFMetaData> newCfs = new ArrayList<CFMetaData>(ksm.cfMetaData().size());
- for (CFMetaData oldCf : ksm.cfMetaData().values())
- {
- if (purgeOldCfs)
- CFMetaData.purge(oldCf);
- newCfs.add(CFMetaData.renameTable(oldCf, newName));
- }
- return new KSMetaData(newName, ksm.strategyClass, ksm.replicationFactor, newCfs.toArray(new CFMetaData[newCfs.size()]));
- }
-
@Override
public ICompactSerializer getSerializer()
{
@@ -102,8 +88,9 @@ public class RenameKeyspace extends Migr
KSMetaData oldKsm = DatabaseDescriptor.getTableDefinition(oldName);
for (CFMetaData cfm : oldKsm.cfMetaData().values())
+ // remove cf mappings for previous ksname
CFMetaData.purge(cfm);
- KSMetaData newKsm = rename(oldKsm, newName, true);
+ KSMetaData newKsm = oldKsm.withName(newName);
for (CFMetaData cfm : newKsm.cfMetaData().values())
{
try