diff --git hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/bucket/BucketAllocator.java hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/bucket/BucketAllocator.java index fedfd20..b5cd0c3 100644 --- hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/bucket/BucketAllocator.java +++ hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/bucket/BucketAllocator.java @@ -20,7 +20,6 @@ package org.apache.hadoop.hbase.io.hfile.bucket; -import java.util.ArrayList; import java.util.Arrays; import java.util.Map; import java.util.concurrent.atomic.AtomicLong; @@ -183,7 +182,7 @@ public final class BucketAllocator { this.sizeIndex = sizeIndex; } - public void instantiateBucket(Bucket b) { + public synchronized void instantiateBucket(Bucket b) { assert b.isUninstantiated() || b.isCompletelyFree(); b.reconfigure(sizeIndex, bucketSizes, bucketCapacity); bucketList.put(b, b); @@ -235,7 +234,7 @@ public final class BucketAllocator { return b; } - private void removeBucket(Bucket b) { + private synchronized void removeBucket(Bucket b) { assert b.isCompletelyFree(); bucketList.remove(b); freeBuckets.remove(b); @@ -251,7 +250,7 @@ public final class BucketAllocator { if (b.isCompletelyFree()) completelyFreeBuckets.put(b, b); } - public IndexStatistics statistics() { + public synchronized IndexStatistics statistics() { long free = 0, used = 0; for (Object obj : bucketList.keySet()) { Bucket b = (Bucket) obj; diff --git hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.java hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.java index c0a9e17..7a83764 100644 --- hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.java +++ hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.java @@ -705,6 +705,8 @@ public class BucketCache implements BlockCache, HeapSize { } } + } catch (Throwable t) { + LOG.warn("Failed freeing space", t); } finally { cacheStats.evict(); freeInProgress = false;