Author: jbellis
Date: Mon May  2 19:19:54 2011
New Revision: 1098753

URL: http://svn.apache.org/viewvc?rev=1098753&view=rev
Log:
fix KeyCacheTest

Modified:
    cassandra/branches/cassandra-0.8/NEWS.txt
    
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/CompactionManager.java
    
cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/CleanupHelper.java
    
cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/SchemaLoader.java
    cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/Util.java
    
cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/db/CompactionsPurgeTest.java
    
cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/db/KeyCacheTest.java

Modified: cassandra/branches/cassandra-0.8/NEWS.txt
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/NEWS.txt?rev=1098753&r1=1098752&r2=1098753&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.8/NEWS.txt (original)
+++ cassandra/branches/cassandra-0.8/NEWS.txt Mon May  2 19:19:54 2011
@@ -35,12 +35,17 @@ Features
 
 Other
 -----
-    In the past, sstable2json would write column names and values as hex
-    strings, and now creates human readable values based on the
-    comparator/validator.  As a result, JSON dumps created with older 
-    versions of sstable2json are no longer compatible with json2sstable,
-    and imports must be made with a configuration that is identical to
-    the export.
+    - In the past, sstable2json would write column names and values as
+      hex strings, and now creates human readable values based on the
+      comparator/validator.  As a result, JSON dumps created with
+      older versions of sstable2json are no longer compatible with
+      json2sstable, and imports must be made with a configuration that
+      is identical to the export.
+    - manually-forced compactions ("nodetool compact") will do nothing
+      if only a single SSTable remains for a ColumnFamily. To force it
+      to compact that anyway (which will free up space if there are
+      a lot of expired tombstones), use the new forceUserDefinedCompaction
+      JMX method on CompactionManager.
 
 JMX
 ---

Modified: 
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/CompactionManager.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/CompactionManager.java?rev=1098753&r1=1098752&r2=1098753&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/CompactionManager.java
 (original)
+++ 
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/CompactionManager.java
 Mon May  2 19:19:54 2011
@@ -378,7 +378,7 @@ public class CompactionManager implement
         submitUserDefined(cfs, descriptors, getDefaultGcBefore(cfs));
     }
 
-    Future<Object> submitUserDefined(final ColumnFamilyStore cfs, final 
Collection<Descriptor> dataFiles, final int gcBefore)
+    public Future<Object> submitUserDefined(final ColumnFamilyStore cfs, final 
Collection<Descriptor> dataFiles, final int gcBefore)
     {
         Callable<Object> callable = new Callable<Object>()
         {

Modified: 
cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/CleanupHelper.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/CleanupHelper.java?rev=1098753&r1=1098752&r2=1098753&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/CleanupHelper.java
 (original)
+++ 
cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/CleanupHelper.java
 Mon May  2 19:19:54 2011
@@ -27,10 +27,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import org.apache.cassandra.config.DatabaseDescriptor;
-import org.apache.cassandra.db.ColumnFamilyStore;
-import org.apache.cassandra.db.DecoratedKey;
-import org.apache.cassandra.db.RowMutation;
-import org.apache.cassandra.db.Table;
+import org.apache.cassandra.db.*;
 import org.apache.cassandra.db.commitlog.CommitLog;
 import org.apache.cassandra.db.filter.QueryPath;
 import org.apache.cassandra.io.util.FileUtils;

Modified: 
cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/SchemaLoader.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/SchemaLoader.java?rev=1098753&r1=1098752&r2=1098753&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/SchemaLoader.java
 (original)
+++ 
cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/SchemaLoader.java
 Mon May  2 19:19:54 2011
@@ -188,6 +188,8 @@ public class SchemaLoader
                                   standardCFMD(ks_kcs, "Standard1")
                                               .keyCacheSize(0.5),
                                   standardCFMD(ks_kcs, "Standard2")
+                                              .keyCacheSize(1.0),
+                                  standardCFMD(ks_kcs, "Standard3")
                                               .keyCacheSize(1.0)));
 
         // RowCacheSpace

