You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ps...@apache.org on 2024/04/25 10:42:58 UTC
(hbase) branch branch-2 updated: HBASE-28517 Make properties dynamically configured (#5823)
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 <99...@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 <zh...@apache.org>
Signed-off-by: Peter Somogyi <ps...@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);
}
/**