You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by bh...@apache.org on 2014/11/25 15:51:40 UTC
[04/18] git commit: updated refs/heads/4.3 to b8a28df
CLOUDSTACK-7872: network getting shutdown inspite of running VM's in the network
(cherry picked from commit 709bf074de9f8f22e6a71362551c4867be884e4b)
Signed-off-by: Rohit Yadav <ro...@shapeblue.com>
Conflicts:
engine/schema/src/com/cloud/vm/dao/NicDaoImpl.java
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/1e475892
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/1e475892
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/1e475892
Branch: refs/heads/4.3
Commit: 1e475892d540f5187019f746b2fd83ef6fbcf52d
Parents: 23a03ac
Author: Jayapal <ja...@apache.org>
Authored: Fri Nov 7 09:37:32 2014 +0530
Committer: Rohit Yadav <ro...@shapeblue.com>
Committed: Tue Nov 25 18:28:20 2014 +0530
----------------------------------------------------------------------
.../com/cloud/network/dao/NetworkDaoImpl.java | 2 --
engine/schema/src/com/cloud/vm/dao/NicDao.java | 2 ++
.../schema/src/com/cloud/vm/dao/NicDaoImpl.java | 21 ++++++++++++++++++++
.../src/com/cloud/network/NetworkModelImpl.java | 7 +++++++
4 files changed, 30 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1e475892/engine/schema/src/com/cloud/network/dao/NetworkDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/network/dao/NetworkDaoImpl.java b/engine/schema/src/com/cloud/network/dao/NetworkDaoImpl.java
index 90ba4a3..3c6ef4b 100644
--- a/engine/schema/src/com/cloud/network/dao/NetworkDaoImpl.java
+++ b/engine/schema/src/com/cloud/network/dao/NetworkDaoImpl.java
@@ -226,7 +226,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);
@@ -420,7 +419,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);
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1e475892/engine/schema/src/com/cloud/vm/dao/NicDao.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/vm/dao/NicDao.java b/engine/schema/src/com/cloud/vm/dao/NicDao.java
index 79bd4d2..0f9899a 100644
--- a/engine/schema/src/com/cloud/vm/dao/NicDao.java
+++ b/engine/schema/src/com/cloud/vm/dao/NicDao.java
@@ -73,4 +73,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);
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1e475892/engine/schema/src/com/cloud/vm/dao/NicDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/vm/dao/NicDaoImpl.java b/engine/schema/src/com/cloud/vm/dao/NicDaoImpl.java
index a7b7625..f00fa8b 100644
--- a/engine/schema/src/com/cloud/vm/dao/NicDaoImpl.java
+++ b/engine/schema/src/com/cloud/vm/dao/NicDaoImpl.java
@@ -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
@@ -287,4 +299,13 @@ public class NicDaoImpl extends GenericDaoBase<NicVO, Long> implements NicDao {
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);
+ }
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1e475892/server/src/com/cloud/network/NetworkModelImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/NetworkModelImpl.java b/server/src/com/cloud/network/NetworkModelImpl.java
index 1843d1c..566302b 100755
--- a/server/src/com/cloud/network/NetworkModelImpl.java
+++ b/server/src/com/cloud/network/NetworkModelImpl.java
@@ -2198,6 +2198,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;
}