Merge branch '4.9' into 4.10
diff --git a/engine/schema/src/com/cloud/vm/dao/UserVmDaoImpl.java b/engine/schema/src/com/cloud/vm/dao/UserVmDaoImpl.java
index 92f7e4e..b1ff706 100644
--- a/engine/schema/src/com/cloud/vm/dao/UserVmDaoImpl.java
+++ b/engine/schema/src/com/cloud/vm/dao/UserVmDaoImpl.java
@@ -192,18 +192,6 @@
                 JoinBuilder.JoinType.INNER);
         AccountDataCenterVirtualSearch.done();
 
-        SearchBuilder<NicVO> nicSearchByNetwork = _nicDao.createSearchBuilder();
-        nicSearchByNetwork.and("networkId", nicSearchByNetwork.entity().getNetworkId(), SearchCriteria.Op.EQ);
-        nicSearchByNetwork.and("removed", nicSearchByNetwork.entity().getRemoved(), SearchCriteria.Op.NULL);
-        nicSearchByNetwork.and().op("ip4Address", nicSearchByNetwork.entity().getIPv4Address(), SearchCriteria.Op.NNULL);
-        nicSearchByNetwork.or("ip6Address", nicSearchByNetwork.entity().getIPv6Address(), SearchCriteria.Op.NNULL);
-        nicSearchByNetwork.cp();
-
-        UserVmSearch = createSearchBuilder();
-        UserVmSearch.and("states", UserVmSearch.entity().getState(), SearchCriteria.Op.IN);
-        UserVmSearch.join("nicSearchByNetwork", nicSearchByNetwork, UserVmSearch.entity().getId(), nicSearchByNetwork.entity().getInstanceId(), JoinBuilder.JoinType.INNER);
-        UserVmSearch.done();
-
         UserVmByIsoSearch = createSearchBuilder();
         UserVmByIsoSearch.and("isoId", UserVmByIsoSearch.entity().getIsoId(), SearchCriteria.Op.EQ);
         UserVmByIsoSearch.done();
@@ -313,11 +301,25 @@
 
     @Override
     public List<UserVmVO> listByNetworkIdAndStates(long networkId, State... states) {
+        if (UserVmSearch == null) {
+            SearchBuilder<NicVO> nicSearch = _nicDao.createSearchBuilder();
+            nicSearch.and("networkId", nicSearch.entity().getNetworkId(), SearchCriteria.Op.EQ);
+            nicSearch.and("removed", nicSearch.entity().getRemoved(), SearchCriteria.Op.NULL);
+            nicSearch.and().op("ip4Address", nicSearch.entity().getIPv4Address(), SearchCriteria.Op.NNULL);
+            nicSearch.or("ip6Address", nicSearch.entity().getIPv6Address(), SearchCriteria.Op.NNULL);
+            nicSearch.cp();
+
+            UserVmSearch = createSearchBuilder();
+            UserVmSearch.and("states", UserVmSearch.entity().getState(), SearchCriteria.Op.IN);
+            UserVmSearch.join("nicSearch", nicSearch, UserVmSearch.entity().getId(), nicSearch.entity().getInstanceId(), JoinBuilder.JoinType.INNER);
+            UserVmSearch.done();
+        }
+
         SearchCriteria<UserVmVO> sc = UserVmSearch.create();
         if (states != null && states.length != 0) {
             sc.setParameters("states", (Object[])states);
         }
-        sc.setJoinParameters("nicSearchByNetwork", "networkId", networkId);
+        sc.setJoinParameters("nicSearch", "networkId", networkId);
 
         return listBy(sc);
     }