Brian O'Connor
Committed by Gerrit Code Review

ClusterCommunicationManager: only serialize once for broadcast

Change-Id: Ife78af3c758c87eeb8a79cdbf51b5307b8b1ca88
...@@ -103,9 +103,10 @@ public class ClusterCommunicationManager ...@@ -103,9 +103,10 @@ public class ClusterCommunicationManager
103 public boolean broadcast(ClusterMessage message) { 103 public boolean broadcast(ClusterMessage message) {
104 boolean ok = true; 104 boolean ok = true;
105 final ControllerNode localNode = clusterService.getLocalNode(); 105 final ControllerNode localNode = clusterService.getLocalNode();
106 + byte[] payload = SERIALIZER.encode(message);
106 for (ControllerNode node : clusterService.getNodes()) { 107 for (ControllerNode node : clusterService.getNodes()) {
107 if (!node.equals(localNode)) { 108 if (!node.equals(localNode)) {
108 - ok = unicastUnchecked(message, node.id()) && ok; 109 + ok = unicastUnchecked(message.subject(), payload, node.id()) && ok;
109 } 110 }
110 } 111 }
111 return ok; 112 return ok;
...@@ -114,8 +115,9 @@ public class ClusterCommunicationManager ...@@ -114,8 +115,9 @@ public class ClusterCommunicationManager
114 @Override 115 @Override
115 public boolean broadcastIncludeSelf(ClusterMessage message) { 116 public boolean broadcastIncludeSelf(ClusterMessage message) {
116 boolean ok = true; 117 boolean ok = true;
118 + byte[] payload = SERIALIZER.encode(message);
117 for (ControllerNode node : clusterService.getNodes()) { 119 for (ControllerNode node : clusterService.getNodes()) {
118 - ok = unicastUnchecked(message, node.id()) && ok; 120 + ok = unicastUnchecked(message.subject(), payload, node.id()) && ok;
119 } 121 }
120 return ok; 122 return ok;
121 } 123 }
...@@ -124,9 +126,10 @@ public class ClusterCommunicationManager ...@@ -124,9 +126,10 @@ public class ClusterCommunicationManager
124 public boolean multicast(ClusterMessage message, Set<NodeId> nodes) { 126 public boolean multicast(ClusterMessage message, Set<NodeId> nodes) {
125 boolean ok = true; 127 boolean ok = true;
126 final ControllerNode localNode = clusterService.getLocalNode(); 128 final ControllerNode localNode = clusterService.getLocalNode();
129 + byte[] payload = SERIALIZER.encode(message);
127 for (NodeId nodeId : nodes) { 130 for (NodeId nodeId : nodes) {
128 if (!nodeId.equals(localNode.id())) { 131 if (!nodeId.equals(localNode.id())) {
129 - ok = unicastUnchecked(message, nodeId) && ok; 132 + ok = unicastUnchecked(message.subject(), payload, nodeId) && ok;
130 } 133 }
131 } 134 }
132 return ok; 135 return ok;
...@@ -134,12 +137,15 @@ public class ClusterCommunicationManager ...@@ -134,12 +137,15 @@ public class ClusterCommunicationManager
134 137
135 @Override 138 @Override
136 public boolean unicast(ClusterMessage message, NodeId toNodeId) throws IOException { 139 public boolean unicast(ClusterMessage message, NodeId toNodeId) throws IOException {
140 + return unicast(message.subject(), SERIALIZER.encode(message), toNodeId);
141 + }
142 +
143 + private boolean unicast(MessageSubject subject, byte[] payload, NodeId toNodeId) throws IOException {
137 ControllerNode node = clusterService.getNode(toNodeId); 144 ControllerNode node = clusterService.getNode(toNodeId);
138 checkArgument(node != null, "Unknown nodeId: %s", toNodeId); 145 checkArgument(node != null, "Unknown nodeId: %s", toNodeId);
139 Endpoint nodeEp = new Endpoint(node.ip().toString(), node.tcpPort()); 146 Endpoint nodeEp = new Endpoint(node.ip().toString(), node.tcpPort());
140 try { 147 try {
141 - messagingService.sendAsync(nodeEp, 148 + messagingService.sendAsync(nodeEp, subject.value(), payload);
142 - message.subject().value(), SERIALIZER.encode(message));
143 return true; 149 return true;
144 } catch (IOException e) { 150 } catch (IOException e) {
145 log.trace("Failed to send cluster message to nodeId: " + toNodeId, e); 151 log.trace("Failed to send cluster message to nodeId: " + toNodeId, e);
...@@ -147,9 +153,10 @@ public class ClusterCommunicationManager ...@@ -147,9 +153,10 @@ public class ClusterCommunicationManager
147 } 153 }
148 } 154 }
149 155
150 - private boolean unicastUnchecked(ClusterMessage message, NodeId toNodeId) { 156 +
157 + private boolean unicastUnchecked(MessageSubject subject, byte[] payload, NodeId toNodeId) {
151 try { 158 try {
152 - return unicast(message, toNodeId); 159 + return unicast(subject, payload, toNodeId);
153 } catch (IOException e) { 160 } catch (IOException e) {
154 return false; 161 return false;
155 } 162 }
......