You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2011/11/07 18:34:05 UTC

svn commit: r1198830 - in /cassandra/branches/cassandra-1.0: ./ src/java/org/apache/cassandra/db/ src/java/org/apache/cassandra/db/index/ src/java/org/apache/cassandra/db/index/keys/ test/unit/org/apache/cassandra/db/ test/unit/org/apache/cassandra/db/...

Author: jbellis
Date: Mon Nov  7 17:34:04 2011
New Revision: 1198830

URL: http://svn.apache.org/viewvc?rev=1198830&view=rev
Log:
fix invalidate-related test failures
patch by jbellis; reviewed by slebresne for CASSANDRA-3437

Modified:
    cassandra/branches/cassandra-1.0/CHANGES.txt
    cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
    cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/Table.java
    cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/index/SecondaryIndex.java
    cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/index/SecondaryIndexManager.java
    cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/index/keys/KeysIndex.java
    cassandra/branches/cassandra-1.0/test/unit/org/apache/cassandra/db/KeyCacheTest.java
    cassandra/branches/cassandra-1.0/test/unit/org/apache/cassandra/db/compaction/CompactionsTest.java
    cassandra/branches/cassandra-1.0/test/unit/org/apache/cassandra/streaming/StreamingTransferTest.java

Modified: cassandra/branches/cassandra-1.0/CHANGES.txt
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/CHANGES.txt?rev=1198830&r1=1198829&r2=1198830&view=diff
==============================================================================
--- cassandra/branches/cassandra-1.0/CHANGES.txt (original)
+++ cassandra/branches/cassandra-1.0/CHANGES.txt Mon Nov  7 17:34:04 2011
@@ -1,5 +1,6 @@
 1.0.3
  * (Hadoop) Fix empty row filtering (CASSANDRA-3450)
+ * fix invalidate-related test failures (CASSANDRA-3437)
 Merged from 0.8:
  * Make counter shard merging thread safe (CASSANDRA-3178)
 

Modified: cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/ColumnFamilyStore.java?rev=1198830&r1=1198829&r2=1198830&view=diff
==============================================================================
--- cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/ColumnFamilyStore.java (original)
+++ cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/ColumnFamilyStore.java Mon Nov  7 17:34:04 2011
@@ -28,8 +28,7 @@ import java.util.concurrent.atomic.Atomi
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
 import java.util.regex.Pattern;
-import javax.management.MBeanServer;
-import javax.management.ObjectName;
+import javax.management.*;
 
 import com.google.common.collect.Iterables;
 import org.apache.cassandra.db.compaction.LeveledManifest;
@@ -54,6 +53,7 @@ import org.apache.cassandra.db.index.Sec
 import org.apache.cassandra.db.marshal.AbstractType;
 import org.apache.cassandra.dht.*;
 import org.apache.cassandra.io.sstable.*;
+import org.apache.cassandra.io.sstable.Descriptor;
 import org.apache.cassandra.io.util.FileUtils;
 import org.apache.cassandra.service.StorageService;
 import org.apache.cassandra.thrift.IndexClause;
@@ -257,18 +257,15 @@ public class ColumnFamilyStore implement
         }
     }
 
-    // called when dropping or renaming a CF. Performs mbean housekeeping and invalidates CFS to other operations.
-    public void unregisterMBean()
+    /** call when dropping or renaming a CF. Performs mbean housekeeping and invalidates CFS to other operations */
+    public void invalidate()
     {
         try
         {
             valid = false;
-            MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
-            ObjectName nameObj = new ObjectName(mbeanName);
-            if (mbs.isRegistered(nameObj))
-                mbs.unregisterMBean(nameObj);
-           
-            indexManager.unregisterMBeans();
+            unregisterMBean();
+            data.removeAllSSTables();
+            indexManager.invalidate();
         }
         catch (Exception e)
         {
@@ -277,6 +274,14 @@ public class ColumnFamilyStore implement
         }
     }
 
+    void unregisterMBean() throws MalformedObjectNameException, InstanceNotFoundException, MBeanRegistrationException
+    {
+        MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
+        ObjectName nameObj = new ObjectName(mbeanName);
+        if (mbs.isRegistered(nameObj))
+            mbs.unregisterMBean(nameObj);
+    }
+
     public long getMinRowSize()
     {
         return data.getMinRowSize();
@@ -987,12 +992,6 @@ public class ColumnFamilyStore implement
         return valid;
     }
 
