mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
CLOUDSTACK-7872: network getting shutdown inspite of running VM's in the network
This commit is contained in:
parent
36fd780482
commit
0bd34d389f
@ -244,7 +244,6 @@ public class NetworkDaoImpl extends GenericDaoBase<NetworkVO, Long> implements N
|
||||
GarbageCollectedSearch = createSearchBuilder(Long.class);
|
||||
GarbageCollectedSearch.selectFields(GarbageCollectedSearch.entity().getId());
|
||||
SearchBuilder<NetworkOpVO> join7 = _ntwkOpDao.createSearchBuilder();
|
||||
join7.and("activenics", join7.entity().getActiveNicsCount(), Op.EQ);
|
||||
join7.and("gc", join7.entity().isGarbageCollected(), Op.EQ);
|
||||
join7.and("check", join7.entity().isCheckForGc(), Op.EQ);
|
||||
GarbageCollectedSearch.join("ntwkOpGC", join7, GarbageCollectedSearch.entity().getId(), join7.entity().getId(), JoinBuilder.JoinType.INNER);
|
||||
@ -438,7 +437,6 @@ public class NetworkDaoImpl extends GenericDaoBase<NetworkVO, Long> implements N
|
||||
public List<Long> findNetworksToGarbageCollect() {
|
||||
SearchCriteria<Long> sc = GarbageCollectedSearch.create();
|
||||
sc.setJoinParameters("ntwkOffGC", "isPersistent", false);
|
||||
sc.setJoinParameters("ntwkOpGC", "activenics", 0);
|
||||
sc.setJoinParameters("ntwkOpGC", "gc", true);
|
||||
sc.setJoinParameters("ntwkOpGC", "check", true);
|
||||
return customSearch(sc, null);
|
||||
|
||||
@ -74,4 +74,6 @@ public interface NicDao extends GenericDao<NicVO, Long> {
|
||||
List<NicVO> listByNetworkIdTypeAndGatewayAndBroadcastUri(long networkId, VirtualMachine.Type vmType, String gateway, URI broadcastUri);
|
||||
|
||||
int countNicsForStartingVms(long networkId);
|
||||
|
||||
int countNicsForRunningVms(long networkId);
|
||||
}
|
||||
|
||||
@ -46,6 +46,7 @@ public class NicDaoImpl extends GenericDaoBase<NicVO, Long> implements NicDao {
|
||||
private SearchBuilder<NicVO> NonReleasedSearch;
|
||||
private GenericSearchBuilder<NicVO, Integer> CountBy;
|
||||
private GenericSearchBuilder<NicVO, Integer> CountByForStartingVms;
|
||||
private GenericSearchBuilder<NicVO, Integer> CountByForRunningVms;
|
||||
|
||||
@Inject
|
||||
VMInstanceDao _vmDao;
|
||||
@ -95,6 +96,17 @@ public class NicDaoImpl extends GenericDaoBase<NicVO, Long> implements NicDao {
|
||||
join1.and("state", join1.entity().getState(), Op.EQ);
|
||||
CountByForStartingVms.join("vm", join1, CountByForStartingVms.entity().getInstanceId(), join1.entity().getId(), JoinBuilder.JoinType.INNER);
|
||||
CountByForStartingVms.done();
|
||||
|
||||
CountByForRunningVms = createSearchBuilder(Integer.class);
|
||||
CountByForRunningVms.select(null, Func.COUNT, CountByForRunningVms.entity().getId());
|
||||
CountByForRunningVms.and("networkId", CountByForRunningVms.entity().getNetworkId(), Op.EQ);
|
||||
CountByForRunningVms.and("removed", CountByForRunningVms.entity().getRemoved(), Op.NULL);
|
||||
SearchBuilder<VMInstanceVO> join2 = _vmDao.createSearchBuilder();
|
||||
join2.and("state", join2.entity().getState(), Op.EQ);
|
||||
join2.and("type", join2.entity().getType(), Op.EQ);
|
||||
CountByForRunningVms.join("vm", join2, CountByForRunningVms.entity().getInstanceId(), join2.entity().getId(), JoinBuilder.JoinType.INNER);
|
||||
CountByForRunningVms.done();
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -291,4 +303,14 @@ public class NicDaoImpl extends GenericDaoBase<NicVO, Long> implements NicDao {
|
||||
List<Integer> results = customSearch(sc, null);
|
||||
return results.get(0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int countNicsForRunningVms(long networkId) {
|
||||
SearchCriteria<Integer> sc = CountByForRunningVms.create();
|
||||
sc.setParameters("networkId", networkId);
|
||||
sc.setJoinParameters("vm", "state", VirtualMachine.State.Running);
|
||||
sc.setJoinParameters("vm", "type", VirtualMachine.Type.User);
|
||||
List<Integer> results = customSearch(sc, null);
|
||||
return results.get(0);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2232,6 +2232,13 @@ public class NetworkModelImpl extends ManagerBase implements NetworkModel {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Due to VMSync issue, there can be cases where nic count is zero, but there can be VM's running in the network
|
||||
// so add extra guard to check if network GC is actially required.
|
||||
if (_nicDao.countNicsForRunningVms(networkId) > 0) {
|
||||
s_logger.debug("Network id=" + networkId + " is not ready for GC as it has vms that are Running at the moment");
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user