This is an automated email from the ASF dual-hosted git repository.
vjasani pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hbase.git
The following commit(s) were added to refs/heads/master by this push:
new 0f31317 HBASE-25986 set default value of normalization enabled from
hbase site (#3372)
0f31317 is described below
commit 0f313176beed6bf102f0104b9ff21655d500c1d9
Author: Aman Poonia <[email protected]>
AuthorDate: Mon Jul 19 15:25:36 2021 +0530
HBASE-25986 set default value of normalization enabled from hbase site
(#3372)
Signed-off-by: Viraj Jasani <[email protected]>
---
.../hadoop/hbase/client/TableDescriptor.java | 2 +-
.../hbase/client/TableDescriptorBuilder.java | 11 ++-------
hbase-common/src/main/resources/hbase-default.xml | 7 ++++++
.../master/normalizer/RegionNormalizerWorker.java | 28 ++++++++++++++++++----
4 files changed, 34 insertions(+), 14 deletions(-)
diff --git
a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/TableDescriptor.java
b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/TableDescriptor.java
index 1440c28..dd10624 100644
---
a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/TableDescriptor.java
+++
b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/TableDescriptor.java
@@ -275,7 +275,7 @@ public interface TableDescriptor {
/**
* Check if normalization enable flag of the table is true. If flag is false
- * then no region normalizer won't attempt to normalize this table.
+ * then region normalizer won't attempt to normalize this table.
*
* @return true if region normalization is enabled for this table
*/
diff --git
a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/TableDescriptorBuilder.java
b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/TableDescriptorBuilder.java
index d306fdc..b33388f 100644
---
a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/TableDescriptorBuilder.java
+++
b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/TableDescriptorBuilder.java
@@ -223,11 +223,6 @@ public class TableDescriptorBuilder {
public static final boolean DEFAULT_MERGE_ENABLED = true;
/**
- * Constant that denotes whether the table is normalized by default.
- */
- public static final boolean DEFAULT_NORMALIZATION_ENABLED = false;
-
- /**
* Constant that denotes the maximum default size of the memstore in bytes
after which
* the contents are flushed to the store files.
*/
@@ -248,7 +243,6 @@ public class TableDescriptorBuilder {
String.valueOf(DEFAULT_MEMSTORE_FLUSH_SIZE));
DEFAULT_VALUES.put(DURABILITY, DEFAULT_DURABLITY.name()); //use the enum
name
DEFAULT_VALUES.put(REGION_REPLICATION,
String.valueOf(DEFAULT_REGION_REPLICATION));
- DEFAULT_VALUES.put(NORMALIZATION_ENABLED,
String.valueOf(DEFAULT_NORMALIZATION_ENABLED));
DEFAULT_VALUES.put(PRIORITY, String.valueOf(DEFAULT_PRIORITY));
DEFAULT_VALUES.keySet().stream()
.map(s -> new
Bytes(Bytes.toBytes(s))).forEach(RESERVED_KEYWORDS::add);
@@ -865,12 +859,11 @@ public class TableDescriptorBuilder {
/**
* Check if normalization enable flag of the table is true. If flag is
false
* then no region normalizer won't attempt to normalize this table.
- *
* @return true if region normalization is enabled for this table
- */
+ **/
@Override
public boolean isNormalizationEnabled() {
- return getOrDefault(NORMALIZATION_ENABLED_KEY, Boolean::valueOf,
DEFAULT_NORMALIZATION_ENABLED);
+ return getOrDefault(NORMALIZATION_ENABLED_KEY, Boolean::valueOf, false);
}
/**
diff --git a/hbase-common/src/main/resources/hbase-default.xml
b/hbase-common/src/main/resources/hbase-default.xml
index 176d9ba..ff3f816 100644
--- a/hbase-common/src/main/resources/hbase-default.xml
+++ b/hbase-common/src/main/resources/hbase-default.xml
@@ -661,6 +661,13 @@ possible configurations would overwhelm and obscure the
important.
MBs.</description>
</property>
<property>
+ <name>hbase.table.normalization.enabled</name>
+ <value>false</value>
+ <description>This config is used to set default behaviour of normalizer at
table level.
+ To override this at table level one can set NORMALIZATION_ENABLED at
table descriptor level
+ and that property will be honored</description>
+ </property>
+ <property>
<name>hbase.server.thread.wakefrequency</name>
<value>10000</value>
<description>In master side, this config is the period used for FS related
behaviors:
diff --git
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/normalizer/RegionNormalizerWorker.java
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/normalizer/RegionNormalizerWorker.java
index 59d2f46..0c95081 100644
---
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/normalizer/RegionNormalizerWorker.java
+++
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/normalizer/RegionNormalizerWorker.java
@@ -26,6 +26,7 @@ import org.apache.hadoop.hbase.HConstants;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.RegionInfo;
import org.apache.hadoop.hbase.client.TableDescriptor;
+import org.apache.hadoop.hbase.client.TableDescriptorBuilder;
import org.apache.hadoop.hbase.conf.ConfigurationManager;
import org.apache.hadoop.hbase.conf.ConfigurationObserver;
import org.apache.hadoop.hbase.conf.PropagatingConfigurationObserver;
@@ -43,6 +44,8 @@ import
org.apache.hbase.thirdparty.org.apache.commons.collections4.CollectionUti
*/
@InterfaceAudience.Private
class RegionNormalizerWorker implements PropagatingConfigurationObserver,
Runnable {
+ public static final String HBASE_TABLE_NORMALIZATION_ENABLED =
+ "hbase.table.normalization.enabled";
private static final Logger LOG =
LoggerFactory.getLogger(RegionNormalizerWorker.class);
static final String RATE_LIMIT_BYTES_PER_SEC_KEY =
@@ -55,6 +58,7 @@ class RegionNormalizerWorker implements
PropagatingConfigurationObserver, Runnab
private final RateLimiter rateLimiter;
private final long[] skippedCount;
+ private final boolean defaultNormalizerTableLevel;
private long splitPlanCount;
private long mergePlanCount;
@@ -71,6 +75,12 @@ class RegionNormalizerWorker implements
PropagatingConfigurationObserver, Runnab
this.splitPlanCount = 0;
this.mergePlanCount = 0;
this.rateLimiter = loadRateLimiter(configuration);
+ this.defaultNormalizerTableLevel =
extractDefaultNormalizerValue(configuration);
+ }
+
+ private boolean extractDefaultNormalizerValue(final Configuration
configuration) {
+ String s = configuration.get(HBASE_TABLE_NORMALIZATION_ENABLED);
+ return Boolean.parseBoolean(s);
}
@Override
@@ -181,10 +191,20 @@ class RegionNormalizerWorker implements
PropagatingConfigurationObserver, Runnab
final TableDescriptor tblDesc;
try {
tblDesc = masterServices.getTableDescriptors().get(tableName);
- if (tblDesc != null && !tblDesc.isNormalizationEnabled()) {
- LOG.debug("Skipping table {} because normalization is disabled in its
table properties.",
- tableName);
- return Collections.emptyList();
+ boolean normalizationEnabled;
+ if (tblDesc != null) {
+ String defined =
tblDesc.getValue(TableDescriptorBuilder.NORMALIZATION_ENABLED);
+ if(defined != null) {
+ normalizationEnabled = tblDesc.isNormalizationEnabled();
+ } else {
+ normalizationEnabled = this.defaultNormalizerTableLevel;
+ }
+ if (!normalizationEnabled) {
+ LOG.debug("Skipping table {} because normalization is disabled in
its table properties " +
+ "and normalization is also disabled at table level by default",
+ tableName);
+ return Collections.emptyList();
+ }
}
} catch (IOException e) {
LOG.debug("Skipping table {} because unable to access its table
descriptor.", tableName, e);