You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by yu...@apache.org on 2013/07/24 18:13:53 UTC
[3/4] git commit: fix KeyCacheTest to work with globalized key cache
fix KeyCacheTest to work with globalized key cache
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/422d2236
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/422d2236
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/422d2236
Branch: refs/heads/cassandra-1.2
Commit: 422d2236b59b80e3cafef9fb8cad3235280e8626
Parents: ce4e4b9
Author: Yuki Morishita <yu...@apache.org>
Authored: Wed Jul 24 10:58:07 2013 -0500
Committer: Yuki Morishita <yu...@apache.org>
Committed: Wed Jul 24 11:00:05 2013 -0500
----------------------------------------------------------------------
.../org/apache/cassandra/db/KeyCacheTest.java | 75 +++++++++++++-------
1 file changed, 49 insertions(+), 26 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/422d2236/test/unit/org/apache/cassandra/db/KeyCacheTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/db/KeyCacheTest.java b/test/unit/org/apache/cassandra/db/KeyCacheTest.java
index 93f1fea..3458961 100644
--- a/test/unit/org/apache/cassandra/db/KeyCacheTest.java
+++ b/test/unit/org/apache/cassandra/db/KeyCacheTest.java
@@ -1,6 +1,4 @@
-package org.apache.cassandra.db;
/*
- *
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
@@ -9,35 +7,34 @@ package org.apache.cassandra.db;
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
+ * http://www.apache.org/licenses/LICENSE-2.0
*
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
*/
+package org.apache.cassandra.db;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ExecutionException;
-import org.apache.cassandra.cache.KeyCacheKey;
-import org.apache.cassandra.db.filter.QueryFilter;
-import org.apache.cassandra.service.CacheService;
-import org.apache.cassandra.thrift.ColumnParent;
-
import org.junit.AfterClass;
import org.junit.Test;
import org.apache.cassandra.SchemaLoader;
import org.apache.cassandra.Util;
-import org.apache.cassandra.db.filter.QueryPath;
+import org.apache.cassandra.cache.KeyCacheKey;
import org.apache.cassandra.db.compaction.CompactionManager;
+import org.apache.cassandra.db.filter.QueryFilter;
+import org.apache.cassandra.db.filter.QueryPath;
+import org.apache.cassandra.service.CacheService;
+import org.apache.cassandra.thrift.ColumnParent;
import org.apache.cassandra.utils.ByteBufferUtil;
+
import static junit.framework.Assert.assertEquals;
public class KeyCacheTest extends SchemaLoader
@@ -61,7 +58,7 @@ public class KeyCacheTest extends SchemaLoader
// empty the cache
CacheService.instance.invalidateKeyCache();
- assert CacheService.instance.keyCache.size() == 0;
+ assertKeyCacheSize(0, TABLE1, COLUMN_FAMILY2);
// insert data and force to disk
insertData(TABLE1, COLUMN_FAMILY2, 0, 100);
@@ -69,20 +66,37 @@ public class KeyCacheTest extends SchemaLoader
// populate the cache
readData(TABLE1, COLUMN_FAMILY2, 0, 100);
- assertEquals(100, CacheService.instance.keyCache.size());
+ assertKeyCacheSize(100, TABLE1, COLUMN_FAMILY2);
// really? our caches don't implement the map interface? (hence no .addAll)
Map<KeyCacheKey, RowIndexEntry> savedMap = new HashMap<KeyCacheKey, RowIndexEntry>();
for (KeyCacheKey k : CacheService.instance.keyCache.getKeySet())
{
- savedMap.put(k, CacheService.instance.keyCache.get(k));
+ if (k.desc.ksname.equals(TABLE1) && k.desc.cfname.equals(COLUMN_FAMILY2))
+ savedMap.put(k, CacheService.instance.keyCache.get(k));
}
// force the cache to disk
CacheService.instance.keyCache.submitWrite(Integer.MAX_VALUE).get();
CacheService.instance.invalidateKeyCache();
- assert CacheService.instance.keyCache.size() == 0;
+ assertKeyCacheSize(0, TABLE1, COLUMN_FAMILY2);
+
+ CacheService.instance.keyCache.loadSaved(store);
+ assertKeyCacheSize(savedMap.size(), TABLE1, COLUMN_FAMILY2);
+
+ // probably it's better to add equals/hashCode to RowIndexEntry...
+ for (Map.Entry<KeyCacheKey, RowIndexEntry> entry : savedMap.entrySet())
+ {
+ RowIndexEntry expected = entry.getValue();
+ RowIndexEntry actual = CacheService.instance.keyCache.get(entry.getKey());
+ assertEquals(expected.position, actual.position);
+ assertEquals(expected.columnsIndex(), actual.columnsIndex());
+ if (expected.isIndexed())
+ {
+ assertEquals(expected.deletionTime(), actual.deletionTime());
+ }
+ }
}
@Test
@@ -97,8 +111,7 @@ public class KeyCacheTest extends SchemaLoader
CacheService.instance.invalidateKeyCache();
// KeyCache should start at size 0 if we're caching X% of zero data.
- int keyCacheSize = CacheService.instance.keyCache.size();
- assert keyCacheSize == 0 : keyCacheSize;
+ assertKeyCacheSize(0, TABLE1, COLUMN_FAMILY1);
DecoratedKey key1 = Util.dk("key1");
DecoratedKey key2 = Util.dk("key2");
@@ -130,13 +143,12 @@ public class KeyCacheTest extends SchemaLoader
false,
10));
- assert CacheService.instance.keyCache.size() == 2;
+ assertKeyCacheSize(2, TABLE1, COLUMN_FAMILY1);
Util.compactAll(cfs).get();
- keyCacheSize = CacheService.instance.keyCache.size();
// after compaction cache should have entries for
// new SSTables, if we had 2 keys in cache previously it should become 4
- assert keyCacheSize == 4 : keyCacheSize;
+ assertKeyCacheSize(4, TABLE1, COLUMN_FAMILY1);
// re-read same keys to verify that key cache didn't grow further
cfs.getColumnFamily(QueryFilter.getSliceFilter(key1,
@@ -153,6 +165,17 @@ public class KeyCacheTest extends SchemaLoader
false,
10));
- assert CacheService.instance.keyCache.size() == 4;
+ assertKeyCacheSize(4, TABLE1, COLUMN_FAMILY1);
+ }
+
+ private void assertKeyCacheSize(int expected, String keyspace, String columnFamily)
+ {
+ int size = 0;
+ for (KeyCacheKey k : CacheService.instance.keyCache.getKeySet())
+ {
+ if (k.desc.ksname.equals(keyspace) && k.desc.cfname.equals(columnFamily))
+ size++;
+ }
+ assertEquals(expected, size);
}
}