Modified: 
cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/Util.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/Util.java?rev=1098753&r1=1098752&r2=1098753&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/Util.java 
(original)
+++ cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/Util.java 
Mon May  2 19:19:54 2011
@@ -24,8 +24,11 @@ import java.io.IOException;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
 import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.Collection;
 import java.util.List;
 import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
 
 import org.apache.cassandra.db.*;
 import org.apache.cassandra.db.columniterator.IdentityQueryFilter;
@@ -34,6 +37,8 @@ import org.apache.cassandra.db.filter.Qu
 import org.apache.cassandra.dht.*;
 import org.apache.cassandra.gms.ApplicationState;
 import org.apache.cassandra.gms.VersionedValue;
+import org.apache.cassandra.io.sstable.Descriptor;
+import org.apache.cassandra.io.sstable.SSTableReader;
 import org.apache.cassandra.service.StorageService;
 import org.apache.cassandra.utils.ByteBufferUtil;
 import org.apache.cassandra.utils.NodeId;
@@ -179,4 +184,13 @@ public class Util
         for (int i=0; i<endpointTokens.size(); ++i)
             assertTrue(ss.getTokenMetadata().isMember(hosts.get(i)));
     }
+
+    public static Future<?> compactAll(ColumnFamilyStore cfs)
+    {
+        List<Descriptor> descriptors = new ArrayList<Descriptor>();
+        for (SSTableReader sstable : cfs.getSSTables())
+            descriptors.add(sstable.descriptor);
+        return CompactionManager.instance.submitUserDefined(cfs, descriptors, 
Integer.MAX_VALUE);
+    }
+
 }

Modified: 
cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/db/CompactionsPurgeTest.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/db/CompactionsPurgeTest.java?rev=1098753&r1=1098752&r2=1098753&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/db/CompactionsPurgeTest.java
 (original)
+++ 
cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/db/CompactionsPurgeTest.java
 Mon May  2 19:19:54 2011
@@ -171,12 +171,10 @@ public class CompactionsPurgeTest extend
             rm.apply();
         }
         cfs.forceBlockingFlush();
-
         assert cfs.getSSTables().size() == 1 : cfs.getSSTables(); // inserts & 
deletes were in the same memtable -> only deletes in sstable
 
         // compact and test that the row is completely gone
-        Descriptor descriptor = cfs.getSSTables().iterator().next().descriptor;
-        CompactionManager.instance.submitUserDefined(cfs, 
Collections.singletonList(descriptor), Integer.MAX_VALUE).get();
+        Util.compactAll(cfs).get();
         assert cfs.getSSTables().isEmpty();
         ColumnFamily cf = 
table.getColumnFamilyStore(cfName).getColumnFamily(QueryFilter.getIdentityFilter(key,
 new QueryPath(cfName)));
         assert cf == null : cf;
@@ -213,9 +211,7 @@ public class CompactionsPurgeTest extend
 
         // flush and major compact
         cfs.forceBlockingFlush();
-        assert cfs.getSSTables().size() == 1;
-        Descriptor descriptor = cfs.getSSTables().iterator().next().descriptor;
-        CompactionManager.instance.submitUserDefined(cfs, 
Collections.singletonList(descriptor), Integer.MAX_VALUE).get();
+        Util.compactAll(cfs).get();
 
         // re-inserts with timestamp lower than delete
         rm = new RowMutation(tableName, key.key);

Modified: 
cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/db/KeyCacheTest.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/db/KeyCacheTest.java?rev=1098753&r1=1098752&r2=1098753&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/db/KeyCacheTest.java
 (original)
+++ 
cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/db/KeyCacheTest.java
 Mon May  2 19:19:54 2011
@@ -35,11 +35,14 @@ import org.apache.cassandra.io.sstable.D
 import org.apache.cassandra.utils.ByteBufferUtil;
 import org.apache.cassandra.utils.Pair;
 
