From b3bc73c88cde78377f214daf81b664bbb1dc1617 Mon Sep 17 00:00:00 2001 From: Jaspreet Grewal Date: Wed, 12 Jul 2017 09:38:44 -0700 Subject: [PATCH 1/2] DNS lookup is done on every reconnect attempt. Caching the machine address for the lifetime of the application is problematic in a dynamic enviroment like docker containers. If the machine address changes, applications need to be restarted to pick up the correct address and log correctly. --- .../java/org/fluentd/logger/sender/RawSocketSender.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/org/fluentd/logger/sender/RawSocketSender.java b/src/main/java/org/fluentd/logger/sender/RawSocketSender.java index f443e3a..7bc451e 100644 --- a/src/main/java/org/fluentd/logger/sender/RawSocketSender.java +++ b/src/main/java/org/fluentd/logger/sender/RawSocketSender.java @@ -52,6 +52,10 @@ public class RawSocketSender implements Sender { private String name; + private String host; + + private int port; + private ErrorHandler errorHandler = DEFAULT_ERROR_HANDLER; public RawSocketSender() { @@ -71,6 +75,8 @@ public RawSocketSender(String host, int port, int timeout, int bufferCapacity, R msgpack = new MessagePack(); msgpack.register(Event.class, Event.EventTemplate.INSTANCE); pendings = ByteBuffer.allocate(bufferCapacity); + this.host = host; + this.port = port; server = new InetSocketAddress(host, port); this.reconnector = reconnector; name = String.format("%s_%d_%d_%d", host, port, timeout, bufferCapacity); @@ -80,6 +86,7 @@ public RawSocketSender(String host, int port, int timeout, int bufferCapacity, R private void connect() throws IOException { try { socket = new Socket(); + server = new InetSocketAddress(host, port); socket.connect(server, timeout); out = new BufferedOutputStream(socket.getOutputStream()); } catch (IOException e) { From 80d10f547924414faf92e3255f888f86195685fc Mon Sep 17 00:00:00 2001 From: Jaspreet Grewal Date: Thu, 20 Jul 2017 09:42:23 -0700 Subject: [PATCH 2/2] Adressed pull request comments by komamitsu --- .../org/fluentd/logger/sender/RawSocketSender.java | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/src/main/java/org/fluentd/logger/sender/RawSocketSender.java b/src/main/java/org/fluentd/logger/sender/RawSocketSender.java index 7bc451e..f5e8f53 100644 --- a/src/main/java/org/fluentd/logger/sender/RawSocketSender.java +++ b/src/main/java/org/fluentd/logger/sender/RawSocketSender.java @@ -26,7 +26,6 @@ import java.io.IOException; import java.net.InetSocketAddress; import java.net.Socket; -import java.net.SocketAddress; import java.nio.ByteBuffer; import java.util.Map; @@ -38,8 +37,6 @@ public class RawSocketSender implements Sender { private MessagePack msgpack; - private SocketAddress server; - private Socket socket; private int timeout; @@ -52,9 +49,9 @@ public class RawSocketSender implements Sender { private String name; - private String host; + private final String host; - private int port; + private final int port; private ErrorHandler errorHandler = DEFAULT_ERROR_HANDLER; @@ -77,7 +74,6 @@ public RawSocketSender(String host, int port, int timeout, int bufferCapacity, R pendings = ByteBuffer.allocate(bufferCapacity); this.host = host; this.port = port; - server = new InetSocketAddress(host, port); this.reconnector = reconnector; name = String.format("%s_%d_%d_%d", host, port, timeout, bufferCapacity); this.timeout = timeout; @@ -86,8 +82,7 @@ public RawSocketSender(String host, int port, int timeout, int bufferCapacity, R private void connect() throws IOException { try { socket = new Socket(); - server = new InetSocketAddress(host, port); - socket.connect(server, timeout); + socket.connect(new InetSocketAddress(host, port), timeout); out = new BufferedOutputStream(socket.getOutputStream()); } catch (IOException e) { throw e; @@ -160,7 +155,7 @@ private boolean flushBuffer() { if (pendings.position() == 0) { return true; } else { - LOG.error("Cannot send logs to " + server.toString()); + LOG.error("Cannot send logs to " + socket.getInetAddress().toString()); } }