You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by st...@apache.org on 2012/04/26 19:03:51 UTC
svn commit: r1330971 - in /hbase/trunk/src:
main/java/org/apache/hadoop/hbase/io/hfile/LruBlockCache.java
test/java/org/apache/hadoop/hbase/io/hfile/TestLruBlockCache.java
Author: stack
Date: Thu Apr 26 17:03:51 2012
New Revision: 1330971
URL: http://svn.apache.org/viewvc?rev=1330971&view=rev
Log:
HBASE-5672 TestLruBlockCache#testBackgroundEvictionThread fails occasionally
Modified:
hbase/trunk/src/main/java/org/apache/hadoop/hbase/io/hfile/LruBlockCache.java
hbase/trunk/src/test/java/org/apache/hadoop/hbase/io/hfile/TestLruBlockCache.java
Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/io/hfile/LruBlockCache.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/io/hfile/LruBlockCache.java?rev=1330971&r1=1330970&r2=1330971&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/io/hfile/LruBlockCache.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/io/hfile/LruBlockCache.java Thu Apr 26 17:03:51 2012
@@ -572,15 +572,21 @@ public class LruBlockCache implements Bl
return this.stats.getEvictedCount();
}
+ EvictionThread getEvictionThread() {
+ return this.evictionThread;
+ }
+
/*
* Eviction thread. Sits in waiting state until an eviction is triggered
* when the cache size grows above the acceptable level.<p>
*
* Thread is triggered into action by {@link LruBlockCache#runEviction()}
*/
- private static class EvictionThread extends HasThread {
+ static class EvictionThread extends HasThread {
private WeakReference<LruBlockCache> cache;
private boolean go = true;
+ // flag set after enter the run method, used for test
+ private boolean enteringRun = false;
public EvictionThread(LruBlockCache cache) {
super(Thread.currentThread().getName() + ".LruBlockCache.EvictionThread");
@@ -590,6 +596,7 @@ public class LruBlockCache implements Bl
@Override
public void run() {
+ enteringRun = true;
while (this.go) {
synchronized(this) {
try {
@@ -612,6 +619,13 @@ public class LruBlockCache implements Bl
this.go = false;
interrupt();
}
+
+ /**
+ * Used for the test.
+ */
+ boolean isEnteringRun() {
+ return this.enteringRun;
+ }
}
/*
Modified: hbase/trunk/src/test/java/org/apache/hadoop/hbase/io/hfile/TestLruBlockCache.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/test/java/org/apache/hadoop/hbase/io/hfile/TestLruBlockCache.java?rev=1330971&r1=1330970&r2=1330971&view=diff
==============================================================================
--- hbase/trunk/src/test/java/org/apache/hadoop/hbase/io/hfile/TestLruBlockCache.java (original)
+++ hbase/trunk/src/test/java/org/apache/hadoop/hbase/io/hfile/TestLruBlockCache.java Thu Apr 26 17:03:51 2012
@@ -19,6 +19,9 @@
*/
package org.apache.hadoop.hbase.io.hfile;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
import java.nio.ByteBuffer;
import java.util.Collection;
import java.util.Map;
@@ -26,19 +29,18 @@ import java.util.Random;
import org.apache.hadoop.hbase.MediumTests;
import org.apache.hadoop.hbase.io.HeapSize;
+import org.apache.hadoop.hbase.io.hfile.LruBlockCache.EvictionThread;
import org.apache.hadoop.hbase.regionserver.metrics.SchemaMetrics;
import org.apache.hadoop.hbase.regionserver.metrics.TestSchemaMetrics;
import org.apache.hadoop.hbase.util.ClassSize;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
+import org.junit.experimental.categories.Category;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
-import org.junit.experimental.categories.Category;
-import static org.junit.Assert.*;
-
/**
* Tests the concurrent LruBlockCache.<p>
*
@@ -73,7 +75,6 @@ public class TestLruBlockCache {
@Test
public void testBackgroundEvictionThread() throws Exception {
-
long maxSize = 100000;
long blockSize = calculateBlockSizeDefault(maxSize, 9); // room for 9, will evict
@@ -81,6 +82,15 @@ public class TestLruBlockCache {
CachedItem [] blocks = generateFixedBlocks(10, blockSize, "block");
+ EvictionThread evictionThread = cache.getEvictionThread();
+ assertTrue(evictionThread != null);
+
+ // Make sure eviction thread has entered run method
+ while (!evictionThread.isEnteringRun()) {
+ Thread.sleep(1);
+ }
+
+
// Add all the blocks
for (CachedItem block : blocks) {
cache.cacheBlock(block.cacheKey, block);