+import static junit.framework.Assert.assertEquals;
+
 public class KeyCacheTest extends CleanupHelper
 {
     private static final String TABLE1 = "KeyCacheSpace";
     private static final String COLUMN_FAMILY1 = "Standard1";
     private static final String COLUMN_FAMILY2 = "Standard2";
+    private static final String COLUMN_FAMILY3 = "Standard3";
 
     @Test
     public void testKeyCache50() throws IOException, ExecutionException, 
InterruptedException
@@ -58,19 +61,19 @@ public class KeyCacheTest extends Cleanu
     {
         CompactionManager.instance.disableAutoCompaction();
 
-        ColumnFamilyStore store = 
Table.open(TABLE1).getColumnFamilyStore(COLUMN_FAMILY2);
+        ColumnFamilyStore store = 
Table.open(TABLE1).getColumnFamilyStore(COLUMN_FAMILY3);
 
         // empty the cache
         store.invalidateKeyCache();
         assert store.getKeyCacheSize() == 0;
 
         // insert data and force to disk
-        insertData(TABLE1, COLUMN_FAMILY2, 0, 100);
+        insertData(TABLE1, COLUMN_FAMILY3, 0, 100);
         store.forceBlockingFlush();
 
         // populate the cache
-        readData(TABLE1, COLUMN_FAMILY2, 0, 100);
-        assert store.getKeyCacheSize() == 100;
+        readData(TABLE1, COLUMN_FAMILY3, 0, 100);
+        assertEquals(100, store.getKeyCacheSize());
 
         // really? our caches don't implement the map interface? (hence no 
.addAll)
         Map<Pair<Descriptor, DecoratedKey>, Long> savedMap = new 
HashMap<Pair<Descriptor, DecoratedKey>, Long>();
@@ -88,7 +91,7 @@ public class KeyCacheTest extends Cleanu
 
         // load the cache from disk
         store.unregisterMBean(); // unregistering old MBean to test how key 
cache will be loaded
-        ColumnFamilyStore newStore = 
ColumnFamilyStore.createColumnFamilyStore(Table.open(TABLE1), COLUMN_FAMILY2);
+        ColumnFamilyStore newStore = 
ColumnFamilyStore.createColumnFamilyStore(Table.open(TABLE1), COLUMN_FAMILY3);
         assert newStore.getKeyCacheSize() == 100;
 
         assert savedMap.size() == 100;
@@ -103,10 +106,10 @@ public class KeyCacheTest extends Cleanu
         CompactionManager.instance.disableAutoCompaction();
 
         Table table = Table.open(TABLE1);
-        ColumnFamilyStore store = table.getColumnFamilyStore(cfName);
+        ColumnFamilyStore cfs = table.getColumnFamilyStore(cfName);
 
         // KeyCache should start at size 1 if we're caching X% of zero data.
-        int keyCacheSize = store.getKeyCacheCapacity();
+        int keyCacheSize = cfs.getKeyCacheCapacity();
         assert keyCacheSize == 1 : keyCacheSize;
 
         DecoratedKey key1 = Util.dk("key1");
@@ -130,13 +133,13 @@ public class KeyCacheTest extends Cleanu
         rm.apply();
 
         // After a flush, the cache should expand to be X% of indices * 
INDEX_INTERVAL.
-        store.forceBlockingFlush();
-        keyCacheSize = store.getKeyCacheCapacity();
+        cfs.forceBlockingFlush();
+        keyCacheSize = cfs.getKeyCacheCapacity();
         assert keyCacheSize == expectedCacheSize : keyCacheSize;
 
         // After a compaction, the cache should expand to be X% of zero data.
-        CompactionManager.instance.submitMajor(store, 0, 
Integer.MAX_VALUE).get();
-        keyCacheSize = store.getKeyCacheCapacity();
+        Util.compactAll(cfs).get();
+        keyCacheSize = cfs.getKeyCacheCapacity();
         assert keyCacheSize == 1 : keyCacheSize;
     }
 }


Reply via email to