-    public void removeAllSSTables() throws IOException
-    {
-        data.removeAllSSTables();
-        indexManager.removeAllIndexes();
-    }
-
     public long getMemtableColumnsCount()
     {
         return getMemtableThreadSafe().getOperations();

Modified: cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/Table.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/Table.java?rev=1198830&r1=1198829&r2=1198830&view=diff
==============================================================================
--- cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/Table.java (original)
+++ cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/Table.java Mon Nov  7 17:34:04 2011
@@ -29,7 +29,6 @@ import java.util.Comparator;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 import java.util.SortedSet;
 import java.util.TreeSet;
 import java.util.concurrent.ConcurrentHashMap;
@@ -41,7 +40,6 @@ import org.apache.cassandra.config.*;
 import org.apache.cassandra.db.commitlog.CommitLog;
 import org.apache.cassandra.db.filter.QueryFilter;
 import org.apache.cassandra.db.filter.QueryPath;
-import org.apache.cassandra.db.index.SecondaryIndex;
 import org.apache.cassandra.io.sstable.SSTableDeletingTask;
 import org.apache.cassandra.io.sstable.SSTableReader;
 import org.apache.cassandra.io.util.FileUtils;
@@ -343,7 +341,6 @@ public class Table
             return;
         
         unloadCf(cfs);
-        cfs.removeAllSSTables();
     }
     
     // disassociate a cfs from this table instance.
@@ -361,7 +358,7 @@ public class Table
         {
             throw new IOException(e);
         }
-        cfs.unregisterMBean();
+        cfs.invalidate();
     }
     
     /** adds a cf to internal structures, ends up creating disk files). */

Modified: cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/index/SecondaryIndex.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/index/SecondaryIndex.java?rev=1198830&r1=1198829&r2=1198830&view=diff
==============================================================================
--- cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/index/SecondaryIndex.java (original)
+++ cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/index/SecondaryIndex.java Mon Nov  7 17:34:04 2011
@@ -132,9 +132,9 @@ public abstract class SecondaryIndex
     public abstract void renameIndex(String newCfName) throws IOException;
     
     /**
-     * Unregisters this index's mbean if one exists
+     * Remove the index and unregisters this index's mbean if one exists
      */
-    public abstract void unregisterMbean();
+    public abstract void invalidate();
     
     
     /**

Modified: cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/index/SecondaryIndexManager.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/index/SecondaryIndexManager.java?rev=1198830&r1=1198829&r2=1198830&view=diff
==============================================================================
--- cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/index/SecondaryIndexManager.java (original)
+++ cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/index/SecondaryIndexManager.java Mon Nov  7 17:34:04 2011
@@ -239,24 +239,14 @@ public class SecondaryIndexManager
     }
 
     /**
-     * Remove all index MBeans
+     * Remove the index
      */
-    public void unregisterMBeans()
+    public void invalidate()
     {
         for (Map.Entry<ByteBuffer, SecondaryIndex> entry : indexesByColumn.entrySet())
-            entry.getValue().unregisterMbean();
+            entry.getValue().invalidate();
     }
