You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by sa...@apache.org on 2019/08/09 00:33:49 UTC
[hbase] branch master updated: HBASE-22803 Modify config value
range to enable turning off of the hbck chore (#466)
This is an automated email from the ASF dual-hosted git repository.
sakthi 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 eb92b25 HBASE-22803 Modify config value range to enable turning off of the hbck chore (#466)
eb92b25 is described below
commit eb92b2565254a2783b8a6bfbb043cf7d01ab7ad3
Author: Sakthi <sa...@apache.org>
AuthorDate: Thu Aug 8 17:33:42 2019 -0700
HBASE-22803 Modify config value range to enable turning off of the hbck chore (#466)
Signed-off-by: Guanghao Zhang <zg...@apache.org>
---
.../org/apache/hadoop/hbase/master/HbckChore.java | 35 ++++++++++++++++++++++
.../hadoop/hbase/master/MasterRpcServices.java | 6 +---
.../main/resources/hbase-webapps/master/hbck.jsp | 4 +++
.../hbase/master/assignment/TestHbckChore.java | 18 +++++++++++
4 files changed, 58 insertions(+), 5 deletions(-)
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HbckChore.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HbckChore.java
index e2c4008..64da15d 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HbckChore.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HbckChore.java
@@ -99,14 +99,26 @@ public class HbckChore extends ScheduledChore {
private volatile long checkingStartTimestamp = 0;
private volatile long checkingEndTimestamp = 0;
+ private boolean disabled = false;
+
public HbckChore(MasterServices master) {
super("HbckChore-", master,
master.getConfiguration().getInt(HBCK_CHORE_INTERVAL, DEFAULT_HBCK_CHORE_INTERVAL));
this.master = master;
+ int interval =
+ master.getConfiguration().getInt(HBCK_CHORE_INTERVAL, DEFAULT_HBCK_CHORE_INTERVAL);
+ if (interval <= 0) {
+ LOG.warn(HBCK_CHORE_INTERVAL + " is <=0 hence disabling hbck chore");
+ disableChore();
+ }
}
@Override
protected synchronized void chore() {
+ if (isDisabled() || isRunning()) {
+ LOG.warn("hbckChore is either disabled or is already running. Can't run the chore");
+ return;
+ }
running = true;
regionInfoMap.clear();
orphanRegionsOnRS.clear();
@@ -124,6 +136,29 @@ public class HbckChore extends ScheduledChore {
running = false;
}
+ // This function does the sanity checks of making sure the chore is not run when it is
+ // disabled or when it's already running. It returns whether the chore was actually run or not.
+ protected boolean runChore() {
+ if (isDisabled() || isRunning()) {
+ if (isDisabled()) {
+ LOG.warn("hbck chore is disabled! Set " + HBCK_CHORE_INTERVAL + " > 0 to enable it.");
+ } else {
+ LOG.warn("hbck chore already running. Can't run till it finishes.");
+ }
+ return false;
+ }
+ chore();
+ return true;
+ }
+
+ private void disableChore() {
+ this.disabled = true;
+ }
+
+ public boolean isDisabled() {
+ return this.disabled;
+ }
+
private void saveCheckResultToSnapshot() {
// Need synchronized here, as this "snapshot" may be access by web ui.
rwLock.writeLock().lock();
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java
index e55a39d..c8caea7 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java
@@ -2376,11 +2376,7 @@ public class MasterRpcServices extends RSRpcServices
rpcPreCheck("runHbckChore");
LOG.info("{} request HBCK chore to run", master.getClientIdAuditPrefix());
HbckChore hbckChore = master.getHbckChore();
- boolean ran = false;
- if (!hbckChore.isRunning()) {
- hbckChore.chore();
- ran = true;
- }
+ boolean ran = hbckChore.runChore();
return RunHbckChoreResponse.newBuilder().setRan(ran).build();
}
diff --git a/hbase-server/src/main/resources/hbase-webapps/master/hbck.jsp b/hbase-server/src/main/resources/hbase-webapps/master/hbck.jsp
index 183740b..1da84ac 100644
--- a/hbase-server/src/main/resources/hbase-webapps/master/hbck.jsp
+++ b/hbase-server/src/main/resources/hbase-webapps/master/hbck.jsp
@@ -80,7 +80,11 @@
<div class="page-header">
<h1>HBCK Chore Report</h1>
<p>
+ <% if (hbckChore.isDisabled()) { %>
+ <span>HBCK chore is currently disabled. Set hbase.master.hbck.chore.interval > 0 in the config & do a rolling-restart to enable it.</span>
+ <% } else { %>
<span>Checking started at <%= iso8601start %> and generated report at <%= iso8601end %>. Execute 'hbck_chore_run' in hbase shell to generate a new sub-report.</span>
+ <% } %>
</p>
</div>
</div>
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/assignment/TestHbckChore.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/assignment/TestHbckChore.java
index 756e60a..19bd7a5 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/assignment/TestHbckChore.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/assignment/TestHbckChore.java
@@ -198,4 +198,22 @@ public class TestHbckChore extends TestAssignmentManagerBase {
hbckChore.choreForTesting();
assertEquals(0, hbckChore.getOrphanRegionsOnFS().size());
}
+
+ @Test
+ public void testChoreDisable() {
+ // The way to disable to chore is to set hbase.master.hbck.chore.interval <= 0
+ // When the interval is > 0, the chore should run.
+ long lastRunTime = hbckChore.getCheckingEndTimestamp();
+ hbckChore.choreForTesting();
+ boolean ran = lastRunTime != hbckChore.getCheckingEndTimestamp();
+ assertTrue(ran);
+
+ // When the interval <= 0, the chore shouldn't run
+ master.getConfiguration().setInt("hbase.master.hbck.chore.interval", 0);
+ HbckChore hbckChoreWithChangedConf = new HbckChore(master);
+ lastRunTime = hbckChoreWithChangedConf.getCheckingEndTimestamp();
+ hbckChoreWithChangedConf.choreForTesting();
+ ran = lastRunTime != hbckChoreWithChangedConf.getCheckingEndTimestamp();
+ assertFalse(ran);
+ }
}
\ No newline at end of file