svn merge -c 1375790 Merging from trunk to branch-2 to fix HADOOP-8711.
git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2@1469565 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
0df869e1f7
commit
3ef924019d
|
@ -1180,6 +1180,11 @@ Release 0.23.7 - UNRELEASED
|
|||
|
||||
HADOOP-9374. Add tokens from -tokenCacheFile into UGI (daryn)
|
||||
|
||||
HADOOP-8711. IPC Server supports adding exceptions for which
|
||||
the message is printed and the stack trace is not printed to avoid chatter.
|
||||
(Brandon Li via Suresh)
|
||||
|
||||
|
||||
OPTIMIZATIONS
|
||||
|
||||
HADOOP-8462. Native-code implementation of bzip2 codec. (Govind Kamat via
|
||||
|
|
|
@ -48,11 +48,13 @@ import java.util.Arrays;
|
|||
import java.util.Collections;
|
||||
import java.util.EnumSet;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Random;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.BlockingQueue;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.LinkedBlockingQueue;
|
||||
|
@ -113,6 +115,42 @@ import com.google.common.annotations.VisibleForTesting;
|
|||
public abstract class Server {
|
||||
private final boolean authorize;
|
||||
private EnumSet<AuthMethod> enabledAuthMethods;
|
||||
private ExceptionsHandler exceptionsHandler = new ExceptionsHandler();
|
||||
|
||||
public void addTerseExceptions(Class<?>... exceptionClass) {
|
||||
exceptionsHandler.addTerseExceptions(exceptionClass);
|
||||
}
|
||||
|
||||
/**
|
||||
* ExceptionsHandler manages Exception groups for special handling
|
||||
* e.g., terse exception group for concise logging messages
|
||||
*/
|
||||
static class ExceptionsHandler {
|
||||
private volatile Set<String> terseExceptions = new HashSet<String>();
|
||||
|
||||
/**
|
||||
* Add exception class so server won't log its stack trace.
|
||||
* Modifying the terseException through this method is thread safe.
|
||||
*
|
||||
* @param exceptionClass exception classes
|
||||
*/
|
||||
void addTerseExceptions(Class<?>... exceptionClass) {
|
||||
|
||||
// Make a copy of terseException for performing modification
|
||||
final HashSet<String> newSet = new HashSet<String>(terseExceptions);
|
||||
|
||||
// Add all class names into the HashSet
|
||||
for (Class<?> name : exceptionClass) {
|
||||
newSet.add(name.toString());
|
||||
}
|
||||
// Replace terseException set
|
||||
terseExceptions = Collections.unmodifiableSet(newSet);
|
||||
}
|
||||
|
||||
boolean isTerse(Class<?> t) {
|
||||
return terseExceptions.contains(t.toString());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The first four bytes of Hadoop RPC connections
|
||||
|
@ -1756,8 +1794,8 @@ public abstract class Server {
|
|||
// on the server side, as opposed to just a normal exceptional
|
||||
// result.
|
||||
LOG.warn(logMsg, e);
|
||||
} else if (e instanceof StandbyException) {
|
||||
// Don't log the whole stack trace of these exceptions.
|
||||
} else if (exceptionsHandler.isTerse(e.getClass())) {
|
||||
// Don't log the whole stack trace of these exceptions.
|
||||
// Way too noisy!
|
||||
LOG.info(logMsg);
|
||||
} else {
|
||||
|
@ -1898,6 +1936,8 @@ public abstract class Server {
|
|||
if (secretManager != null) {
|
||||
SaslRpcServer.init(conf);
|
||||
}
|
||||
|
||||
this.exceptionsHandler.addTerseExceptions(StandbyException.class);
|
||||
}
|
||||
|
||||
// get the security type from the conf. implicitly include token support
|
||||
|
|
|
@ -20,6 +20,7 @@ package org.apache.hadoop.ipc;
|
|||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.BindException;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.ServerSocket;
|
||||
|
@ -115,4 +116,16 @@ public class TestServer {
|
|||
socket.close();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testExceptionsHandler() throws IOException {
|
||||
Server.ExceptionsHandler handler = new Server.ExceptionsHandler();
|
||||
handler.addTerseExceptions(IOException.class);
|
||||
handler.addTerseExceptions(RpcServerException.class, IpcException.class);
|
||||
|
||||
assertTrue(handler.isTerse(IOException.class));
|
||||
assertTrue(handler.isTerse(RpcServerException.class));
|
||||
assertTrue(handler.isTerse(IpcException.class));
|
||||
assertFalse(handler.isTerse(RpcClientException.class));
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue