HBASE-23373 Log `RetriesExhaustedException` context with full time precision (#903)

Signed-off-by: Lijin Bin <binlijin@apache.org>
This commit is contained in:
Nick Dimiduk 2019-12-06 11:05:58 -08:00 committed by GitHub
parent 9c82a65b29
commit 8548463e74
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 22 additions and 9 deletions

View File

@ -19,9 +19,12 @@
package org.apache.hadoop.hbase.client;
import java.io.IOException;
import java.util.Date;
import java.time.Instant;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.StringJoiner;
import org.apache.commons.lang3.StringUtils;
import org.apache.yetus.audience.InterfaceAudience;
/**
@ -41,24 +44,34 @@ public class RetriesExhaustedException extends IOException {
}
/**
* Datastructure that allows adding more info around Throwable incident.
* Data structure that allows adding more info around Throwable incident.
*/
@InterfaceAudience.Private
public static class ThrowableWithExtraContext {
private final Throwable t;
private final long when;
private final Throwable throwable;
private final long whenAsEpochMilli;
private final String extras;
public ThrowableWithExtraContext(final Throwable t, final long when,
public ThrowableWithExtraContext(final Throwable throwable, final long whenAsEpochMilli,
final String extras) {
this.t = t;
this.when = when;
this.throwable = throwable;
this.whenAsEpochMilli = whenAsEpochMilli;
this.extras = extras;
}
@Override
public String toString() {
return new Date(this.when).toString() + ", " + extras + ", " + t.toString();
final StringJoiner joiner = new StringJoiner(", ");
if (whenAsEpochMilli != 0) {
joiner.add(DateTimeFormatter.ISO_INSTANT.format(Instant.ofEpochMilli(whenAsEpochMilli)));
}
if (StringUtils.isNotEmpty(extras)) {
joiner.add(extras);
}
if (throwable != null) {
joiner.add(throwable.toString());
}
return joiner.toString();
}
}
@ -83,7 +96,7 @@ public class RetriesExhaustedException extends IOException {
public RetriesExhaustedException(final int numRetries,
final List<ThrowableWithExtraContext> exceptions) {
super(getMessage(numRetries, exceptions),
exceptions.isEmpty()? null: exceptions.get(exceptions.size() - 1).t);
exceptions.isEmpty()? null: exceptions.get(exceptions.size() - 1).throwable);
}
private static String getMessage(String callableVitals, int numTries,