HBASE-22803 Modify config value range to enable turning off of the hbck chore (#466)
Signed-off-by: Guanghao Zhang <zghao@apache.org>
This commit is contained in:
parent
ea08907e08
commit
2a707ad334
|
@ -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();
|
||||
|
|
|
@ -2303,11 +2303,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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue