Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

HBASE-25986 set default value of normalization enabled from hbase site #3372

Merged
merged 1 commit into from
Jul 19, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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
mnpoonia marked this conversation as resolved.
Show resolved Hide resolved
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -222,11 +222,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.
Expand All @@ -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);
Expand Down Expand Up @@ -865,12 +859,11 @@ public ModifyableTableDescriptor setMergeEnabled(final boolean isEnable) {
/**
* 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
mnpoonia marked this conversation as resolved.
Show resolved Hide resolved
*/
**/
@Override
public boolean isNormalizationEnabled() {
return getOrDefault(NORMALIZATION_ENABLED_KEY, Boolean::valueOf, DEFAULT_NORMALIZATION_ENABLED);
return getOrDefault(NORMALIZATION_ENABLED_KEY, Boolean::valueOf, false);
}

/**
Expand Down
7 changes: 7 additions & 0 deletions hbase-common/src/main/resources/hbase-default.xml
Original file line number Diff line number Diff line change
Expand Up @@ -660,6 +660,13 @@ possible configurations would overwhelm and obscure the important.
<description>The minimum size for a region to be considered for a merge, in whole
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>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
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;
Expand All @@ -43,6 +44,8 @@
*/
@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 =
Expand All @@ -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;

Expand All @@ -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
Expand Down Expand Up @@ -181,10 +191,20 @@ private List<NormalizationPlan> calculatePlans(final TableName tableName) {
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);
Expand Down