HBASE-27755 Fix update_all_config Table-level StoreHotnessProtector configuration was overwritten

This commit is contained in:
Yiran-Wu 2023-03-27 13:37:03 +08:00
parent 735fb43388
commit f709319457
2 changed files with 56 additions and 2 deletions

View File

@ -24,6 +24,7 @@ import java.util.concurrent.ConcurrentSkipListMap;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell; import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CompoundConfiguration;
import org.apache.hadoop.hbase.RegionTooBusyException; import org.apache.hadoop.hbase.RegionTooBusyException;
import org.apache.hadoop.hbase.regionserver.Region; import org.apache.hadoop.hbase.regionserver.Region;
import org.apache.hadoop.hbase.regionserver.Store; import org.apache.hadoop.hbase.regionserver.Store;
@ -118,7 +119,12 @@ public class StoreHotnessProtector {
} }
public void update(Configuration conf) { public void update(Configuration conf) {
init(conf); // Add table descriptor configuration
CompoundConfiguration newconf = new CompoundConfiguration().add(conf);
if (this.region != null) {
newconf.addBytesMap(this.region.getTableDescriptor().getValues());
}
init(newconf);
preparePutToStoreMap.clear(); preparePutToStoreMap.clear();
LOG.debug("update config: {}", this); LOG.debug("update config: {}", this);
} }
@ -201,7 +207,9 @@ public class StoreHotnessProtector {
} }
public String toString() { public String toString() {
return "StoreHotnessProtector, parallelPutToStoreThreadLimit=" return "Table: "
+ ((this.region != null) ? this.region.getTableDescriptor().getTableName() : "UNKUNOWN")
+ "; StoreHotnessProtector, parallelPutToStoreThreadLimit="
+ this.parallelPutToStoreThreadLimit + " ; minColumnNum=" + this.parallelPutToStoreThreadLimit + " ; minColumnNum="
+ this.parallelPutToStoreThreadLimitCheckMinColumnCount + " ; preparePutThreadLimit=" + this.parallelPutToStoreThreadLimitCheckMinColumnCount + " ; preparePutThreadLimit="
+ this.parallelPreparePutToStoreThreadLimit + " ; hotProtect now " + this.parallelPreparePutToStoreThreadLimit + " ; hotProtect now "
@ -217,6 +225,18 @@ public class StoreHotnessProtector {
return preparePutToStoreMap; return preparePutToStoreMap;
} }
int getParallelPutToStoreThreadLimit() {
return parallelPutToStoreThreadLimit;
}
int getParallelPreparePutToStoreThreadLimit() {
return parallelPreparePutToStoreThreadLimit;
}
int getParallelPutToStoreThreadLimitCheckMinColumnCount() {
return parallelPutToStoreThreadLimitCheckMinColumnCount;
}
public static final long FIXED_SIZE = public static final long FIXED_SIZE =
ClassSize.align(ClassSize.OBJECT + 2 * ClassSize.REFERENCE + 3 * Bytes.SIZEOF_INT); ClassSize.align(ClassSize.OBJECT + 2 * ClassSize.REFERENCE + 3 * Bytes.SIZEOF_INT);
} }

View File

@ -35,7 +35,9 @@ import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell; import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.HBaseClassTestRule; import org.apache.hadoop.hbase.HBaseClassTestRule;
import org.apache.hadoop.hbase.RegionTooBusyException; import org.apache.hadoop.hbase.RegionTooBusyException;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.RegionInfo; import org.apache.hadoop.hbase.client.RegionInfo;
import org.apache.hadoop.hbase.client.TableDescriptorBuilder;
import org.apache.hadoop.hbase.regionserver.Region; import org.apache.hadoop.hbase.regionserver.Region;
import org.apache.hadoop.hbase.regionserver.Store; import org.apache.hadoop.hbase.regionserver.Store;
import org.apache.hadoop.hbase.testclassification.SmallTests; import org.apache.hadoop.hbase.testclassification.SmallTests;
@ -129,4 +131,36 @@ public class TestStoreHotnessProtector {
threadCount); threadCount);
} }
@Test
public void testUpdateConfig() {
Configuration conf = new Configuration();
conf.setInt(PARALLEL_PUT_STORE_THREADS_LIMIT_MIN_COLUMN_COUNT, 0);
conf.setInt(PARALLEL_PUT_STORE_THREADS_LIMIT, 10);
conf.setInt(PARALLEL_PREPARE_PUT_STORE_MULTIPLIER, 3);
Region mockRegion = mock(Region.class);
StoreHotnessProtector storeHotnessProtector = new StoreHotnessProtector(mockRegion, conf);
Store mockStore1 = mock(Store.class);
RegionInfo mockRegionInfo = mock(RegionInfo.class);
byte[] family = "testF1".getBytes();
TableDescriptorBuilder builder =
TableDescriptorBuilder.newBuilder(TableName.valueOf("TestTable"));
builder.setValue(PARALLEL_PUT_STORE_THREADS_LIMIT_MIN_COLUMN_COUNT, "1");
builder.setValue(PARALLEL_PUT_STORE_THREADS_LIMIT, "20");
builder.setValue(PARALLEL_PREPARE_PUT_STORE_MULTIPLIER, "30");
when(mockRegion.getStore(family)).thenReturn(mockStore1);
when(mockRegion.getRegionInfo()).thenReturn(mockRegionInfo);
when(mockRegion.getTableDescriptor()).thenReturn(builder.build());
// update config
storeHotnessProtector.update(conf);
// table config available
Assert.assertEquals(storeHotnessProtector.getParallelPreparePutToStoreThreadLimit(), 600);
Assert.assertEquals(storeHotnessProtector.getParallelPutToStoreThreadLimit(), 20);
Assert.assertEquals(storeHotnessProtector.getParallelPutToStoreThreadLimitCheckMinColumnCount(),
1);
}
} }