HBASE-21377 Add debug log for catching the root cause
This commit is contained in:
parent
b2fcf765ae
commit
3fe8649b2c
|
@ -24,6 +24,8 @@ import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import org.apache.yetus.audience.InterfaceAudience;
|
import org.apache.yetus.audience.InterfaceAudience;
|
||||||
import org.apache.yetus.audience.InterfaceStability;
|
import org.apache.yetus.audience.InterfaceStability;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureState;
|
import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureState;
|
||||||
|
|
||||||
|
@ -42,6 +44,8 @@ import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.Procedu
|
||||||
@InterfaceStability.Evolving
|
@InterfaceStability.Evolving
|
||||||
class RootProcedureState<TEnvironment> {
|
class RootProcedureState<TEnvironment> {
|
||||||
|
|
||||||
|
private static final Logger LOG = LoggerFactory.getLogger(RootProcedureState.class);
|
||||||
|
|
||||||
private enum State {
|
private enum State {
|
||||||
RUNNING, // The Procedure is running or ready to run
|
RUNNING, // The Procedure is running or ready to run
|
||||||
FAILED, // The Procedure failed, waiting for the rollback executing
|
FAILED, // The Procedure failed, waiting for the rollback executing
|
||||||
|
@ -146,6 +150,7 @@ class RootProcedureState<TEnvironment> {
|
||||||
subprocStack = new ArrayList<>();
|
subprocStack = new ArrayList<>();
|
||||||
}
|
}
|
||||||
proc.addStackIndex(subprocStack.size());
|
proc.addStackIndex(subprocStack.size());
|
||||||
|
LOG.debug("Add procedure {} as the {}th rollback step", proc, subprocStack.size());
|
||||||
subprocStack.add(proc);
|
subprocStack.add(proc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -145,6 +145,9 @@ public final class WALProcedureTree {
|
||||||
|
|
||||||
private void collectStackId(Entry entry, Map<Integer, List<Entry>> stackId2Proc,
|
private void collectStackId(Entry entry, Map<Integer, List<Entry>> stackId2Proc,
|
||||||
MutableInt maxStackId) {
|
MutableInt maxStackId) {
|
||||||
|
if (LOG.isDebugEnabled()) {
|
||||||
|
LOG.debug("Procedure {} stack ids={}", entry, entry.proc.getStackIdList());
|
||||||
|
}
|
||||||
for (int i = 0, n = entry.proc.getStackIdCount(); i < n; i++) {
|
for (int i = 0, n = entry.proc.getStackIdCount(); i < n; i++) {
|
||||||
int stackId = entry.proc.getStackId(i);
|
int stackId = entry.proc.getStackId(i);
|
||||||
if (stackId > maxStackId.intValue()) {
|
if (stackId > maxStackId.intValue()) {
|
||||||
|
|
|
@ -275,31 +275,36 @@ public class TestMergeTableRegionsProcedure {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testMergeWithoutPONR() throws Exception {
|
public void testMergeWithoutPONR() throws Exception {
|
||||||
final TableName tableName = TableName.valueOf("testMergeWithoutPONR");
|
try {
|
||||||
final ProcedureExecutor<MasterProcedureEnv> procExec = getMasterProcedureExecutor();
|
final TableName tableName = TableName.valueOf("testMergeWithoutPONR");
|
||||||
|
final ProcedureExecutor<MasterProcedureEnv> procExec = getMasterProcedureExecutor();
|
||||||
|
|
||||||
List<RegionInfo> tableRegions = createTable(tableName);
|
List<RegionInfo> tableRegions = createTable(tableName);
|
||||||
|
|
||||||
ProcedureTestingUtility.waitNoProcedureRunning(procExec);
|
ProcedureTestingUtility.waitNoProcedureRunning(procExec);
|
||||||
ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, true);
|
ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, true);
|
||||||
|
|
||||||
RegionInfo[] regionsToMerge = new RegionInfo[2];
|
RegionInfo[] regionsToMerge = new RegionInfo[2];
|
||||||
regionsToMerge[0] = tableRegions.get(0);
|
regionsToMerge[0] = tableRegions.get(0);
|
||||||
regionsToMerge[1] = tableRegions.get(1);
|
regionsToMerge[1] = tableRegions.get(1);
|
||||||
|
|
||||||
long procId = procExec.submitProcedure(
|
long procId = procExec.submitProcedure(
|
||||||
new MergeTableRegionsProcedure(procExec.getEnvironment(), regionsToMerge, true));
|
new MergeTableRegionsProcedure(procExec.getEnvironment(), regionsToMerge, true));
|
||||||
|
|
||||||
// Execute until step 9 of split procedure
|
// Execute until step 9 of split procedure
|
||||||
// NOTE: step 9 is after step MERGE_TABLE_REGIONS_UPDATE_META
|
// NOTE: step 9 is after step MERGE_TABLE_REGIONS_UPDATE_META
|
||||||
MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId, 9, false);
|
MasterProcedureTestingUtility.testRecoveryAndDoubleExecution(procExec, procId, 9, false);
|
||||||
|
|
||||||
// Unset Toggle Kill and make ProcExec work correctly
|
// Unset Toggle Kill and make ProcExec work correctly
|
||||||
ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, false);
|
ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, false);
|
||||||
MasterProcedureTestingUtility.restartMasterProcedureExecutor(procExec);
|
MasterProcedureTestingUtility.restartMasterProcedureExecutor(procExec);
|
||||||
ProcedureTestingUtility.waitProcedure(procExec, procId);
|
ProcedureTestingUtility.waitProcedure(procExec, procId);
|
||||||
|
|
||||||
assertRegionCount(tableName, initialRegionCount - 1);
|
assertRegionCount(tableName, initialRegionCount - 1);
|
||||||
|
} catch (Throwable t) {
|
||||||
|
LOG.error("error!", t);
|
||||||
|
throw t;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<RegionInfo> createTable(final TableName tableName) throws Exception {
|
private List<RegionInfo> createTable(final TableName tableName) throws Exception {
|
||||||
|
|
Loading…
Reference in New Issue