Skip to content

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

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

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 @@ -280,7 +280,6 @@ public class HTableDescriptor implements WritableComparable<HTableDescriptor> {
String.valueOf(DEFAULT_DEFERRED_LOG_FLUSH));
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));
for (String s : DEFAULT_VALUES.keySet()) {
RESERVED_KEYWORDS.add(new ImmutableBytesWritable(Bytes.toBytes(s)));
Expand Down Expand Up @@ -684,7 +683,7 @@ public HTableDescriptor setCompactionEnabled(final boolean isEnable) {
* @return true if region normalization is enabled for this table
*/
public boolean isNormalizationEnabled() {
return isSomething(NORMALIZATION_ENABLED_KEY, DEFAULT_NORMALIZATION_ENABLED);
return isSomething(NORMALIZATION_ENABLED_KEY, false);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -185,13 +185,13 @@ public class ZooKeeperWatcher implements Watcher, Abortable, Closeable {

/**
* Instantiate a ZooKeeper connection and watcher.
* @param identifier string that is passed to RecoverableZookeeper to be used as
* identifier for this instance. Use null for default.
* @param identifier string that is passed to RecoverableZookeeper to be used as identifier for
* this instance. Use null for default.
* @throws IOException
* @throws ZooKeeperConnectionException
*/
public ZooKeeperWatcher(Configuration conf, String identifier,
Abortable abortable) throws ZooKeeperConnectionException, IOException {
public ZooKeeperWatcher(Configuration conf, String identifier, Abortable abortable)
throws ZooKeeperConnectionException, IOException {
this(conf, identifier, abortable, 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 @@ -642,6 +642,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 @@ -205,7 +205,8 @@
@SuppressWarnings("deprecation")
public class HMaster extends HRegionServer implements MasterServices, Server {
private static final Log LOG = LogFactory.getLog(HMaster.class.getName());

public static final String HBASE_TABLE_NORMALIZATION_ENABLED =
"hbase.table.normalization.enabled";
/**
* Protection against zombie master. Started once Master accepts active responsibility and
* starts taking over responsibilities. Allows a finite time window before giving up ownership.
Expand Down Expand Up @@ -381,6 +382,7 @@ public void run() {

private long splitPlanCount;
private long mergePlanCount;
private boolean defaultNormalizerTableLevel;

/** flag used in test cases in order to simulate RS failures during master initialization */
private volatile boolean initializationBeforeMetaAssignment = false;
Expand Down Expand Up @@ -529,6 +531,7 @@ public HMaster(final Configuration conf, CoordinatedStateManager csm)
activeMasterManager = null;
}
cachedClusterId = new CachedClusterId(conf);
this.defaultNormalizerTableLevel = extractDefaultNormalizerValue(conf);
}

// return the actual infoPort, -1 means disable info server.
Expand Down Expand Up @@ -1019,7 +1022,7 @@ private void unassignExcessMetaReplica(ZooKeeperWatcher zkw, int numMetaReplicas
LOG.info("Closing excess replica of meta region " + r.getRegion());
// send a close and wait for a max of 30 seconds
ServerManager.closeRegionSilentlyAndWait(getConnection(), r.getServerName(),
r.getRegion(), 30000);
r.getRegion(), 30000);
ZKUtil.deleteNode(zkw, zkw.getZNodeForReplica(replicaId));
}
}
Expand Down Expand Up @@ -1117,6 +1120,11 @@ void assignMeta(MonitoredTask status, Set<ServerName> previouslyFailedMetaRSs, i
status.setStatus("META assigned.");
}

private boolean extractDefaultNormalizerValue(final Configuration configuration) {
String s = configuration.get(HBASE_TABLE_NORMALIZATION_ENABLED);
return Boolean.parseBoolean(s);
}

private void assignMetaZkLess(RegionStates regionStates, RegionState regionState, long timeout,
Set<ServerName> previouslyFailedRs) throws IOException, KeeperException {
ServerName currentServer = regionState.getServerName();
Expand Down Expand Up @@ -1692,12 +1700,20 @@ public boolean normalizeRegions() throws IOException, CoordinatedStateException
if (table.isSystemTable()) {
continue;
}

boolean normalizationEnabled;
HTableDescriptor tableDescriptor = getTableDescriptors().get(table);
if (tableDescriptor != null && !tableDescriptor.isNormalizationEnabled()) {
LOG.debug("Skipping normalization for table: " + table
+ ", as it doesn't have auto normalization turned on");
continue;
if (tableDescriptor != null) {
String defined = tableDescriptor.getValue(HTableDescriptor.NORMALIZATION_ENABLED);
if (defined != null) {
normalizationEnabled = tableDescriptor.isNormalizationEnabled();
} else {
normalizationEnabled = this.defaultNormalizerTableLevel;
}
if (!normalizationEnabled) {
LOG.debug("Skipping table " + table + " because normalization is disabled in its "
+ "table properties and normalization is also disabled at table level by default");
continue;
}
}
// make one last check that the cluster isn't shutting down before proceeding.
if (skipRegionManagementAction("region normalizer")) {
Expand Down