HADOOP-17874. ExceptionsHandler to add terse/suppressed Exceptions in thread-safe manner (#3343)
Signed-off-by: Akira Ajisaka <aajisaka@apache.org>
(cherry picked from commit 99a157fa4a
)
This commit is contained in:
parent
601591c021
commit
25fe54b890
|
@ -67,6 +67,7 @@ import java.util.concurrent.LinkedBlockingQueue;
|
|||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.util.concurrent.atomic.AtomicLong;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import javax.security.sasl.Sasl;
|
||||
import javax.security.sasl.SaslException;
|
||||
|
@ -180,8 +181,11 @@ public abstract class Server {
|
|||
* e.g., terse exception group for concise logging messages
|
||||
*/
|
||||
static class ExceptionsHandler {
|
||||
private volatile Set<String> terseExceptions = new HashSet<>();
|
||||
private volatile Set<String> suppressedExceptions = new HashSet<>();
|
||||
|
||||
private final Set<String> terseExceptions =
|
||||
ConcurrentHashMap.newKeySet();
|
||||
private final Set<String> suppressedExceptions =
|
||||
ConcurrentHashMap.newKeySet();
|
||||
|
||||
/**
|
||||
* Add exception classes for which server won't log stack traces.
|
||||
|
@ -189,8 +193,10 @@ public abstract class Server {
|
|||
* @param exceptionClass exception classes
|
||||
*/
|
||||
void addTerseLoggingExceptions(Class<?>... exceptionClass) {
|
||||
// Thread-safe replacement of terseExceptions.
|
||||
terseExceptions = addExceptions(terseExceptions, exceptionClass);
|
||||
terseExceptions.addAll(Arrays
|
||||
.stream(exceptionClass)
|
||||
.map(Class::toString)
|
||||
.collect(Collectors.toSet()));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -199,9 +205,10 @@ public abstract class Server {
|
|||
* @param exceptionClass exception classes
|
||||
*/
|
||||
void addSuppressedLoggingExceptions(Class<?>... exceptionClass) {
|
||||
// Thread-safe replacement of suppressedExceptions.
|
||||
suppressedExceptions = addExceptions(
|
||||
suppressedExceptions, exceptionClass);
|
||||
suppressedExceptions.addAll(Arrays
|
||||
.stream(exceptionClass)
|
||||
.map(Class::toString)
|
||||
.collect(Collectors.toSet()));
|
||||
}
|
||||
|
||||
boolean isTerseLog(Class<?> t) {
|
||||
|
@ -212,23 +219,6 @@ public abstract class Server {
|
|||
return suppressedExceptions.contains(t.toString());
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a new set containing all the exceptions in exceptionsSet
|
||||
* and exceptionClass.
|
||||
* @return
|
||||
*/
|
||||
private static Set<String> addExceptions(
|
||||
final Set<String> exceptionsSet, Class<?>[] exceptionClass) {
|
||||
// Make a copy of the exceptionSet for performing modification
|
||||
final HashSet<String> newSet = new HashSet<>(exceptionsSet);
|
||||
|
||||
// Add all class names into the HashSet
|
||||
for (Class<?> name : exceptionClass) {
|
||||
newSet.add(name.toString());
|
||||
}
|
||||
|
||||
return Collections.unmodifiableSet(newSet);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue