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/11/19 16:27:17 UTC
svn commit: r1036889 - in /cassandra/trunk/src/java/org/apache/cassandra/db:
CompactionManager.java migration/DropColumnFamily.java
migration/DropKeyspace.java migration/Migration.java
migration/UpdateColumnFamily.java
Author: gdusbabek
Date: Fri Nov 19 15:27:16 2010
New Revision: 1036889
URL: http://svn.apache.org/viewvc?rev=1036889&view=rev
Log:
migration uses locks. patch by gdusbabek, reviewe by jbellis. CASSANDRA-1715
Modified:
cassandra/trunk/src/java/org/apache/cassandra/db/CompactionManager.java
cassandra/trunk/src/java/org/apache/cassandra/db/migration/DropColumnFamily.java
cassandra/trunk/src/java/org/apache/cassandra/db/migration/DropKeyspace.java
cassandra/trunk/src/java/org/apache/cassandra/db/migration/Migration.java
cassandra/trunk/src/java/org/apache/cassandra/db/migration/UpdateColumnFamily.java
Modified: cassandra/trunk/src/java/org/apache/cassandra/db/CompactionManager.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/CompactionManager.java?rev=1036889&r1=1036888&r2=1036889&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/CompactionManager.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/CompactionManager.java Fri Nov 19 15:27:16 2010
@@ -31,6 +31,7 @@ import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import java.util.concurrent.locks.ReentrantLock;
+import java.util.concurrent.locks.Lock;
import javax.management.MBeanServer;
import javax.management.ObjectName;
@@ -80,14 +81,9 @@ public class CompactionManager implement
private CompactionExecutor executor = new CompactionExecutor();
private Map<ColumnFamilyStore, Integer> estimatedCompactions = new NonBlockingHashMap<ColumnFamilyStore, Integer>();
- public void lockCompactions()
+ public Lock getCompactionLock()
{
- compactionLock.lock();
- }
-
- public void unlockCompactions()
- {
- compactionLock.unlock();
+ return compactionLock;
}
/**
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=1036889&r1=1036888&r2=1036889&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 Fri Nov 19 15:27:16 2010
@@ -82,16 +82,24 @@ public class DropColumnFamily extends Mi
@Override
public void applyModels() throws IOException
{
- // reinitialize the table.
- KSMetaData existing = DatabaseDescriptor.getTableDefinition(tableName);
- CFMetaData cfm = existing.cfMetaData().get(cfName);
- KSMetaData ksm = makeNewKeyspaceDefinition(existing);
- CFMetaData.purge(cfm);
- DatabaseDescriptor.setTableDefinition(ksm, newVersion);
-
- if (!clientMode)
+ acquireLocks();
+ try
{
- Table.open(ksm.name).dropCf(cfm.cfId);
+ // reinitialize the table.
+ KSMetaData existing = DatabaseDescriptor.getTableDefinition(tableName);
+ CFMetaData cfm = existing.cfMetaData().get(cfName);
+ KSMetaData ksm = makeNewKeyspaceDefinition(existing);
+ CFMetaData.purge(cfm);
+ DatabaseDescriptor.setTableDefinition(ksm, newVersion);
+
+ if (!clientMode)
+ {
+ Table.open(ksm.name).dropCf(cfm.cfId);
+ }
+ }
+ finally
+ {
+ releaseLocks();
}
}
Modified: cassandra/trunk/src/java/org/apache/cassandra/db/migration/DropKeyspace.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/migration/DropKeyspace.java?rev=1036889&r1=1036888&r2=1036889&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/migration/DropKeyspace.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/migration/DropKeyspace.java Fri Nov 19 15:27:16 2010
@@ -60,29 +60,37 @@ public class DropKeyspace extends Migrat
@Override
public void applyModels() throws IOException
{
- KSMetaData ksm = DatabaseDescriptor.getTableDefinition(name);
- // remove the table from the static instances.
- Table table = Table.clear(ksm.name);
- if (table == null)
- throw new IOException("Table is not active. " + ksm.name);
-
- // remove all cfs from the table instance.
- for (CFMetaData cfm : ksm.cfMetaData().values())
+ acquireLocks();
+ try
{
- CFMetaData.purge(cfm);
+ KSMetaData ksm = DatabaseDescriptor.getTableDefinition(name);
+ // remove the table from the static instances.
+ Table table = Table.clear(ksm.name);
+ if (table == null)
+ throw new IOException("Table is not active. " + ksm.name);
+
+ // remove all cfs from the table instance.
+ for (CFMetaData cfm : ksm.cfMetaData().values())
+ {
+ CFMetaData.purge(cfm);
+ if (!clientMode)
+ {
+ table.dropCf(cfm.cfId);
+ }
+ }
+
+ // reset defs.
+ DatabaseDescriptor.clearTableDefinition(ksm, newVersion);
+
if (!clientMode)
{
- table.dropCf(cfm.cfId);
+ // clear up any local hinted data for this keyspace.
+ HintedHandOffManager.renameHints(name, null);
}
}
-
- // reset defs.
- DatabaseDescriptor.clearTableDefinition(ksm, newVersion);
-
- if (!clientMode)
+ finally
{
- // clear up any local hinted data for this keyspace.
- HintedHandOffManager.renameHints(name, null);
+ releaseLocks();
}
}
Modified: cassandra/trunk/src/java/org/apache/cassandra/db/migration/Migration.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/migration/Migration.java?rev=1036889&r1=1036888&r2=1036889&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/migration/Migration.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/migration/Migration.java Fri Nov 19 15:27:16 2010
@@ -91,6 +91,19 @@ public abstract class Migration
this.lastVersion = lastVersion;
clientMode = StorageService.instance.isClientMode();
}
+
+ // block compactions and flushing.
+ protected final void acquireLocks()
+ {
+ CompactionManager.instance.getCompactionLock().lock();
+ Table.getFlushLock().lock();
+ }
+
+ protected final void releaseLocks()
+ {
+ Table.getFlushLock().unlock();
+ CompactionManager.instance.getCompactionLock().unlock();
+ }
/** override this to perform logic before writing the migration or applying it. defaults to nothing. */
public void beforeApplyModels() {}
Modified: cassandra/trunk/src/java/org/apache/cassandra/db/migration/UpdateColumnFamily.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/migration/UpdateColumnFamily.java?rev=1036889&r1=1036888&r2=1036889&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/migration/UpdateColumnFamily.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/migration/UpdateColumnFamily.java Fri Nov 19 15:27:16 2010
@@ -12,6 +12,7 @@ import org.apache.cassandra.config.Confi
import org.apache.cassandra.config.DatabaseDescriptor;
import org.apache.cassandra.config.KSMetaData;
import org.apache.cassandra.db.ColumnFamilyStore;
+import org.apache.cassandra.db.CompactionManager;
import org.apache.cassandra.db.SystemTable;
import org.apache.cassandra.db.Table;
import org.apache.cassandra.utils.FBUtilities;
@@ -78,30 +79,38 @@ public class UpdateColumnFamily extends
void applyModels() throws IOException
{
- logger.debug("Updating " + oldCfm + " to " + newCfm);
- KSMetaData newKsm = makeNewKeyspaceDefinition(DatabaseDescriptor.getTableDefinition(newCfm.tableName));
- DatabaseDescriptor.setTableDefinition(newKsm, newVersion);
-
- if (!clientMode)
+ acquireLocks();
+ try
{
- Table table = Table.open(oldCfm.tableName);
- ColumnFamilyStore oldCfs = table.getColumnFamilyStore(oldCfm.cfName);
- table.reloadCf(newCfm.cfId);
-
- // clean up obsolete index data files
- for (Map.Entry<ByteBuffer, ColumnDefinition> entry : oldCfm.column_metadata.entrySet())
+ logger.debug("Updating " + oldCfm + " to " + newCfm);
+ KSMetaData newKsm = makeNewKeyspaceDefinition(DatabaseDescriptor.getTableDefinition(newCfm.tableName));
+ DatabaseDescriptor.setTableDefinition(newKsm, newVersion);
+
+ if (!clientMode)
{
- ByteBuffer column = entry.getKey();
- ColumnDefinition def = entry.getValue();
- if (def.index_type != null
- && (!newCfm.column_metadata.containsKey(column) || newCfm.column_metadata.get(column).index_type == null))
+ Table table = Table.open(oldCfm.tableName);
+ ColumnFamilyStore oldCfs = table.getColumnFamilyStore(oldCfm.cfName);
+ table.reloadCf(newCfm.cfId);
+
+ // clean up obsolete index data files
+ for (Map.Entry<ByteBuffer, ColumnDefinition> entry : oldCfm.column_metadata.entrySet())
{
- ColumnFamilyStore indexCfs = oldCfs.getIndexedColumnFamilyStore(column);
- SystemTable.setIndexRemoved(table.name, indexCfs.columnFamily);
- indexCfs.removeAllSSTables();
+ ByteBuffer column = entry.getKey();
+ ColumnDefinition def = entry.getValue();
+ if (def.index_type != null
+ && (!newCfm.column_metadata.containsKey(column) || newCfm.column_metadata.get(column).index_type == null))
+ {
+ ColumnFamilyStore indexCfs = oldCfs.getIndexedColumnFamilyStore(column);
+ SystemTable.setIndexRemoved(table.name, indexCfs.columnFamily);
+ indexCfs.removeAllSSTables();
+ }
}
}
}
+ finally
+ {
+ releaseLocks();
+ }
}
public void subdeflate(org.apache.cassandra.db.migration.avro.Migration mi)