HAMA-969: Infinite loop defect in HamaMessageManagerImpl (JongYoon Lim via edwardyoon)
git-svn-id: https://svn.apache.org/repos/asf/hama/trunk@1694390 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/core/src/main/java/org/apache/hama/bsp/message/HamaMessageManagerImpl.java b/core/src/main/java/org/apache/hama/bsp/message/HamaMessageManagerImpl.java
index 8e1d84c..6a82c7d 100644
--- a/core/src/main/java/org/apache/hama/bsp/message/HamaMessageManagerImpl.java
+++ b/core/src/main/java/org/apache/hama/bsp/message/HamaMessageManagerImpl.java
@@ -51,8 +51,12 @@
private static final Log LOG = LogFactory
.getLog(HamaMessageManagerImpl.class);
+ private static final int MAX_RETRY = 5;
+
private Server server;
+ private static int retry = 0;
+
private LRUCache<InetSocketAddress, HamaMessageManager<M>> peersLRUCache = null;
@SuppressWarnings("serial")
@@ -60,6 +64,7 @@
public final void init(TaskAttemptID attemptId, BSPPeer<?, ?, ?, ?, M> peer,
HamaConfiguration conf, InetSocketAddress peerAddress) {
super.init(attemptId, peer, conf, peerAddress);
+ retry = 0;
startRPCServer(conf, peerAddress);
peersLRUCache = new LRUCache<InetSocketAddress, HamaMessageManager<M>>(
maxCachedConnections) {
@@ -87,7 +92,6 @@
}
private void startServer(String hostName, int port) throws IOException {
- int retry = 0;
try {
this.server = RPC.getServer(this, hostName, port,
conf.getInt("hama.default.messenger.handler.threads.num", 5), false,
@@ -97,13 +101,13 @@
LOG.info("BSPPeer address:" + server.getListenerAddress().getHostName()
+ " port:" + server.getListenerAddress().getPort());
} catch (BindException e) {
- LOG.warn("Address already in use. Retrying " + hostName + ":" + port + 1);
- startServer(hostName, port + 1);
- retry++;
-
- if (retry > 5) {
+ final int nextPort = port + 1;
+ LOG.warn("Address already in use. Retrying " + hostName + ":"
+ + nextPort);
+ if (retry++ >= MAX_RETRY) {
throw new RuntimeException("RPC Server could not be launched!");
}
+ startServer(hostName, nextPort);
}
}