diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/RegionMetrics.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/RegionMetrics.java index 4d9ebc28eb2b..ddc64c3064f5 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/RegionMetrics.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/RegionMetrics.java @@ -156,8 +156,8 @@ default String getNameAsString() { int getStoreRefCount(); /** - * @return the max reference count for any store file among all stores files + * @return the max reference count for any store file among all compacted stores files * of this region */ - int getMaxStoreFileRefCount(); + int getMaxCompactedStoreFileRefCount(); } diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/RegionMetricsBuilder.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/RegionMetricsBuilder.java index 25d44a933a85..05e33deae051 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/RegionMetricsBuilder.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/RegionMetricsBuilder.java @@ -66,7 +66,7 @@ public static RegionMetrics toRegionMetrics(ClusterStatusProtos.RegionLoad regio .setStoreCount(regionLoadPB.getStores()) .setStoreFileCount(regionLoadPB.getStorefiles()) .setStoreRefCount(regionLoadPB.getStoreRefCount()) - .setMaxStoreFileRefCount(regionLoadPB.getMaxStoreFileRefCount()) + .setMaxCompactedStoreFileRefCount(regionLoadPB.getMaxCompactedStoreFileRefCount()) .setStoreFileSize(new Size(regionLoadPB.getStorefileSizeMB(), Size.Unit.MEGABYTE)) .setStoreSequenceIds(regionLoadPB.getStoreCompleteSequenceIdList().stream() .collect(Collectors.toMap( @@ -114,7 +114,7 @@ public static ClusterStatusProtos.RegionLoad toRegionLoad(RegionMetrics regionMe .setStores(regionMetrics.getStoreCount()) .setStorefiles(regionMetrics.getStoreFileCount()) .setStoreRefCount(regionMetrics.getStoreRefCount()) - .setMaxStoreFileRefCount(regionMetrics.getMaxStoreFileRefCount()) + .setMaxCompactedStoreFileRefCount(regionMetrics.getMaxCompactedStoreFileRefCount()) .setStorefileSizeMB((int) regionMetrics.getStoreFileSize().get(Size.Unit.MEGABYTE)) .addAllStoreCompleteSequenceId(toStoreSequenceId(regionMetrics.getStoreSequenceId())) .setStoreUncompressedSizeMB( @@ -130,7 +130,7 @@ public static RegionMetricsBuilder newBuilder(byte[] name) { private int storeCount; private int storeFileCount; private int storeRefCount; - private int maxStoreFileRefCount; + private int maxCompactedStoreFileRefCount; private long compactingCellCount; private long compactedCellCount; private Size storeFileSize = Size.ZERO; @@ -164,8 +164,8 @@ public RegionMetricsBuilder setStoreRefCount(int value) { this.storeRefCount = value; return this; } - public RegionMetricsBuilder setMaxStoreFileRefCount(int value) { - this.maxStoreFileRefCount = value; + public RegionMetricsBuilder setMaxCompactedStoreFileRefCount(int value) { + this.maxCompactedStoreFileRefCount = value; return this; } public RegionMetricsBuilder setCompactingCellCount(long value) { @@ -242,7 +242,7 @@ public RegionMetrics build() { storeCount, storeFileCount, storeRefCount, - maxStoreFileRefCount, + maxCompactedStoreFileRefCount, compactingCellCount, compactedCellCount, storeFileSize, @@ -267,7 +267,7 @@ private static class RegionMetricsImpl implements RegionMetrics { private final int storeCount; private final int storeFileCount; private final int storeRefCount; - private final int maxStoreFileRefCount; + private final int maxCompactedStoreFileRefCount; private final long compactingCellCount; private final long compactedCellCount; private final Size storeFileSize; @@ -289,7 +289,7 @@ private static class RegionMetricsImpl implements RegionMetrics { int storeCount, int storeFileCount, int storeRefCount, - int maxStoreFileRefCount, + int maxCompactedStoreFileRefCount, final long compactingCellCount, long compactedCellCount, Size storeFileSize, @@ -311,7 +311,7 @@ private static class RegionMetricsImpl implements RegionMetrics { this.storeCount = storeCount; this.storeFileCount = storeFileCount; this.storeRefCount = storeRefCount; - this.maxStoreFileRefCount = maxStoreFileRefCount; + this.maxCompactedStoreFileRefCount = maxCompactedStoreFileRefCount; this.compactingCellCount = compactingCellCount; this.compactedCellCount = compactedCellCount; this.storeFileSize = Preconditions.checkNotNull(storeFileSize); @@ -352,8 +352,8 @@ public int getStoreRefCount() { } @Override - public int getMaxStoreFileRefCount() { - return maxStoreFileRefCount; + public int getMaxCompactedStoreFileRefCount() { + return maxCompactedStoreFileRefCount; } @Override @@ -449,8 +449,8 @@ public String toString() { this.getStoreFileCount()); Strings.appendKeyValue(sb, "storeRefCount", this.getStoreRefCount()); - Strings.appendKeyValue(sb, "maxStoreFileRefCount", - this.getMaxStoreFileRefCount()); + Strings.appendKeyValue(sb, "maxCompactedStoreFileRefCount", + this.getMaxCompactedStoreFileRefCount()); Strings.appendKeyValue(sb, "uncompressedStoreFileSize", this.getUncompressedStoreFileSize()); Strings.appendKeyValue(sb, "lastMajorCompactionTimestamp", diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/ServerMetricsBuilder.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/ServerMetricsBuilder.java index 88e26f47e68c..5975d392ac76 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/ServerMetricsBuilder.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/ServerMetricsBuilder.java @@ -360,7 +360,7 @@ public String toString() { int storeCount = 0; int storeFileCount = 0; int storeRefCount = 0; - int maxStoreFileRefCount = 0; + int maxCompactedStoreFileRefCount = 0; long uncompressedStoreFileSizeMB = 0; long storeFileSizeMB = 0; long memStoreSizeMB = 0; @@ -377,8 +377,9 @@ public String toString() { storeCount += r.getStoreCount(); storeFileCount += r.getStoreFileCount(); storeRefCount += r.getStoreRefCount(); - int currentMaxStoreFileRefCount = r.getMaxStoreFileRefCount(); - maxStoreFileRefCount = Math.max(maxStoreFileRefCount, currentMaxStoreFileRefCount); + int currentMaxCompactedStoreFileRefCount = r.getMaxCompactedStoreFileRefCount(); + maxCompactedStoreFileRefCount = Math.max(maxCompactedStoreFileRefCount, + currentMaxCompactedStoreFileRefCount); uncompressedStoreFileSizeMB += r.getUncompressedStoreFileSize().get(Size.Unit.MEGABYTE); storeFileSizeMB += r.getStoreFileSize().get(Size.Unit.MEGABYTE); memStoreSizeMB += r.getMemStoreSize().get(Size.Unit.MEGABYTE); @@ -401,7 +402,8 @@ public String toString() { Strings.appendKeyValue(sb, "numberOfStores", storeCount); Strings.appendKeyValue(sb, "numberOfStorefiles", storeFileCount); Strings.appendKeyValue(sb, "storeRefCount", storeRefCount); - Strings.appendKeyValue(sb, "maxStoreFileRefCount", maxStoreFileRefCount); + Strings.appendKeyValue(sb, "maxCompactedStoreFileRefCount", + maxCompactedStoreFileRefCount); Strings.appendKeyValue(sb, "storefileUncompressedSizeMB", uncompressedStoreFileSizeMB); Strings.appendKeyValue(sb, "storefileSizeMB", storeFileSizeMB); if (uncompressedStoreFileSizeMB != 0) { diff --git a/hbase-common/src/main/resources/hbase-default.xml b/hbase-common/src/main/resources/hbase-default.xml index f738f0500b6d..dc566fdc2cb7 100644 --- a/hbase-common/src/main/resources/hbase-default.xml +++ b/hbase-common/src/main/resources/hbase-default.xml @@ -1915,15 +1915,15 @@ possible configurations would overwhelm and obscure the important. hbase.regions.recovery.store.file.ref.count -1 - Very large ref count on a file indicates + Very large ref count on a compacted store file indicates that it is a ref leak on that object. Such files - can not be removed even after it is invalidated + can not be removed after it is invalidated via compaction. Only way to recover in such scenario is to reopen the region which can release all resources, like the refcount, leases, etc. This config represents Store files Ref Count threshold value considered for reopening regions. - Any region with store files ref count > this value + Any region with compacted store files ref count > this value would be eligible for reopening by master. Default value -1 indicates this feature is turned off. Only positive integer value should be provided to enable diff --git a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.java b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.java index f4fbf390ae75..aef861933b3f 100644 --- a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.java +++ b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.java @@ -233,7 +233,7 @@ public interface MetricsRegionServerSource extends BaseSource, JvmPauseMonitorSo String STOREFILE_COUNT_DESC = "Number of Store Files"; String STORE_REF_COUNT = "storeRefCount"; String STORE_REF_COUNT_DESC = "Store reference count"; - String MAX_STORE_FILE_REF_COUNT = "maxStoreFileRefCount"; + String MAX_COMPACTED_STORE_FILE_REF_COUNT = "maxCompactedStoreFileRefCount"; String MEMSTORE_SIZE = "memStoreSize"; String MEMSTORE_SIZE_DESC = "Size of the memstore"; String STOREFILE_SIZE = "storeFileSize"; diff --git a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.java b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.java index ccdc209575f9..e63a424137d5 100644 --- a/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.java +++ b/hbase-hadoop-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.java @@ -167,7 +167,7 @@ public interface MetricsRegionWrapper { /** * @return the max number of references active on any store file among - * all store files that belong to this region + * all compacted store files that belong to this region */ - long getMaxStoreFileRefCount(); + long getMaxCompactedStoreFileRefCount(); } diff --git a/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionSourceImpl.java b/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionSourceImpl.java index bc8ecb930dc8..f2eabf886b54 100644 --- a/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionSourceImpl.java +++ b/hbase-hadoop2-compat/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionSourceImpl.java @@ -218,9 +218,10 @@ void snapshot(MetricsRecordBuilder mrb, boolean ignored) { MetricsRegionServerSource.STORE_REF_COUNT), this.regionWrapper.getStoreRefCount()); mrb.addGauge(Interns.info( - regionNamePrefix + MetricsRegionServerSource.MAX_STORE_FILE_REF_COUNT, - MetricsRegionServerSource.MAX_STORE_FILE_REF_COUNT), - this.regionWrapper.getMaxStoreFileRefCount()); + regionNamePrefix + MetricsRegionServerSource.MAX_COMPACTED_STORE_FILE_REF_COUNT, + MetricsRegionServerSource.MAX_COMPACTED_STORE_FILE_REF_COUNT), + this.regionWrapper.getMaxCompactedStoreFileRefCount() + ); mrb.addGauge(Interns.info( regionNamePrefix + MetricsRegionServerSource.MEMSTORE_SIZE, MetricsRegionServerSource.MEMSTORE_SIZE_DESC), diff --git a/hbase-hadoop2-compat/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsRegionSourceImpl.java b/hbase-hadoop2-compat/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsRegionSourceImpl.java index bafa854feb39..4bd056610535 100644 --- a/hbase-hadoop2-compat/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsRegionSourceImpl.java +++ b/hbase-hadoop2-compat/src/test/java/org/apache/hadoop/hbase/regionserver/TestMetricsRegionSourceImpl.java @@ -100,7 +100,7 @@ public long getStoreRefCount() { } @Override - public long getMaxStoreFileRefCount() { + public long getMaxCompactedStoreFileRefCount() { return 0; } diff --git a/hbase-protocol-shaded/src/main/protobuf/ClusterStatus.proto b/hbase-protocol-shaded/src/main/protobuf/ClusterStatus.proto index dcccb1970fff..879992629869 100644 --- a/hbase-protocol-shaded/src/main/protobuf/ClusterStatus.proto +++ b/hbase-protocol-shaded/src/main/protobuf/ClusterStatus.proto @@ -151,10 +151,10 @@ message RegionLoad { optional int32 store_ref_count = 21 [default = 0]; /** - * The max number of references active on single store file among all store files + * The max number of references active on single store file among all compacted store files * that belong to given region */ - optional int32 max_store_file_ref_count = 22 [default = 0]; + optional int32 max_compacted_store_file_ref_count = 22 [default = 0]; } message UserLoad { diff --git a/hbase-protocol/src/main/protobuf/ClusterStatus.proto b/hbase-protocol/src/main/protobuf/ClusterStatus.proto index 073059be3db5..0b364142c769 100644 --- a/hbase-protocol/src/main/protobuf/ClusterStatus.proto +++ b/hbase-protocol/src/main/protobuf/ClusterStatus.proto @@ -147,10 +147,10 @@ message RegionLoad { optional int32 store_ref_count = 21 [default = 0]; /** - * The max number of references active on single store file among all store files + * The max number of references active on single store file among all compacted store files * that belong to given region */ - optional int32 max_store_file_ref_count = 22 [default = 0]; + optional int32 max_compacted_store_file_ref_count = 22 [default = 0]; } message UserLoad { diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/RegionsRecoveryChore.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/RegionsRecoveryChore.java index 9f204343bc08..a756715062ec 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/RegionsRecoveryChore.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/RegionsRecoveryChore.java @@ -130,17 +130,18 @@ private Map> getTableToRegionsByRefCount( for (ServerMetrics serverMetrics : serverMetricsMap.values()) { Map regionMetricsMap = serverMetrics.getRegionMetrics(); for (RegionMetrics regionMetrics : regionMetricsMap.values()) { - // For each region, each store file can have different ref counts - // We need to find maximum of all such ref counts and if that max count - // is beyond a threshold value, we should reopen the region. - // Here, we take max ref count of all store files and not the cumulative - // count of all store files - final int maxStoreFileRefCount = regionMetrics.getMaxStoreFileRefCount(); - - if (maxStoreFileRefCount > storeFileRefCountThreshold) { + // For each region, each compacted store file can have different ref counts + // We need to find maximum of all such ref counts and if that max count of compacted + // store files is beyond a threshold value, we should reopen the region. + // Here, we take max ref count of all compacted store files and not the cumulative + // count of all compacted store files + final int maxCompactedStoreFileRefCount = regionMetrics + .getMaxCompactedStoreFileRefCount(); + + if (maxCompactedStoreFileRefCount > storeFileRefCountThreshold) { final byte[] regionName = regionMetrics.getRegionName(); prepareTableToReopenRegionsMap(tableToReopenRegionsMap, regionName, - maxStoreFileRefCount); + maxCompactedStoreFileRefCount); } } } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java index dff3d6f2c6ae..6a778b8cd5aa 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java @@ -1638,7 +1638,7 @@ RegionLoad createRegionLoad(final HRegion r, RegionLoad.Builder regionLoadBldr, int stores = 0; int storefiles = 0; int storeRefCount = 0; - int maxStoreFileRefCount = 0; + int maxCompactedStoreFileRefCount = 0; int storeUncompressedSizeMB = 0; int storefileSizeMB = 0; int memstoreSizeMB = (int) (r.getMemStoreDataSize() / 1024 / 1024); @@ -1654,8 +1654,9 @@ RegionLoad createRegionLoad(final HRegion r, RegionLoad.Builder regionLoadBldr, storefiles += store.getStorefilesCount(); int currentStoreRefCount = store.getStoreRefCount(); storeRefCount += currentStoreRefCount; - int currentMaxStoreFileRefCount = store.getMaxStoreFileRefCount(); - maxStoreFileRefCount = Math.max(maxStoreFileRefCount, currentMaxStoreFileRefCount); + int currentMaxCompactedStoreFileRefCount = store.getMaxCompactedStoreFileRefCount(); + maxCompactedStoreFileRefCount = Math.max(maxCompactedStoreFileRefCount, + currentMaxCompactedStoreFileRefCount); storeUncompressedSizeMB += (int) (store.getStoreSizeUncompressed() / 1024 / 1024); storefileSizeMB += (int) (store.getStorefilesSize() / 1024 / 1024); //TODO: storefileIndexSizeKB is same with rootLevelIndexSizeKB? @@ -1684,7 +1685,7 @@ RegionLoad createRegionLoad(final HRegion r, RegionLoad.Builder regionLoadBldr, .setStores(stores) .setStorefiles(storefiles) .setStoreRefCount(storeRefCount) - .setMaxStoreFileRefCount(maxStoreFileRefCount) + .setMaxCompactedStoreFileRefCount(maxCompactedStoreFileRefCount) .setStoreUncompressedSizeMB(storeUncompressedSizeMB) .setStorefileSizeMB(storefileSizeMB) .setMemStoreSizeMB(memstoreSizeMB) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HStore.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HStore.java index 0a3b59f62c66..d5f60783b908 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HStore.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HStore.java @@ -2806,18 +2806,19 @@ public int getStoreRefCount() { } /** - * @return get maximum ref count of storeFile among all HStore Files + * @return get maximum ref count of storeFile among all compacted HStore Files * for the HStore */ - public int getMaxStoreFileRefCount() { - OptionalInt maxStoreFileRefCount = this.storeEngine.getStoreFileManager() - .getStorefiles() + public int getMaxCompactedStoreFileRefCount() { + OptionalInt maxCompactedStoreFileRefCount = this.storeEngine.getStoreFileManager() + .getCompactedfiles() .stream() .filter(sf -> sf.getReader() != null) .filter(HStoreFile::isHFile) .mapToInt(HStoreFile::getRefCount) .max(); - return maxStoreFileRefCount.isPresent() ? maxStoreFileRefCount.getAsInt() : 0; + return maxCompactedStoreFileRefCount.isPresent() + ? maxCompactedStoreFileRefCount.getAsInt() : 0; } } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.java index e15623dff35e..1c75137f7539 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.java @@ -49,7 +49,7 @@ public class MetricsRegionWrapperImpl implements MetricsRegionWrapper, Closeable private Runnable runnable; private long numStoreFiles; private long storeRefCount; - private long maxStoreFileRefCount; + private long maxCompactedStoreFileRefCount; private long memstoreSize; private long storeFileSize; private long maxStoreFileAge; @@ -127,8 +127,8 @@ public long getStoreRefCount() { } @Override - public long getMaxStoreFileRefCount() { - return maxStoreFileRefCount; + public long getMaxCompactedStoreFileRefCount() { + return maxCompactedStoreFileRefCount; } @Override @@ -239,7 +239,7 @@ public class HRegionMetricsWrapperRunnable implements Runnable { public void run() { long tempNumStoreFiles = 0; int tempStoreRefCount = 0; - int tempMaxStoreFileRefCount = 0; + int tempMaxCompactedStoreFileRefCount = 0; long tempMemstoreSize = 0; long tempStoreFileSize = 0; long tempMaxStoreFileAge = 0; @@ -254,9 +254,9 @@ public void run() { tempNumStoreFiles += store.getStorefilesCount(); int currentStoreRefCount = store.getStoreRefCount(); tempStoreRefCount += currentStoreRefCount; - int currentMaxStoreFileRefCount = store.getMaxStoreFileRefCount(); - tempMaxStoreFileRefCount = Math.max(tempMaxStoreFileRefCount, - currentMaxStoreFileRefCount); + int currentMaxCompactedStoreFileRefCount = store.getMaxCompactedStoreFileRefCount(); + tempMaxCompactedStoreFileRefCount = Math.max(tempMaxCompactedStoreFileRefCount, + currentMaxCompactedStoreFileRefCount); tempMemstoreSize += store.getMemStoreSize().getDataSize(); tempStoreFileSize += store.getStorefilesSize(); OptionalLong storeMaxStoreFileAge = store.getMaxStoreFileAge(); @@ -284,7 +284,7 @@ public void run() { numStoreFiles = tempNumStoreFiles; storeRefCount = tempStoreRefCount; - maxStoreFileRefCount = tempMaxStoreFileRefCount; + maxCompactedStoreFileRefCount = tempMaxCompactedStoreFileRefCount; memstoreSize = tempMemstoreSize; storeFileSize = tempStoreFileSize; maxStoreFileAge = tempMaxStoreFileAge; diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestRegionsRecoveryChore.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestRegionsRecoveryChore.java index f8a8b40b6540..1f5802c98646 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestRegionsRecoveryChore.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestRegionsRecoveryChore.java @@ -214,7 +214,7 @@ public void testRegionReopensWithoutStoreRefConfig() throws Exception { Mockito.verify(hMaster, Mockito.times(0)).reopenRegions(Mockito.any(), Mockito.anyList(), Mockito.anyLong(), Mockito.anyLong()); - // default maxStoreFileRefCount is -1 (no regions to be reopened using AM) + // default maxCompactedStoreFileRefCount is -1 (no regions to be reopened using AM) Mockito.verify(hMaster, Mockito.times(0)).getAssignmentManager(); Mockito.verify(assignmentManager, Mockito.times(0)) .getRegionInfo(Mockito.any()); @@ -380,7 +380,7 @@ public long getLastReportTimestamp() { return serverMetrics; } - private static RegionMetrics getRegionMetrics(byte[] regionName, int storeRefCount) { + private static RegionMetrics getRegionMetrics(byte[] regionName, int compactedStoreRefCount) { RegionMetrics regionMetrics = new RegionMetrics() { @Override @@ -485,12 +485,12 @@ public long getLastMajorCompactionTimestamp() { @Override public int getStoreRefCount() { - return storeRefCount; + return compactedStoreRefCount; } @Override - public int getMaxStoreFileRefCount() { - return storeRefCount; + public int getMaxCompactedStoreFileRefCount() { + return compactedStoreRefCount; } }; @@ -615,4 +615,4 @@ public boolean isStopped() { } -} \ No newline at end of file +} diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperStub.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperStub.java index 1e5cb3ed2e95..b1b8405bdd2d 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperStub.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperStub.java @@ -66,7 +66,7 @@ public long getStoreRefCount() { } @Override - public long getMaxStoreFileRefCount() { + public long getMaxCompactedStoreFileRefCount() { return 0; } diff --git a/src/main/asciidoc/_chapters/hbase-default.adoc b/src/main/asciidoc/_chapters/hbase-default.adoc index 59a3a073c362..653ed37a2b89 100644 --- a/src/main/asciidoc/_chapters/hbase-default.adoc +++ b/src/main/asciidoc/_chapters/hbase-default.adoc @@ -2183,15 +2183,15 @@ The percent of region server RPC threads failed to abort RS. + .Description - Very large ref count on a file indicates + Very large ref count on a compacted store file indicates that it is a ref leak on that object. Such files - can not be removed even after it is invalidated + can not be removed after it is invalidated via compaction. Only way to recover in such scenario is to reopen the region which can release all resources, like the refcount, leases, etc. This config represents Store files Ref Count threshold value considered for reopening regions. - Any region with store files ref count > this value + Any region with compacted store files ref count > this value would be eligible for reopening by master. Default value -1 indicates this feature is turned off. Only positive integer value should be provided to enable