ACCUMULO-4067 Avoid repeatedly fetching the NetUtils#getInputStream method.
Project: http://git-wip-us.apache.org/repos/asf/accumulo/repo Commit: http://git-wip-us.apache.org/repos/asf/accumulo/commit/4eb80855 Tree: http://git-wip-us.apache.org/repos/asf/accumulo/tree/4eb80855 Diff: http://git-wip-us.apache.org/repos/asf/accumulo/diff/4eb80855 Branch: refs/heads/master Commit: 4eb80855f7185cc143b3d43928e57e19d5d761ef Parents: 4d952ac Author: Josh Elser <els...@apache.org> Authored: Fri Dec 4 16:19:51 2015 -0500 Committer: Josh Elser <els...@apache.org> Committed: Fri Dec 4 16:19:51 2015 -0500 ---------------------------------------------------------------------- .../accumulo/core/util/TTimeoutTransport.java | 21 ++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/accumulo/blob/4eb80855/core/src/main/java/org/apache/accumulo/core/util/TTimeoutTransport.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/accumulo/core/util/TTimeoutTransport.java b/core/src/main/java/org/apache/accumulo/core/util/TTimeoutTransport.java index 60ae292..1eac8be 100644 --- a/core/src/main/java/org/apache/accumulo/core/util/TTimeoutTransport.java +++ b/core/src/main/java/org/apache/accumulo/core/util/TTimeoutTransport.java @@ -35,10 +35,27 @@ import com.google.common.net.HostAndPort; public class TTimeoutTransport { + private static volatile Method GET_INPUT_STREAM_METHOD = null; + + private static Method getNetUtilsInputStreamMethod() { + if (null == GET_INPUT_STREAM_METHOD) { + synchronized (TTimeoutTransport.class) { + if (null == GET_INPUT_STREAM_METHOD) { + try { + GET_INPUT_STREAM_METHOD = NetUtils.class.getMethod("getInputStream", Socket.class, Long.TYPE); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + } + } + + return GET_INPUT_STREAM_METHOD; + } + private static InputStream getInputStream(Socket socket, long timeout) { try { - Method m = NetUtils.class.getMethod("getInputStream", Socket.class, Long.TYPE); - return (InputStream) m.invoke(null, socket, timeout); + return (InputStream) getNetUtilsInputStreamMethod().invoke(null, socket, timeout); } catch (Exception e) { throw new RuntimeException(e); }