HBASE-8547 Fix java.lang.RuntimeException: Cached an already cached block
git-svn-id: https://svn.apache.org/repos/asf/hbase/trunk@1482697 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
cb53db35f3
commit
ba37032a72
|
@ -292,7 +292,9 @@ public class LruBlockCache implements BlockCache, HeapSize {
|
||||||
public void cacheBlock(BlockCacheKey cacheKey, Cacheable buf, boolean inMemory) {
|
public void cacheBlock(BlockCacheKey cacheKey, Cacheable buf, boolean inMemory) {
|
||||||
CachedBlock cb = map.get(cacheKey);
|
CachedBlock cb = map.get(cacheKey);
|
||||||
if(cb != null) {
|
if(cb != null) {
|
||||||
throw new RuntimeException("Cached an already cached block");
|
String msg = "Cached an already cached block: " + cacheKey + " cb:" + cb.getCacheKey();
|
||||||
|
LOG.warn(msg);
|
||||||
|
assert false : msg;
|
||||||
}
|
}
|
||||||
cb = new CachedBlock(cacheKey, buf, count.incrementAndGet(), inMemory);
|
cb = new CachedBlock(cacheKey, buf, count.incrementAndGet(), inMemory);
|
||||||
long newSize = updateSizeMetrics(cb, false);
|
long newSize = updateSizeMetrics(cb, false);
|
||||||
|
|
|
@ -123,8 +123,9 @@ public class TestLruBlockCache {
|
||||||
try {
|
try {
|
||||||
cache.cacheBlock(block.cacheKey, block);
|
cache.cacheBlock(block.cacheKey, block);
|
||||||
assertTrue("Cache should not allow re-caching a block", false);
|
assertTrue("Cache should not allow re-caching a block", false);
|
||||||
} catch(RuntimeException re) {
|
} catch(AssertionError re) {
|
||||||
// expected
|
// expected
|
||||||
|
assertTrue(re.getMessage().contains("Cached an already cached block"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,8 @@
|
||||||
|
|
||||||
package org.apache.hadoop.hbase.util;
|
package org.apache.hadoop.hbase.util;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
import java.util.concurrent.Callable;
|
import java.util.concurrent.Callable;
|
||||||
|
@ -27,12 +29,10 @@ import java.util.concurrent.ExecutorCompletionService;
|
||||||
import java.util.concurrent.ExecutorService;
|
import java.util.concurrent.ExecutorService;
|
||||||
import java.util.concurrent.Executors;
|
import java.util.concurrent.Executors;
|
||||||
import java.util.concurrent.Future;
|
import java.util.concurrent.Future;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
|
||||||
import static org.junit.Assert.*;
|
|
||||||
|
|
||||||
import org.apache.hadoop.hbase.MediumTests;
|
import org.apache.hadoop.hbase.MediumTests;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.experimental.categories.Category;
|
import org.junit.experimental.categories.Category;
|
||||||
|
@ -105,6 +105,7 @@ public class TestIdLock {
|
||||||
idLock.assertMapEmpty();
|
idLock.assertMapEmpty();
|
||||||
} finally {
|
} finally {
|
||||||
exec.shutdown();
|
exec.shutdown();
|
||||||
|
exec.awaitTermination(5000, TimeUnit.MILLISECONDS);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue