This is an automated email from the ASF dual-hosted git repository. psomogyi pushed a commit to branch branch-2 in repository https://gitbox.apache.org/repos/asf/hbase.git
The following commit(s) were added to refs/heads/branch-2 by this push: new 525373a4433 HBASE-28517 Make properties dynamically configured (#5823) 525373a4433 is described below commit 525373a44337c0b3d55ad9d2834f3ec77230dc48 Author: Abhishek Kothalikar <99398985+kabhish...@users.noreply.github.com> AuthorDate: Thu Apr 25 15:28:03 2024 +0530 HBASE-28517 Make properties dynamically configured (#5823) Signed-off-by: Duo Zhang <zhang...@apache.org> Signed-off-by: Peter Somogyi <psomo...@apache.org> (cherry picked from commit 7122da5978a558b8d1d31c5a20b95167f8bfbf8b) --- .../apache/hadoop/hbase/io/hfile/CacheConfig.java | 19 ++++++++++++++++--- .../org/apache/hadoop/hbase/regionserver/HStore.java | 5 ++++- .../apache/hadoop/hbase/regionserver/TestHStore.java | 20 ++++++++++++++++++++ 3 files changed, 40 insertions(+), 4 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/CacheConfig.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/CacheConfig.java index 0ba92da35c2..7fb1f1ec85b 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/CacheConfig.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/CacheConfig.java @@ -20,6 +20,7 @@ package org.apache.hadoop.hbase.io.hfile; import java.util.Optional; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor; +import org.apache.hadoop.hbase.conf.ConfigurationObserver; import org.apache.hadoop.hbase.io.ByteBuffAllocator; import org.apache.hadoop.hbase.io.hfile.BlockType.BlockCategory; import org.apache.yetus.audience.InterfaceAudience; @@ -30,7 +31,7 @@ import org.slf4j.LoggerFactory; * Stores all of the cache objects and configuration for a single HFile. */ @InterfaceAudience.Private -public class CacheConfig { +public class CacheConfig implements ConfigurationObserver { private static final Logger LOG = LoggerFactory.getLogger(CacheConfig.class.getName()); /** @@ -124,13 +125,13 @@ public class CacheConfig { * turned off on a per-family or per-request basis). If off we will STILL cache meta blocks; i.e. * INDEX and BLOOM types. This cannot be disabled. */ - private final boolean cacheDataOnRead; + private volatile boolean cacheDataOnRead; /** Whether blocks should be flagged as in-memory when being cached */ private final boolean inMemory; /** Whether data blocks should be cached when new files are written */ - private boolean cacheDataOnWrite; + private volatile boolean cacheDataOnWrite; /** Whether index blocks should be cached when new files are written */ private boolean cacheIndexesOnWrite; @@ -464,4 +465,16 @@ public class CacheConfig { + shouldEvictOnClose() + ", cacheDataCompressed=" + shouldCacheDataCompressed() + ", prefetchOnOpen=" + shouldPrefetchOnOpen(); } + + @Override + public void onConfigurationChange(Configuration conf) { + cacheDataOnRead = conf.getBoolean(CACHE_DATA_ON_READ_KEY, DEFAULT_CACHE_DATA_ON_READ); + cacheDataOnWrite = conf.getBoolean(CACHE_BLOCKS_ON_WRITE_KEY, DEFAULT_CACHE_DATA_ON_WRITE); + evictOnClose = conf.getBoolean(EVICT_BLOCKS_ON_CLOSE_KEY, DEFAULT_EVICT_ON_CLOSE); + LOG.info( + "Config hbase.block.data.cacheonread is changed to {}, " + + "hbase.rs.cacheblocksonwrite is changed to {}, " + + "hbase.rs.evictblocksonclose is changed to {}", + cacheDataOnRead, cacheDataOnWrite, evictOnClose); + } } 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 39117f45457..4b42f12b82f 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 @@ -2185,7 +2185,10 @@ public class HStore */ @Override public void registerChildren(ConfigurationManager manager) { - // No children to register + CacheConfig cacheConfig = this.storeContext.getCacheConf(); + if (cacheConfig != null) { + manager.registerObserver(cacheConfig); + } } /** diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHStore.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHStore.java index 86187172569..299e070acea 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHStore.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestHStore.java @@ -17,6 +17,12 @@ */ package org.apache.hadoop.hbase.regionserver; +import static org.apache.hadoop.hbase.io.hfile.CacheConfig.CACHE_BLOCKS_ON_WRITE_KEY; +import static org.apache.hadoop.hbase.io.hfile.CacheConfig.CACHE_DATA_ON_READ_KEY; +import static org.apache.hadoop.hbase.io.hfile.CacheConfig.DEFAULT_CACHE_DATA_ON_READ; +import static org.apache.hadoop.hbase.io.hfile.CacheConfig.DEFAULT_CACHE_DATA_ON_WRITE; +import static org.apache.hadoop.hbase.io.hfile.CacheConfig.DEFAULT_EVICT_ON_CLOSE; +import static org.apache.hadoop.hbase.io.hfile.CacheConfig.EVICT_BLOCKS_ON_CLOSE_KEY; import static org.apache.hadoop.hbase.regionserver.DefaultStoreEngine.DEFAULT_COMPACTION_POLICY_CLASS_KEY; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; @@ -2618,6 +2624,9 @@ public class TestHStore { Configuration conf = HBaseConfiguration.create(); conf.setInt(CompactionConfiguration.HBASE_HSTORE_COMPACTION_MAX_KEY, COMMON_MAX_FILES_TO_COMPACT); + conf.setBoolean(CACHE_DATA_ON_READ_KEY, false); + conf.setBoolean(CACHE_BLOCKS_ON_WRITE_KEY, true); + conf.setBoolean(EVICT_BLOCKS_ON_CLOSE_KEY, true); ColumnFamilyDescriptor hcd = ColumnFamilyDescriptorBuilder.newBuilder(family) .setConfiguration(CompactionConfiguration.HBASE_HSTORE_COMPACTION_MAX_KEY, String.valueOf(STORE_MAX_FILES_TO_COMPACT)) @@ -2628,8 +2637,19 @@ public class TestHStore { conf.setInt(CompactionConfiguration.HBASE_HSTORE_COMPACTION_MAX_KEY, NEW_COMMON_MAX_FILES_TO_COMPACT); this.store.onConfigurationChange(conf); + assertEquals(STORE_MAX_FILES_TO_COMPACT, store.getStoreEngine().getCompactionPolicy().getConf().getMaxFilesToCompact()); + + assertEquals(conf.getBoolean(CACHE_DATA_ON_READ_KEY, DEFAULT_CACHE_DATA_ON_READ), false); + assertEquals(conf.getBoolean(CACHE_BLOCKS_ON_WRITE_KEY, DEFAULT_CACHE_DATA_ON_WRITE), true); + assertEquals(conf.getBoolean(EVICT_BLOCKS_ON_CLOSE_KEY, DEFAULT_EVICT_ON_CLOSE), true); + + // reset to default values + conf.getBoolean(CACHE_DATA_ON_READ_KEY, DEFAULT_CACHE_DATA_ON_READ); + conf.getBoolean(CACHE_BLOCKS_ON_WRITE_KEY, DEFAULT_CACHE_DATA_ON_WRITE); + conf.getBoolean(EVICT_BLOCKS_ON_CLOSE_KEY, DEFAULT_EVICT_ON_CLOSE); + this.store.onConfigurationChange(conf); } /**