Description
In RpcRetryingCallerImpl:
public T callWithRetries(RetryingCallable<T> callable, int callTimeout) throws IOException, RuntimeException { ... for (int tries = 0;; tries++) { try { ... return callable.call(getTimeout(callTimeout)); ... } catch (Throwable t) { ExceptionUtil.rethrowIfInterrupt(t); if (tries > startLogErrorsCnt) { LOG.info("Call exception, tries=" + tries + ", maxAttempts=" + maxAttempts + ", started=" + (EnvironmentEdgeManager.currentTime() - tracker.getStartTime()) + " ms ago, " + "cancelled=" + cancelled.get() + ", msg=" + callable.getExceptionMessageAdditionalDetail()); } ...
We log the callable.getExceptionMessageAdditionalDetail() msg. But callable.getExceptionMessageAdditionalDetail() may not provide the underlying cause..
For example, in AbstractRegionServerCallable,
public String getExceptionMessageAdditionalDetail() { return "row '" + Bytes.toString(row) + "' on table '" + tableName + "' at " + location; }
Let's add the underlying exception cause to the message as well.