Skip to content

Commit 93a5b7c

Browse files
author
Kelven Yang
committed
Bug 14301: Perform socket-level only management server pings
Reviewed-By: kelven
1 parent 0194ca1 commit 93a5b7c

1 file changed

Lines changed: 32 additions & 17 deletions

File tree

server/src/com/cloud/cluster/ClusterManagerImpl.java

Lines changed: 32 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@
1616
import java.io.FileInputStream;
1717
import java.io.FileNotFoundException;
1818
import java.io.IOException;
19+
import java.net.ConnectException;
20+
import java.net.InetSocketAddress;
21+
import java.nio.channels.SocketChannel;
1922
import java.rmi.RemoteException;
2023
import java.sql.Connection;
2124
import java.sql.SQLException;
@@ -1366,28 +1369,40 @@ private boolean pingManagementNode(ManagementServerHostVO mshost) {
13661369
s_logger.info("ping management node cluster service can not be performed on self");
13671370
return false;
13681371
}
1369-
1370-
String targetPeer = String.valueOf(mshost.getMsid());
1371-
ClusterService peerService = null;
1372-
for(int i = 0; i < 2; i++) {
1372+
1373+
int retry = 10;
1374+
while (--retry > 0) {
1375+
SocketChannel sch = null;
13731376
try {
1374-
peerService = getPeerService(targetPeer);
1375-
} catch (RemoteException e) {
1376-
s_logger.error("cluster service for peer " + targetPeer + " no longer exists");
1377-
}
1377+
s_logger.info("Trying to connect to " + targetIp);
1378+
sch = SocketChannel.open();
1379+
sch.configureBlocking(true);
1380+
sch.socket().setSoTimeout(5000);
13781381

1379-
if(peerService != null) {
1380-
try {
1381-
return peerService.ping(getSelfPeerName());
1382-
} catch (RemoteException e) {
1383-
s_logger.warn("Exception in performing remote call, ", e);
1384-
invalidatePeerService(targetPeer);
1382+
InetSocketAddress addr = new InetSocketAddress(targetIp, mshost.getServicePort());
1383+
sch.connect(addr);
1384+
return true;
1385+
} catch (IOException e) {
1386+
if (e instanceof ConnectException) {
1387+
s_logger.error("Unable to ping management server at " + targetIp + ":" + mshost.getServicePort() + " due to ConnectException", e);
1388+
return false;
1389+
}
1390+
} finally {
1391+
if (sch != null) {
1392+
try {
1393+
sch.close();
1394+
} catch (IOException e) {
1395+
}
13851396
}
1386-
} else {
1387-
s_logger.warn("Remote peer " + mshost.getMsid() + " no longer exists");
13881397
}
1389-
}
13901398

1399+
try {
1400+
Thread.sleep(1000);
1401+
} catch (InterruptedException ex) {
1402+
}
1403+
}
1404+
1405+
s_logger.error("Unable to ping management server at " + targetIp + ":" + mshost.getServicePort() + " after retries");
13911406
return false;
13921407
}
13931408

0 commit comments

Comments
 (0)