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