HBASE-13675 ProcedureExecutor completion report should be at DEBUG log level
This commit is contained in:
parent
bc189d0497
commit
901714d75d
|
@ -148,7 +148,9 @@ public class ProcedureExecutor<TEnvironment> {
|
||||||
|
|
||||||
public void periodicExecute(final TEnvironment env) {
|
public void periodicExecute(final TEnvironment env) {
|
||||||
if (completed.isEmpty()) {
|
if (completed.isEmpty()) {
|
||||||
LOG.debug("no completed procedures to cleanup");
|
if (LOG.isDebugEnabled()) {
|
||||||
|
LOG.debug("No completed procedures to cleanup.");
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -164,7 +166,9 @@ public class ProcedureExecutor<TEnvironment> {
|
||||||
// TODO: Select TTL based on Procedure type
|
// TODO: Select TTL based on Procedure type
|
||||||
if ((result.hasClientAckTime() && (now - result.getClientAckTime()) >= evictAckTtl) ||
|
if ((result.hasClientAckTime() && (now - result.getClientAckTime()) >= evictAckTtl) ||
|
||||||
(now - result.getLastUpdate()) >= evictTtl) {
|
(now - result.getLastUpdate()) >= evictTtl) {
|
||||||
|
if (LOG.isDebugEnabled()) {
|
||||||
LOG.debug("Evict completed procedure " + entry.getKey());
|
LOG.debug("Evict completed procedure " + entry.getKey());
|
||||||
|
}
|
||||||
store.delete(entry.getKey());
|
store.delete(entry.getKey());
|
||||||
it.remove();
|
it.remove();
|
||||||
}
|
}
|
||||||
|
@ -281,8 +285,10 @@ public class ProcedureExecutor<TEnvironment> {
|
||||||
proc.beforeReplay(getEnvironment());
|
proc.beforeReplay(getEnvironment());
|
||||||
procedures.put(proc.getProcId(), proc);
|
procedures.put(proc.getProcId(), proc);
|
||||||
logMaxProcId = Math.max(logMaxProcId, proc.getProcId());
|
logMaxProcId = Math.max(logMaxProcId, proc.getProcId());
|
||||||
|
if (LOG.isDebugEnabled()) {
|
||||||
LOG.debug("Loading procedure state=" + proc.getState() +
|
LOG.debug("Loading procedure state=" + proc.getState() +
|
||||||
" isFailed=" + proc.hasException() + ": " + proc);
|
" isFailed=" + proc.hasException() + ": " + proc);
|
||||||
|
}
|
||||||
if (!proc.hasParent() && !proc.isFinished()) {
|
if (!proc.hasParent() && !proc.isFinished()) {
|
||||||
rollbackStack.put(proc.getProcId(), new RootProcedureState());
|
rollbackStack.put(proc.getProcId(), new RootProcedureState());
|
||||||
}
|
}
|
||||||
|
@ -305,8 +311,10 @@ public class ProcedureExecutor<TEnvironment> {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!proc.hasParent() && proc.isFinished()) {
|
if (!proc.hasParent() && proc.isFinished()) {
|
||||||
|
if (LOG.isDebugEnabled()) {
|
||||||
LOG.debug("The procedure is completed state=" + proc.getState() +
|
LOG.debug("The procedure is completed state=" + proc.getState() +
|
||||||
" isFailed=" + proc.hasException() + ": " + proc);
|
" isFailed=" + proc.hasException() + ": " + proc);
|
||||||
|
}
|
||||||
assert !rollbackStack.containsKey(proc.getProcId());
|
assert !rollbackStack.containsKey(proc.getProcId());
|
||||||
completed.put(proc.getProcId(), newResultFromProcedure(proc));
|
completed.put(proc.getProcId(), newResultFromProcedure(proc));
|
||||||
continue;
|
continue;
|
||||||
|
@ -514,7 +522,9 @@ public class ProcedureExecutor<TEnvironment> {
|
||||||
|
|
||||||
// Commit the transaction
|
// Commit the transaction
|
||||||
store.insert(proc, null);
|
store.insert(proc, null);
|
||||||
LOG.debug("procedure " + proc + " added to the store");
|
if (LOG.isDebugEnabled()) {
|
||||||
|
LOG.debug("Procedure " + proc + " added to the store.");
|
||||||
|
}
|
||||||
|
|
||||||
// Create the rollback stack for the procedure
|
// Create the rollback stack for the procedure
|
||||||
RootProcedureState stack = new RootProcedureState();
|
RootProcedureState stack = new RootProcedureState();
|
||||||
|
@ -564,7 +574,9 @@ public class ProcedureExecutor<TEnvironment> {
|
||||||
ProcedureResult result = completed.get(procId);
|
ProcedureResult result = completed.get(procId);
|
||||||
if (result == null) {
|
if (result == null) {
|
||||||
assert !procedures.containsKey(procId) : "procId=" + procId + " is still running";
|
assert !procedures.containsKey(procId) : "procId=" + procId + " is still running";
|
||||||
LOG.debug("Procedure procId=" + procId + " already removed by the cleaner");
|
if (LOG.isDebugEnabled()) {
|
||||||
|
LOG.debug("Procedure procId=" + procId + " already removed by the cleaner.");
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -620,7 +632,7 @@ public class ProcedureExecutor<TEnvironment> {
|
||||||
|
|
||||||
private void execLoop(Procedure proc) {
|
private void execLoop(Procedure proc) {
|
||||||
if (LOG.isTraceEnabled()) {
|
if (LOG.isTraceEnabled()) {
|
||||||
LOG.trace("trying to start the execution of " + proc);
|
LOG.trace("Trying to start the execution of " + proc);
|
||||||
}
|
}
|
||||||
|
|
||||||
Long rootProcId = getRootProcedureId(proc);
|
Long rootProcId = getRootProcedureId(proc);
|
||||||
|
@ -673,8 +685,10 @@ public class ProcedureExecutor<TEnvironment> {
|
||||||
|
|
||||||
if (proc.getProcId() == rootProcId && proc.isSuccess()) {
|
if (proc.getProcId() == rootProcId && proc.isSuccess()) {
|
||||||
// Finalize the procedure state
|
// Finalize the procedure state
|
||||||
LOG.info("Procedure completed in " +
|
if (LOG.isDebugEnabled()) {
|
||||||
|
LOG.debug("Procedure completed in " +
|
||||||
StringUtils.humanTimeDiff(proc.elapsedTime()) + ": " + proc);
|
StringUtils.humanTimeDiff(proc.elapsedTime()) + ": " + proc);
|
||||||
|
}
|
||||||
procedureFinished(proc);
|
procedureFinished(proc);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -708,7 +722,7 @@ public class ProcedureExecutor<TEnvironment> {
|
||||||
try {
|
try {
|
||||||
((CompletedProcedureCleaner)proc).periodicExecute(getEnvironment());
|
((CompletedProcedureCleaner)proc).periodicExecute(getEnvironment());
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
LOG.error("ignoring CompletedProcedureCleaner exception: " + e.getMessage(), e);
|
LOG.error("Ignoring CompletedProcedureCleaner exception: " + e.getMessage(), e);
|
||||||
}
|
}
|
||||||
proc.setStartTime(EnvironmentEdgeManager.currentTime());
|
proc.setStartTime(EnvironmentEdgeManager.currentTime());
|
||||||
waitingTimeout.add(proc);
|
waitingTimeout.add(proc);
|
||||||
|
@ -743,7 +757,7 @@ public class ProcedureExecutor<TEnvironment> {
|
||||||
}
|
}
|
||||||
|
|
||||||
List<Procedure> subprocStack = procStack.getSubprocedures();
|
List<Procedure> subprocStack = procStack.getSubprocedures();
|
||||||
assert subprocStack != null : "called rollback with no steps executed rootProc=" + rootProc;
|
assert subprocStack != null : "Called rollback with no steps executed rootProc=" + rootProc;
|
||||||
|
|
||||||
int stackTail = subprocStack.size();
|
int stackTail = subprocStack.size();
|
||||||
boolean reuseLock = false;
|
boolean reuseLock = false;
|
||||||
|
@ -793,17 +807,21 @@ public class ProcedureExecutor<TEnvironment> {
|
||||||
try {
|
try {
|
||||||
proc.doRollback(getEnvironment());
|
proc.doRollback(getEnvironment());
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
|
if (LOG.isDebugEnabled()) {
|
||||||
LOG.debug("rollback attempt failed for " + proc, e);
|
LOG.debug("rollback attempt failed for " + proc, e);
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
// Catch NullPointerExceptions or similar errors...
|
// Catch NullPointerExceptions or similar errors...
|
||||||
LOG.fatal("CODE-BUG: uncatched runtime exception for procedure: " + proc, e);
|
LOG.fatal("CODE-BUG: Uncatched runtime exception for procedure: " + proc, e);
|
||||||
}
|
}
|
||||||
|
|
||||||
// allows to kill the executor before something is stored to the wal.
|
// allows to kill the executor before something is stored to the wal.
|
||||||
// useful to test the procedure recovery.
|
// useful to test the procedure recovery.
|
||||||
if (testing != null && testing.shouldKillBeforeStoreUpdate()) {
|
if (testing != null && testing.shouldKillBeforeStoreUpdate()) {
|
||||||
|
if (LOG.isDebugEnabled()) {
|
||||||
LOG.debug("TESTING: Kill before store update");
|
LOG.debug("TESTING: Kill before store update");
|
||||||
|
}
|
||||||
stop();
|
stop();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -854,13 +872,13 @@ public class ProcedureExecutor<TEnvironment> {
|
||||||
}
|
}
|
||||||
} catch (ProcedureYieldException e) {
|
} catch (ProcedureYieldException e) {
|
||||||
if (LOG.isTraceEnabled()) {
|
if (LOG.isTraceEnabled()) {
|
||||||
LOG.trace("yield procedure: " + procedure);
|
LOG.trace("Yield procedure: " + procedure);
|
||||||
}
|
}
|
||||||
runnables.yield(procedure);
|
runnables.yield(procedure);
|
||||||
return;
|
return;
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
// Catch NullPointerExceptions or similar errors...
|
// Catch NullPointerExceptions or similar errors...
|
||||||
String msg = "CODE-BUG: uncatched runtime exception for procedure: " + procedure;
|
String msg = "CODE-BUG: Uncatched runtime exception for procedure: " + procedure;
|
||||||
LOG.error(msg, e);
|
LOG.error(msg, e);
|
||||||
procedure.setFailure(new RemoteProcedureException(msg, e));
|
procedure.setFailure(new RemoteProcedureException(msg, e));
|
||||||
}
|
}
|
||||||
|
@ -916,7 +934,9 @@ public class ProcedureExecutor<TEnvironment> {
|
||||||
// allows to kill the executor before something is stored to the wal.
|
// allows to kill the executor before something is stored to the wal.
|
||||||
// useful to test the procedure recovery.
|
// useful to test the procedure recovery.
|
||||||
if (testing != null && testing.shouldKillBeforeStoreUpdate()) {
|
if (testing != null && testing.shouldKillBeforeStoreUpdate()) {
|
||||||
|
if (LOG.isDebugEnabled()) {
|
||||||
LOG.debug("TESTING: Kill before store update");
|
LOG.debug("TESTING: Kill before store update");
|
||||||
|
}
|
||||||
stop();
|
stop();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -924,12 +944,12 @@ public class ProcedureExecutor<TEnvironment> {
|
||||||
// Commit the transaction
|
// Commit the transaction
|
||||||
if (subprocs != null && !procedure.isFailed()) {
|
if (subprocs != null && !procedure.isFailed()) {
|
||||||
if (LOG.isTraceEnabled()) {
|
if (LOG.isTraceEnabled()) {
|
||||||
LOG.trace("store add " + procedure + " children " + Arrays.toString(subprocs));
|
LOG.trace("Store add " + procedure + " children " + Arrays.toString(subprocs));
|
||||||
}
|
}
|
||||||
store.insert(procedure, subprocs);
|
store.insert(procedure, subprocs);
|
||||||
} else {
|
} else {
|
||||||
if (LOG.isTraceEnabled()) {
|
if (LOG.isTraceEnabled()) {
|
||||||
LOG.trace("store update " + procedure);
|
LOG.trace("Store update " + procedure);
|
||||||
}
|
}
|
||||||
store.update(procedure);
|
store.update(procedure);
|
||||||
}
|
}
|
||||||
|
@ -981,7 +1001,7 @@ public class ProcedureExecutor<TEnvironment> {
|
||||||
try {
|
try {
|
||||||
listener.procedureLoaded(procId);
|
listener.procedureLoaded(procId);
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
LOG.error("the listener " + listener + " had an error: " + e.getMessage(), e);
|
LOG.error("The listener " + listener + " had an error: " + e.getMessage(), e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -993,7 +1013,7 @@ public class ProcedureExecutor<TEnvironment> {
|
||||||
try {
|
try {
|
||||||
listener.procedureAdded(procId);
|
listener.procedureAdded(procId);
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
LOG.error("the listener " + listener + " had an error: " + e.getMessage(), e);
|
LOG.error("The listener " + listener + " had an error: " + e.getMessage(), e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1005,7 +1025,7 @@ public class ProcedureExecutor<TEnvironment> {
|
||||||
try {
|
try {
|
||||||
listener.procedureFinished(procId);
|
listener.procedureFinished(procId);
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
LOG.error("the listener " + listener + " had an error: " + e.getMessage(), e);
|
LOG.error("The listener " + listener + " had an error: " + e.getMessage(), e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue