Send CheckRouter command only when router is running

This commit is contained in:
Sheng Yang 2011-08-03 16:57:12 -07:00
parent 34a0c44f4f
commit fc57860390
1 changed files with 32 additions and 22 deletions

View File

@ -749,36 +749,46 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian
}
private void updateRoutersRedundantState(List<DomainRouterVO> routers) {
boolean updated = false;
for (DomainRouterVO router : routers) {
updated = false;
if (!router.getIsRedundantRouter()) {
continue;
}
String privateIP = router.getPrivateIpAddress();
HostVO host = _hostDao.findById(router.getHostId());
/* Only cover hosts managed by this management server */
if (host.getManagementServerId() != ManagementServerNode.getManagementServerId()) {
continue;
}
if (privateIP != null) {
final CheckRouterCommand command = new CheckRouterCommand();
command.setAccessDetail(NetworkElementCommand.ROUTER_IP, router.getPrivateIpAddress());
command.setAccessDetail(NetworkElementCommand.ROUTER_NAME, router.getInstanceName());
final CheckRouterAnswer answer = (CheckRouterAnswer) _agentMgr.easySend(router.getHostId(), command);
RedundantState state = RedundantState.UNKNOWN;
if (answer != null && answer.getResult()) {
if (answer.getIsMaster()) {
state = RedundantState.MASTER;
} else {
if (answer.getDetails() != null) {
if (answer.getDetails().equals("Status: BACKUP")) {
state = RedundantState.BACKUP;
} else if (answer.getDetails().startsWith("Status: FAULT")) {
state = RedundantState.FAULT;
if (router.getState() != State.Running) {
router.setRedundantState(RedundantState.UNKNOWN);
updated = true;
} else {
String privateIP = router.getPrivateIpAddress();
HostVO host = _hostDao.findById(router.getHostId());
/* Only cover hosts managed by this management server */
if (host.getManagementServerId() != ManagementServerNode.getManagementServerId()) {
continue;
}
if (privateIP != null) {
final CheckRouterCommand command = new CheckRouterCommand();
command.setAccessDetail(NetworkElementCommand.ROUTER_IP, router.getPrivateIpAddress());
command.setAccessDetail(NetworkElementCommand.ROUTER_NAME, router.getInstanceName());
final CheckRouterAnswer answer = (CheckRouterAnswer) _agentMgr.easySend(router.getHostId(), command);
RedundantState state = RedundantState.UNKNOWN;
if (answer != null && answer.getResult()) {
if (answer.getIsMaster()) {
state = RedundantState.MASTER;
} else {
if (answer.getDetails() != null) {
if (answer.getDetails().equals("Status: BACKUP")) {
state = RedundantState.BACKUP;
} else if (answer.getDetails().startsWith("Status: FAULT")) {
state = RedundantState.FAULT;
}
}
}
}
router.setRedundantState(state);
updated = true;
}
router.setRedundantState(state);
}
if (updated) {
Transaction txn = Transaction.open(Transaction.CLOUD_DB);
try {
txn.start();