diff --git a/core/store/dist/src/main/java/org/onlab/onos/store/cluster/messaging/impl/ClusterCommunicationManager.java b/core/store/dist/src/main/java/org/onlab/onos/store/cluster/messaging/impl/ClusterCommunicationManager.java index 55d8b1a362..42d89dede2 100644 --- a/core/store/dist/src/main/java/org/onlab/onos/store/cluster/messaging/impl/ClusterCommunicationManager.java +++ b/core/store/dist/src/main/java/org/onlab/onos/store/cluster/messaging/impl/ClusterCommunicationManager.java @@ -67,7 +67,7 @@ public class ClusterCommunicationManager @Activate public void activate() { ControllerNode localNode = clusterService.getLocalNode(); - NettyMessagingService netty = new NettyMessagingService(localNode.tcpPort()); + NettyMessagingService netty = new NettyMessagingService(localNode.ip().toString(), localNode.tcpPort()); // FIXME: workaround until it becomes a service. try { netty.activate(); diff --git a/utils/netty/src/main/java/org/onlab/netty/InternalMessage.java b/utils/netty/src/main/java/org/onlab/netty/InternalMessage.java index 938ec7b6c9..04de356fe1 100644 --- a/utils/netty/src/main/java/org/onlab/netty/InternalMessage.java +++ b/utils/netty/src/main/java/org/onlab/netty/InternalMessage.java @@ -44,8 +44,7 @@ public final class InternalMessage implements Message { public void respond(byte[] data) throws IOException { Builder builder = new Builder(messagingService); InternalMessage message = builder.withId(this.id) - // FIXME: Sender should be messagingService.localEp. - .withSender(this.sender) + .withSender(messagingService.localEp()) .withPayload(data) .withType(REPLY_MESSAGE_TYPE) .build(); diff --git a/utils/netty/src/main/java/org/onlab/netty/NettyMessagingService.java b/utils/netty/src/main/java/org/onlab/netty/NettyMessagingService.java index 2f3e039a42..5ef1768749 100644 --- a/utils/netty/src/main/java/org/onlab/netty/NettyMessagingService.java +++ b/utils/netty/src/main/java/org/onlab/netty/NettyMessagingService.java @@ -42,7 +42,6 @@ public class NettyMessagingService implements MessagingService { private final Logger log = LoggerFactory.getLogger(getClass()); - private final int port; private final Endpoint localEp; private final ConcurrentMap handlers = new ConcurrentHashMap<>(); private final Cache responseFutures = CacheBuilder.newBuilder() @@ -77,6 +76,10 @@ public class NettyMessagingService implements MessagingService { clientChannelClass = NioSocketChannel.class; } + public NettyMessagingService(String ip, int port) { + localEp = new Endpoint(ip, port); + } + public NettyMessagingService() { // TODO: Default port should be configurable. this(8080); @@ -84,7 +87,6 @@ public class NettyMessagingService implements MessagingService { // FIXME: Constructor should not throw exceptions. public NettyMessagingService(int port) { - this.port = port; try { localEp = new Endpoint(java.net.InetAddress.getLocalHost().getHostName(), port); } catch (UnknownHostException e) { @@ -106,6 +108,14 @@ public class NettyMessagingService implements MessagingService { clientGroup.shutdownGracefully(); } + /** + * Returns the local endpoint for this instance. + * @return local end point. + */ + public Endpoint localEp() { + return localEp; + } + @Override public void sendAsync(Endpoint ep, String type, byte[] payload) throws IOException { InternalMessage message = new InternalMessage.Builder(this) @@ -127,7 +137,7 @@ public class NettyMessagingService implements MessagingService { channels.returnObject(ep, channel); } } catch (Exception e) { - throw new IOException(e); + throw new IOException("Failed to send message to " + ep.toString(), e); } } @@ -174,7 +184,7 @@ public class NettyMessagingService implements MessagingService { .childOption(ChannelOption.SO_KEEPALIVE, true); // Bind and start to accept incoming connections. - b.bind(port).sync(); + b.bind(localEp.port()).sync(); } private class OnosCommunicationChannelFactory