-    
-    /**
-     * Remove all underlying index data
-     * @throws IOException 
-     */
-    public void removeAllIndexes() throws IOException
-    {
-        for (Map.Entry<ByteBuffer, SecondaryIndex> entry : indexesByColumn.entrySet())
-            entry.getValue().removeIndex(entry.getKey());
-    }
-    
+        
     /**
      * Rename all underlying index files
      * @param newCfName the new index Name

Modified: cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/index/keys/KeysIndex.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/index/keys/KeysIndex.java?rev=1198830&r1=1198829&r2=1198830&view=diff
==============================================================================
--- cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/index/keys/KeysIndex.java (original)
+++ cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/db/index/keys/KeysIndex.java Mon Nov  7 17:34:04 2011
@@ -109,8 +109,7 @@ public class KeysIndex extends PerColumn
 
     public void removeIndex(ByteBuffer columnName) throws IOException
     {        
-        indexCfs.removeAllSSTables();
-        indexCfs.unregisterMBean();
+        indexCfs.invalidate();
     }
 
     public void forceBlockingFlush() throws IOException
@@ -129,9 +128,9 @@ public class KeysIndex extends PerColumn
         }
     }
 
-    public void unregisterMbean()
+    public void invalidate()
     {
-        indexCfs.unregisterMBean();
+        indexCfs.invalidate();
     }
 
     public ColumnFamilyStore getIndexCfs()

Modified: cassandra/branches/cassandra-1.0/test/unit/org/apache/cassandra/db/KeyCacheTest.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/test/unit/org/apache/cassandra/db/KeyCacheTest.java?rev=1198830&r1=1198829&r2=1198830&view=diff
==============================================================================
--- cassandra/branches/cassandra-1.0/test/unit/org/apache/cassandra/db/KeyCacheTest.java (original)
+++ cassandra/branches/cassandra-1.0/test/unit/org/apache/cassandra/db/KeyCacheTest.java Mon Nov  7 17:34:04 2011
@@ -90,12 +90,13 @@ public class KeyCacheTest extends Cleanu
         store.invalidateKeyCache();
         assert store.getKeyCacheSize() == 0;
 
-        // load the cache from disk
+        // load the cache from disk.  unregister the old mbean so we can recreate a new CFS object.
+        // but don't invalidate() the old CFS, which would nuke the data we want to try to load
         store.unregisterMBean(); // unregistering old MBean to test how key cache will be loaded
         ColumnFamilyStore newStore = ColumnFamilyStore.createColumnFamilyStore(Table.open(TABLE1), COLUMN_FAMILY3);
-        assert newStore.getKeyCacheSize() == 100;
+        assertEquals(100, newStore.getKeyCacheSize());
 
-        assert savedMap.size() == 100;
+        assertEquals(100, savedMap.size());
         for (Map.Entry<Pair<Descriptor, DecoratedKey>, Long> entry : savedMap.entrySet())
         {
             assert newStore.getKeyCache().get(entry.getKey()).equals(entry.getValue());

Modified: cassandra/branches/cassandra-1.0/test/unit/org/apache/cassandra/db/compaction/CompactionsTest.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/test/unit/org/apache/cassandra/db/compaction/CompactionsTest.java?rev=1198830&r1=1198829&r2=1198830&view=diff
==============================================================================
--- cassandra/branches/cassandra-1.0/test/unit/org/apache/cassandra/db/compaction/CompactionsTest.java (original)
+++ cassandra/branches/cassandra-1.0/test/unit/org/apache/cassandra/db/compaction/CompactionsTest.java Mon Nov  7 17:34:04 2011
@@ -39,7 +39,6 @@ import org.apache.cassandra.db.filter.Qu
 import org.apache.cassandra.db.filter.QueryPath;
 import org.apache.cassandra.io.sstable.*;
 import org.apache.cassandra.utils.ByteBufferUtil;
-import org.apache.cassandra.utils.FBUtilities;
 
 public class CompactionsTest extends CleanupHelper
 {
@@ -231,7 +230,7 @@ public class CompactionsTest extends Cle
         ColumnFamilyStore store = table.getColumnFamilyStore(cfname);
 
         // disable compaction while flushing
-        store.removeAllSSTables();
+        store.clearUnsafe();
         store.disableAutoCompaction();
 
         // Add test row

Modified: cassandra/branches/cassandra-1.0/test/unit/org/apache/cassandra/streaming/StreamingTransferTest.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/test/unit/org/apache/cassandra/streaming/StreamingTransferTest.java?rev=1198830&r1=1198829&r2=1198830&view=diff
==============================================================================
--- cassandra/branches/cassandra-1.0/test/unit/org/apache/cassandra/streaming/StreamingTransferTest.java (original)
+++ cassandra/branches/cassandra-1.0/test/unit/org/apache/cassandra/streaming/StreamingTransferTest.java Mon Nov  7 17:34:04 2011
@@ -28,7 +28,6 @@ import java.net.InetAddress;
 import java.util.*;
 
 import org.apache.cassandra.CleanupHelper;
-import org.apache.cassandra.Util;
 import org.apache.cassandra.db.*;
 import org.apache.cassandra.db.columniterator.IdentityQueryFilter;
 import org.apache.cassandra.db.context.CounterContext;
@@ -80,9 +79,7 @@ public class StreamingTransferTest exten
         Util.compactAll(cfs).get();
         assertEquals(1, cfs.getSSTables().size());
         SSTableReader sstable = cfs.getSSTables().iterator().next();
-        // We acquire a reference now, because removeAllSSTables will mark the sstable compacted, and we have work to do with it
-        sstable.acquireReference();
-        cfs.removeAllSSTables();
+        cfs.clearUnsafe();
 
         // transfer the first and last key
         logger.debug("Transferring " + cfs.columnFamily);