This is an automated email from the ASF dual-hosted git repository.

dahn pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudstack.git


The following commit(s) were added to refs/heads/main by this push:
     new 4ff592ac2c1 Use UserVmDao for listVirtualMachines API to increase 
performance (#8012)
4ff592ac2c1 is described below

commit 4ff592ac2c151ff9be61b78c82d6508e74a52288
Author: Marcus Sorensen <[email protected]>
AuthorDate: Thu Oct 26 00:44:09 2023 -0600

    Use UserVmDao for listVirtualMachines API to increase performance (#8012)
    
    Co-authored-by: Marcus Sorensen <[email protected]>
---
 .../java/com/cloud/utils/db/GenericDaoBase.java    |  37 +-
 .../com/cloud/utils/db/GenericDaoBaseTest.java     |  52 ++
 .../java/com/cloud/api/query/QueryManagerImpl.java | 698 ++++++++++++---------
 3 files changed, 494 insertions(+), 293 deletions(-)

diff --git a/framework/db/src/main/java/com/cloud/utils/db/GenericDaoBase.java 
b/framework/db/src/main/java/com/cloud/utils/db/GenericDaoBase.java
index a5ed004c30e..5fd9580342c 100644
--- a/framework/db/src/main/java/com/cloud/utils/db/GenericDaoBase.java
+++ b/framework/db/src/main/java/com/cloud/utils/db/GenericDaoBase.java
@@ -1264,6 +1264,11 @@ public abstract class GenericDaoBase<T, ID extends 
Serializable> extends Compone
 
     @DB()
     protected void addJoins(StringBuilder str, 
Collection<JoinBuilder<SearchCriteria<?>>> joins) {
+        addJoins(str, joins, new HashMap<>());
+    }
+
+    @DB()
+    protected void addJoins(StringBuilder str, 
Collection<JoinBuilder<SearchCriteria<?>>> joins, Map<String, Integer> 
joinedTableNames) {
         boolean hasWhereClause = true;
         int fromIndex = str.lastIndexOf("WHERE");
         if (fromIndex == -1) {
@@ -1274,18 +1279,27 @@ public abstract class GenericDaoBase<T, ID extends 
Serializable> extends Compone
         }
 
         for (JoinBuilder<SearchCriteria<?>> join : joins) {
+            String joinTableName = join.getSecondAttribute().table;
+            String joinTableAlias = findNextJoinTableName(joinTableName, 
joinedTableNames);
             StringBuilder onClause = new StringBuilder();
             onClause.append(" ")
             .append(join.getType().getName())
             .append(" ")
-            .append(join.getSecondAttribute().table)
-            .append(" ON ")
+            .append(joinTableName);
+            if (!joinTableAlias.equals(joinTableName)) {
+                onClause.append(" ").append(joinTableAlias);
+            }
+            onClause.append(" ON ")
             .append(join.getFirstAttribute().table)
             .append(".")
             .append(join.getFirstAttribute().columnName)
-            .append("=")
-            .append(join.getSecondAttribute().table)
-            .append(".")
+            .append("=");
+            if(!joinTableAlias.equals(joinTableName)) {
+                onClause.append(joinTableAlias);
+            } else {
+                onClause.append(joinTableName);
+            }
+            onClause.append(".")
             .append(join.getSecondAttribute().columnName)
             .append(" ");
             str.insert(fromIndex, onClause);
@@ -1306,11 +1320,22 @@ public abstract class GenericDaoBase<T, ID extends 
Serializable> extends Compone
 
         for (JoinBuilder<SearchCriteria<?>> join : joins) {
             if (join.getT().getJoins() != null) {
-                addJoins(str, join.getT().getJoins());
+                addJoins(str, join.getT().getJoins(), joinedTableNames);
             }
         }
     }
 
+    protected static String findNextJoinTableName(String tableName, 
Map<String, Integer> usedTableNames) {
+        if (usedTableNames.containsKey(tableName)) {
+            Integer tableCounter = usedTableNames.get(tableName);
+            usedTableNames.put(tableName, ++tableCounter);
+            tableName = tableName + tableCounter;
+        } else {
+            usedTableNames.put(tableName, 0);
+        }
+        return tableName;
+    }
+
     private void removeAndClause(StringBuilder sql) {
         sql.delete(sql.length() - 4, sql.length());
     }
diff --git 
a/framework/db/src/test/java/com/cloud/utils/db/GenericDaoBaseTest.java 
b/framework/db/src/test/java/com/cloud/utils/db/GenericDaoBaseTest.java
index 352ea735aa7..b950501337b 100644
--- a/framework/db/src/test/java/com/cloud/utils/db/GenericDaoBaseTest.java
+++ b/framework/db/src/test/java/com/cloud/utils/db/GenericDaoBaseTest.java
@@ -18,6 +18,10 @@ package com.cloud.utils.db;
 
 import java.sql.ResultSet;
 import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
 
 import org.junit.Assert;
 import org.junit.Before;
@@ -36,6 +40,7 @@ public class GenericDaoBaseTest {
     @Mock
     SQLException mockedSQLException;
 
+    private static final DbTestDao dbTestDao = new DbTestDao();
     private static final String INTEGRITY_CONSTRAINT_VIOLATION = "23000";
     private static final int DUPLICATE_ENTRY_ERRO_CODE = 1062;
 
@@ -214,4 +219,51 @@ public class GenericDaoBaseTest {
 
         Assert.assertEquals(resultSetSize, result);
     }
+
+    @Test
+    public void addJoinsTest() {
+        StringBuilder joinString = new StringBuilder();
+        Collection<JoinBuilder<SearchCriteria<?>>> joins = new ArrayList<>();
+
+        Attribute attr1 = new Attribute("table1", "column1");
+        Attribute attr2 = new Attribute("table2", "column2");
+        Attribute attr3 = new Attribute("table3", "column1");
+        Attribute attr4 = new Attribute("table4", "column2");
+
+        joins.add(new JoinBuilder<>(dbTestDao.createSearchCriteria(), attr1, 
attr2, JoinBuilder.JoinType.INNER));
+        joins.add(new JoinBuilder<>(dbTestDao.createSearchCriteria(), attr3, 
attr4, JoinBuilder.JoinType.INNER));
+        dbTestDao.addJoins(joinString, joins);
+
+        Assert.assertEquals(" INNER JOIN table2 ON 
table1.column1=table2.column2  INNER JOIN table4 ON 
table3.column1=table4.column2 ", joinString.toString());
+    }
+
+    @Test
+    public void multiJoinSameTableTest() {
+        StringBuilder joinString = new StringBuilder();
+        Collection<JoinBuilder<SearchCriteria<?>>> joins = new ArrayList<>();
+
+        Attribute tAc1 = new Attribute("tableA", "column1");
+        Attribute tAc2 = new Attribute("tableA", "column2");
+        Attribute tAc3 = new Attribute("tableA", "column3");
+        Attribute tBc2 = new Attribute("tableB", "column2");
+        Attribute tCc3 = new Attribute("tableC", "column3");
+        Attribute tDc4 = new Attribute("tableD", "column4");
+
+        joins.add(new JoinBuilder<>(dbTestDao.createSearchCriteria(), tBc2, 
tAc1, JoinBuilder.JoinType.INNER));
+        joins.add(new JoinBuilder<>(dbTestDao.createSearchCriteria(), tCc3, 
tAc2, JoinBuilder.JoinType.INNER));
+        joins.add(new JoinBuilder<>(dbTestDao.createSearchCriteria(), tDc4, 
tAc3, JoinBuilder.JoinType.INNER));
+        dbTestDao.addJoins(joinString, joins);
+
+        Assert.assertEquals(" INNER JOIN tableA ON 
tableB.column2=tableA.column1  INNER JOIN tableA tableA1 ON 
tableC.column3=tableA1.column2  INNER JOIN tableA tableA2 ON 
tableD.column4=tableA2.column3 ", joinString.toString());
+    }
+
+    @Test
+    public void findNextTableNameTest() {
+        Map<String, Integer> usedTables = new HashMap<>();
+
+        Assert.assertEquals("tableA", 
GenericDaoBase.findNextJoinTableName("tableA", usedTables));
+        Assert.assertEquals("tableA1", 
GenericDaoBase.findNextJoinTableName("tableA", usedTables));
+        Assert.assertEquals("tableA2", 
GenericDaoBase.findNextJoinTableName("tableA", usedTables));
+        Assert.assertEquals("tableA3", 
GenericDaoBase.findNextJoinTableName("tableA", usedTables));
+    }
 }
diff --git a/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java 
b/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java
index 491104b654c..946b48cf480 100644
--- a/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java
+++ b/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java
@@ -34,6 +34,22 @@ import java.util.stream.Stream;
 
 import javax.inject.Inject;
 
+import com.cloud.host.Host;
+import com.cloud.host.dao.HostDao;
+import com.cloud.network.as.AutoScaleVmGroupVmMapVO;
+import com.cloud.network.as.dao.AutoScaleVmGroupDao;
+import com.cloud.network.as.dao.AutoScaleVmGroupVmMapDao;
+import com.cloud.network.dao.NetworkDao;
+import com.cloud.network.dao.NetworkVO;
+import com.cloud.storage.dao.VolumeDao;
+import com.cloud.user.SSHKeyPairVO;
+import com.cloud.user.dao.SSHKeyPairDao;
+import com.cloud.vm.InstanceGroupVMMapVO;
+import com.cloud.vm.NicVO;
+import com.cloud.vm.UserVmDetailVO;
+import com.cloud.vm.dao.InstanceGroupVMMapDao;
+import com.cloud.vm.dao.NicDao;
+import com.cloud.vm.dao.UserVmDetailsDao;
 import org.apache.cloudstack.acl.ControlledEntity;
 import org.apache.cloudstack.acl.ControlledEntity.ACLType;
 import org.apache.cloudstack.acl.SecurityChecker;
@@ -118,6 +134,8 @@ import org.apache.cloudstack.api.response.UserResponse;
 import org.apache.cloudstack.api.response.UserVmResponse;
 import org.apache.cloudstack.api.response.VolumeResponse;
 import org.apache.cloudstack.api.response.ZoneResponse;
+import org.apache.cloudstack.backup.BackupOfferingVO;
+import org.apache.cloudstack.backup.dao.BackupOfferingDao;
 import org.apache.cloudstack.context.CallContext;
 import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
 import 
org.apache.cloudstack.engine.subsystem.api.storage.DataStoreCapabilities;
@@ -201,7 +219,6 @@ import com.cloud.exception.CloudAuthenticationException;
 import com.cloud.exception.InvalidParameterValueException;
 import com.cloud.exception.PermissionDeniedException;
 import com.cloud.ha.HighAvailabilityManager;
-import com.cloud.host.Host;
 import com.cloud.hypervisor.Hypervisor;
 import com.cloud.hypervisor.Hypervisor.HypervisorType;
 import com.cloud.network.RouterHealthCheckResult;
@@ -247,7 +264,6 @@ import com.cloud.storage.VolumeVO;
 import com.cloud.storage.dao.DiskOfferingDao;
 import com.cloud.storage.dao.StoragePoolTagsDao;
 import com.cloud.storage.dao.VMTemplateDao;
-import com.cloud.storage.dao.VolumeDao;
 import com.cloud.tags.ResourceTagVO;
 import com.cloud.tags.dao.ResourceTagDao;
 import com.cloud.template.VirtualMachineTemplate.State;
@@ -281,6 +297,8 @@ import com.cloud.vm.dao.DomainRouterDao;
 import com.cloud.vm.dao.UserVmDao;
 import com.cloud.vm.dao.VMInstanceDao;
 
+import static com.cloud.vm.VmDetailConstants.SSH_PUBLIC_KEY;
+
 @Component
 public class QueryManagerImpl extends MutualExclusiveIdsManagerBase implements 
QueryService, Configurable {
 
@@ -289,7 +307,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
     private static final String ID_FIELD = "id";
 
     @Inject
-    private AccountManager _accountMgr;
+    private AccountManager accountMgr;
 
     @Inject
     private ProjectManager _projectMgr;
@@ -316,7 +334,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
     private UserVmJoinDao _userVmJoinDao;
 
     @Inject
-    private UserVmDao _userVmDao;
+    private UserVmDao userVmDao;
 
     @Inject
     private VMInstanceDao _vmInstanceDao;
@@ -325,7 +343,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
     private SecurityGroupJoinDao _securityGroupJoinDao;
 
     @Inject
-    private SecurityGroupVMMapDao _securityGroupVMMapDao;
+    private SecurityGroupVMMapDao securityGroupVMMapDao;
 
     @Inject
     private DomainRouterJoinDao _routerJoinDao;
@@ -346,7 +364,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
     private ProjectAccountJoinDao _projectAccountJoinDao;
 
     @Inject
-    private HostJoinDao _hostJoinDao;
+    private HostJoinDao hostJoinDao;
 
     @Inject
     private VolumeJoinDao _volumeJoinDao;
@@ -429,7 +447,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
     private AffinityGroupDomainMapDao _affinityGroupDomainMapDao;
 
     @Inject
-    private ResourceTagDao _resourceTagDao;
+    private ResourceTagDao resourceTagDao;
 
     @Inject
     private DataStoreManager dataStoreManager;
@@ -447,7 +465,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
     private RouterHealthCheckResultDao routerHealthCheckResultDao;
 
     @Inject
-    private PrimaryDataStoreDao _storagePoolDao;
+    private PrimaryDataStoreDao storagePoolDao;
 
     @Inject
     private StoragePoolDetailsDao _storagePoolDetailsDao;
@@ -470,8 +488,37 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
     private ManagementServerHostDao msHostDao;
 
     @Inject
-    private SnapshotJoinDao snapshotJoinDao;
+    private NetworkDao networkDao;
+
+    @Inject
+    private NicDao nicDao;
+
+    @Inject
+    private HostDao hostDao;
+
+    @Inject
+    private InstanceGroupVMMapDao instanceGroupVMMapDao;
+
+    @Inject
+    private AffinityGroupVMMapDao affinityGroupVMMapDao;
+
+    @Inject
+    private UserVmDetailsDao userVmDetailsDao;
+
+    @Inject
+    private SSHKeyPairDao sshKeyPairDao;
+
+    @Inject
+    private BackupOfferingDao backupOfferingDao;
+
+    @Inject
+    private AutoScaleVmGroupDao autoScaleVmGroupDao;
+
+    @Inject
+    private AutoScaleVmGroupVmMapDao autoScaleVmGroupVmMapDao;
 
+    @Inject
+    private SnapshotJoinDao snapshotJoinDao;
 
     @Inject
     EntityManager entityManager;
@@ -595,13 +642,13 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
     private Pair<List<UserAccountJoinVO>, Integer> getUserListInternal(Account 
caller, List<Long> permittedAccounts, boolean listAll, Long id, Object 
username, Object type,
             String accountName, Object state, String keyword, Long domainId, 
boolean recursive, Filter searchFilter) {
         Ternary<Long, Boolean, ListProjectResourcesCriteria> 
domainIdRecursiveListProject = new Ternary<Long, Boolean, 
ListProjectResourcesCriteria>(domainId, recursive, null);
-        _accountMgr.buildACLSearchParameters(caller, id, accountName, null, 
permittedAccounts, domainIdRecursiveListProject, listAll, false);
+        accountMgr.buildACLSearchParameters(caller, id, accountName, null, 
permittedAccounts, domainIdRecursiveListProject, listAll, false);
         domainId = domainIdRecursiveListProject.first();
         Boolean isRecursive = domainIdRecursiveListProject.second();
         ListProjectResourcesCriteria listProjectResourcesCriteria = 
domainIdRecursiveListProject.third();
 
         SearchBuilder<UserAccountJoinVO> sb = 
_userAccountJoinDao.createSearchBuilder();
-        _accountMgr.buildACLViewSearchBuilder(sb, domainId, isRecursive, 
permittedAccounts, listProjectResourcesCriteria);
+        accountMgr.buildACLViewSearchBuilder(sb, domainId, isRecursive, 
permittedAccounts, listProjectResourcesCriteria);
         sb.and("username", sb.entity().getUsername(), Op.LIKE);
         if (id != null && id == 1) {
             // system user should NOT be searchable
@@ -627,7 +674,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
         SearchCriteria<UserAccountJoinVO> sc = sb.create();
 
         // building ACL condition
-        _accountMgr.buildACLViewSearchCriteria(sc, domainId, isRecursive, 
permittedAccounts, listProjectResourcesCriteria);
+        accountMgr.buildACLViewSearchCriteria(sc, domainId, isRecursive, 
permittedAccounts, listProjectResourcesCriteria);
 
         if (keyword != null) {
             SearchCriteria<UserAccountJoinVO> ssc = 
_userAccountJoinDao.createSearchCriteria();
@@ -687,7 +734,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
 
     private Pair<List<EventJoinVO>, Integer> 
searchForEventsInternal(ListEventsCmd cmd) {
         Account caller = CallContext.current().getCallingAccount();
-        boolean isRootAdmin = _accountMgr.isRootAdmin(caller.getId());
+        boolean isRootAdmin = accountMgr.isRootAdmin(caller.getId());
         List<Long> permittedAccounts = new ArrayList<Long>();
 
         Long id = cmd.getId();
@@ -727,12 +774,12 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
             }
             if (!isRootAdmin && object instanceof ControlledEntity) {
                 ControlledEntity entity = (ControlledEntity)object;
-                
_accountMgr.checkAccess(CallContext.current().getCallingAccount(), 
SecurityChecker.AccessType.ListEntry, entity.getAccountId() == caller.getId(), 
entity);
+                
accountMgr.checkAccess(CallContext.current().getCallingAccount(), 
SecurityChecker.AccessType.ListEntry, entity.getAccountId() == caller.getId(), 
entity);
             }
         }
 
         Ternary<Long, Boolean, ListProjectResourcesCriteria> 
domainIdRecursiveListProject = new Ternary<Long, Boolean, 
ListProjectResourcesCriteria>(cmd.getDomainId(), cmd.isRecursive(), null);
-        _accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), 
cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, 
cmd.listAll(), false);
+        accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), 
cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, 
cmd.listAll(), false);
         Long domainId = domainIdRecursiveListProject.first();
         Boolean isRecursive = domainIdRecursiveListProject.second();
         ListProjectResourcesCriteria listProjectResourcesCriteria = 
domainIdRecursiveListProject.third();
@@ -743,7 +790,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
         searchFilter.addOrderBy(EventJoinVO.class, "id", false);
 
         SearchBuilder<EventJoinVO> sb = _eventJoinDao.createSearchBuilder();
-        _accountMgr.buildACLViewSearchBuilder(sb, domainId, isRecursive, 
permittedAccounts, listProjectResourcesCriteria);
+        accountMgr.buildACLViewSearchBuilder(sb, domainId, isRecursive, 
permittedAccounts, listProjectResourcesCriteria);
 
         sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
         sb.and("levelL", sb.entity().getLevel(), SearchCriteria.Op.LIKE);
@@ -762,10 +809,10 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
 
         SearchCriteria<EventJoinVO> sc = sb.create();
         // building ACL condition
-        _accountMgr.buildACLViewSearchCriteria(sc, domainId, isRecursive, 
permittedAccounts, listProjectResourcesCriteria);
+        accountMgr.buildACLViewSearchCriteria(sc, domainId, isRecursive, 
permittedAccounts, listProjectResourcesCriteria);
 
         // For end users display only enabled events
-        if (!_accountMgr.isRootAdmin(caller.getId())) {
+        if (!accountMgr.isRootAdmin(caller.getId())) {
             sc.setParameters("displayEvent", true);
         }
 
@@ -880,14 +927,14 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
 
         Ternary<Long, Boolean, ListProjectResourcesCriteria> 
domainIdRecursiveListProject = new Ternary<Long, Boolean, 
ListProjectResourcesCriteria>(cmd.getDomainId(), cmd.isRecursive(), null);
 
-        _accountMgr.buildACLSearchParameters(caller, null, 
cmd.getAccountName(), projectId, permittedAccounts, 
domainIdRecursiveListProject, listAll, false);
+        accountMgr.buildACLSearchParameters(caller, null, 
cmd.getAccountName(), projectId, permittedAccounts, 
domainIdRecursiveListProject, listAll, false);
         Long domainId = domainIdRecursiveListProject.first();
         Boolean isRecursive = domainIdRecursiveListProject.second();
         ListProjectResourcesCriteria listProjectResourcesCriteria = 
domainIdRecursiveListProject.third();
         Filter searchFilter = new Filter(ResourceTagJoinVO.class, 
"resourceType", false, cmd.getStartIndex(), cmd.getPageSizeVal());
 
         SearchBuilder<ResourceTagJoinVO> sb = 
_resourceTagJoinDao.createSearchBuilder();
-        _accountMgr.buildACLViewSearchBuilder(sb, domainId, isRecursive, 
permittedAccounts, listProjectResourcesCriteria);
+        accountMgr.buildACLViewSearchBuilder(sb, domainId, isRecursive, 
permittedAccounts, listProjectResourcesCriteria);
 
         sb.and("key", sb.entity().getKey(), SearchCriteria.Op.EQ);
         sb.and("value", sb.entity().getValue(), SearchCriteria.Op.EQ);
@@ -902,7 +949,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
 
         // now set the SC criteria...
         SearchCriteria<ResourceTagJoinVO> sc = sb.create();
-        _accountMgr.buildACLViewSearchCriteria(sc, domainId, isRecursive, 
permittedAccounts, listProjectResourcesCriteria);
+        accountMgr.buildACLViewSearchCriteria(sc, domainId, isRecursive, 
permittedAccounts, listProjectResourcesCriteria);
 
         if (key != null) {
             sc.setParameters("key", key);
@@ -952,7 +999,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
         List<Long> permittedAccounts = new ArrayList<Long>();
 
         Ternary<Long, Boolean, ListProjectResourcesCriteria> 
domainIdRecursiveListProject = new Ternary<Long, Boolean, 
ListProjectResourcesCriteria>(cmd.getDomainId(), cmd.isRecursive(), null);
-        _accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), 
cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, 
cmd.listAll(), false);
+        accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), 
cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, 
cmd.listAll(), false);
         Long domainId = domainIdRecursiveListProject.first();
         Boolean isRecursive = domainIdRecursiveListProject.second();
         ListProjectResourcesCriteria listProjectResourcesCriteria = 
domainIdRecursiveListProject.third();
@@ -960,13 +1007,13 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
         Filter searchFilter = new Filter(InstanceGroupJoinVO.class, "id", 
true, cmd.getStartIndex(), cmd.getPageSizeVal());
 
         SearchBuilder<InstanceGroupJoinVO> sb = 
_vmGroupJoinDao.createSearchBuilder();
-        _accountMgr.buildACLViewSearchBuilder(sb, domainId, isRecursive, 
permittedAccounts, listProjectResourcesCriteria);
+        accountMgr.buildACLViewSearchBuilder(sb, domainId, isRecursive, 
permittedAccounts, listProjectResourcesCriteria);
 
         sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
         sb.and("name", sb.entity().getName(), SearchCriteria.Op.EQ);
 
         SearchCriteria<InstanceGroupJoinVO> sc = sb.create();
-        _accountMgr.buildACLViewSearchCriteria(sc, domainId, isRecursive, 
permittedAccounts, listProjectResourcesCriteria);
+        accountMgr.buildACLViewSearchCriteria(sc, domainId, isRecursive, 
permittedAccounts, listProjectResourcesCriteria);
 
         if (keyword != null) {
             SearchCriteria<InstanceGroupJoinVO> ssc = 
_vmGroupJoinDao.createSearchCriteria();
@@ -997,7 +1044,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
 
         ResponseView respView = ResponseView.Restricted;
         Account caller = CallContext.current().getCallingAccount();
-        if (_accountMgr.isRootAdmin(caller.getId())) {
+        if (accountMgr.isRootAdmin(caller.getId())) {
             respView = ResponseView.Full;
         }
         List<UserVmResponse> vmResponses = 
ViewResponseHelper.createUserVmResponse(respView, "virtualmachine", 
cmd.getDetails(), cmd.getAccumulate(), cmd.getShowUserData(),
@@ -1019,21 +1066,79 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
     }
 
     private Pair<List<UserVmJoinVO>, Integer> 
searchForUserVMsInternal(ListVMsCmd cmd) {
+        Pair<List<Long>, Integer> vmIdPage = searchForUserVMIdsAndCount(cmd);
+
+        Integer count = vmIdPage.second();
+        Long[] idArray = vmIdPage.first().toArray(new Long[0]);
+
+        if (count == 0) {
+            return new Pair<>(new ArrayList<>(), count);
+        }
+
+        // search vm details by ids
+        List<UserVmJoinVO> vms = _userVmJoinDao.searchByIds( idArray);
+        return new Pair<>(vms, count);
+    }
+
+    private Pair<List<Long>, Integer> searchForUserVMIdsAndCount(ListVMsCmd 
cmd) {
         Account caller = CallContext.current().getCallingAccount();
         List<Long> permittedAccounts = new ArrayList<>();
-
         boolean listAll = cmd.listAll();
         Long id = cmd.getId();
+        Boolean display = cmd.getDisplay();
+        String hypervisor = cmd.getHypervisor();
+        String state = cmd.getState();
+        Long zoneId = cmd.getZoneId();
+        Long templateId = cmd.getTemplateId();
+        Long serviceOfferingId = cmd.getServiceOfferingId();
+        Boolean isHaEnabled = cmd.getHaEnabled();
+        String keyword = cmd.getKeyword();
+        Long networkId = cmd.getNetworkId();
+        Long isoId = cmd.getIsoId();
+        String vmHostName = cmd.getName();
+        Long hostId = null;
+        Long podId = null;
+        Long clusterId = null;
+        Long groupId = cmd.getGroupId();
+        Long vpcId = cmd.getVpcId();
+        Long affinityGroupId = cmd.getAffinityGroupId();
+        String keyPairName = cmd.getKeyPairName();
+        Long securityGroupId = cmd.getSecurityGroupId();
+        Long autoScaleVmGroupId = cmd.getAutoScaleVmGroupId();
+        Long backupOfferingId = cmd.getBackupOfferingId();
+        Long storageId = null;
+        StoragePoolVO pool = null;
         Long userId = cmd.getUserId();
         Map<String, String> tags = cmd.getTags();
-        Boolean display = cmd.getDisplay();
+
+        boolean isAdmin = false;
+        boolean isRootAdmin = false;
+
+        if (accountMgr.isAdmin(caller.getId())) {
+            isAdmin = true;
+        }
+
+        if (accountMgr.isRootAdmin(caller.getId())) {
+            isRootAdmin = true;
+            podId = (Long) getObjectPossibleMethodValue(cmd, "getPodId");
+            clusterId = (Long) getObjectPossibleMethodValue(cmd, 
"getClusterId");
+            hostId = (Long) getObjectPossibleMethodValue(cmd, "getHostId");
+            storageId = (Long) getObjectPossibleMethodValue(cmd, 
"getStorageId");
+            if (storageId != null) {
+                pool = storagePoolDao.findById( storageId);
+                if (pool == null) {
+                    throw new InvalidParameterValueException("Unable to find 
specified storage pool");
+                }
+            }
+        }
+
         Ternary<Long, Boolean, ListProjectResourcesCriteria> 
domainIdRecursiveListProject = new Ternary<>(cmd.getDomainId(), 
cmd.isRecursive(), null);
-        _accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), 
cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, listAll, 
false);
+        accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), 
cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, listAll, 
false);
         Long domainId = domainIdRecursiveListProject.first();
         Boolean isRecursive = domainIdRecursiveListProject.second();
         ListProjectResourcesCriteria listProjectResourcesCriteria = 
domainIdRecursiveListProject.third();
 
-        Filter searchFilter = new Filter(UserVmJoinVO.class, "id", true, 
cmd.getStartIndex(), cmd.getPageSizeVal());
+        Filter searchFilter = new Filter(UserVmVO.class, "id", true, 
cmd.getStartIndex(), cmd.getPageSizeVal());
 
         List<Long> ids = null;
         if (cmd.getId() != null) {
@@ -1046,302 +1151,319 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
             ids = cmd.getIds();
         }
 
-        // first search distinct vm id by using query criteria and pagination
-        SearchBuilder<UserVmJoinVO> sb = _userVmJoinDao.createSearchBuilder();
-        sb.select(null, Func.DISTINCT, sb.entity().getId()); // select 
distinct ids
+        SearchBuilder<UserVmVO> userVmSearchBuilder = 
userVmDao.createSearchBuilder();
+        userVmSearchBuilder.select(null, Func.DISTINCT, 
userVmSearchBuilder.entity().getId());
+        accountMgr.buildACLSearchBuilder(userVmSearchBuilder, domainId, 
isRecursive, permittedAccounts, listProjectResourcesCriteria);
 
-        _accountMgr.buildACLViewSearchBuilder(sb, domainId, isRecursive, 
permittedAccounts, listProjectResourcesCriteria);
+        if (HypervisorType.getType(hypervisor) == HypervisorType.None && 
hypervisor != null) {
+            // invalid hypervisor type input
+            throw new InvalidParameterValueException("Invalid HypervisorType " 
+ hypervisor);
+        }
 
-        String hypervisor = cmd.getHypervisor();
-        Object name = cmd.getName();
-        String state = cmd.getState();
-        Object zoneId = cmd.getZoneId();
-        Object keyword = cmd.getKeyword();
-        boolean isAdmin = false;
-        boolean isRootAdmin = false;
-        if (_accountMgr.isAdmin(caller.getId())) {
-            isAdmin = true;
+        if (ids != null && !ids.isEmpty()) {
+            userVmSearchBuilder.and("idIN", 
userVmSearchBuilder.entity().getId(), Op.IN);
         }
-        if (_accountMgr.isRootAdmin(caller.getId())) {
-            isRootAdmin = true;
+
+        userVmSearchBuilder.and("displayName", 
userVmSearchBuilder.entity().getDisplayName(), Op.LIKE);
+        userVmSearchBuilder.and("stateEQ", 
userVmSearchBuilder.entity().getState(), Op.EQ);
+        userVmSearchBuilder.and("stateNEQ", 
userVmSearchBuilder.entity().getState(), Op.NEQ);
+        userVmSearchBuilder.and("stateNIN", 
userVmSearchBuilder.entity().getState(), Op.NIN);
+
+        if (hostId != null) {
+            userVmSearchBuilder.and("hostId", 
userVmSearchBuilder.entity().getHostId(), Op.EQ);
         }
 
-        Object groupId = cmd.getGroupId();
-        Object networkId = cmd.getNetworkId();
-        if (HypervisorType.getType(hypervisor) == HypervisorType.None && 
hypervisor != null) {
-            // invalid hypervisor type input
-            throw new InvalidParameterValueException("Invalid HypervisorType " 
+ hypervisor);
+        if (zoneId != null) {
+            userVmSearchBuilder.and("dataCenterId", 
userVmSearchBuilder.entity().getDataCenterId(), Op.EQ);
         }
-        Object templateId = cmd.getTemplateId();
-        Object isoId = cmd.getIsoId();
-        Object vpcId = cmd.getVpcId();
-        Object affinityGroupId = cmd.getAffinityGroupId();
-        Object keyPairName = cmd.getKeyPairName();
-        Object serviceOffId = cmd.getServiceOfferingId();
-        Object securityGroupId = cmd.getSecurityGroupId();
-        Object backupOfferingId = cmd.getBackupOfferingId();
-        Object isHaEnabled = cmd.getHaEnabled();
-        Object autoScaleVmGroupId = cmd.getAutoScaleVmGroupId();
-        Object pod = null;
-        Object clusterId = null;
-        Object hostId = null;
-        Object storageId = null;
-        if (_accountMgr.isRootAdmin(caller.getId())) {
-            pod = getObjectPossibleMethodValue(cmd, "getPodId");
-            clusterId = getObjectPossibleMethodValue(cmd, "getClusterId");
-            hostId = getObjectPossibleMethodValue(cmd, "getHostId");
-            storageId = getObjectPossibleMethodValue(cmd, "getStorageId");
-        }
-
-        sb.and("displayName", sb.entity().getDisplayName(), 
SearchCriteria.Op.LIKE);
-        sb.and("idIN", sb.entity().getId(), SearchCriteria.Op.IN);
-        sb.and("name", sb.entity().getName(), SearchCriteria.Op.EQ);
-        sb.and("stateEQ", sb.entity().getState(), SearchCriteria.Op.EQ);
-        sb.and("stateNEQ", sb.entity().getState(), SearchCriteria.Op.NEQ);
-        sb.and("stateNIN", sb.entity().getState(), SearchCriteria.Op.NIN);
-        sb.and("dataCenterId", sb.entity().getDataCenterId(), 
SearchCriteria.Op.EQ);
-        sb.and("podId", sb.entity().getPodId(), SearchCriteria.Op.EQ);
-        if (clusterId != null) {
-            sb.and().op("clusterId", sb.entity().getClusterId(), 
SearchCriteria.Op.EQ);
-            sb.or("clusterHostId", sb.entity().getHostId(), Op.IN);
-            sb.or("clusterLastHostId", sb.entity().getLastHostId(), Op.IN);
-            sb.cp();
+
+        if (templateId != null) {
+            userVmSearchBuilder.and("templateId", 
userVmSearchBuilder.entity().getTemplateId(), Op.EQ);
         }
-        sb.and("hypervisorType", sb.entity().getHypervisorType(), 
SearchCriteria.Op.EQ);
-        sb.and("hostIdEQ", sb.entity().getHostId(), SearchCriteria.Op.EQ);
-        sb.and("templateId", sb.entity().getTemplateId(), 
SearchCriteria.Op.EQ);
-        sb.and("isoId", sb.entity().getIsoId(), SearchCriteria.Op.EQ);
-        sb.and("instanceGroupId", sb.entity().getInstanceGroupId(), 
SearchCriteria.Op.EQ);
 
-        if (serviceOffId != null) {
-            sb.and("serviceOfferingId", sb.entity().getServiceOfferingId(), 
SearchCriteria.Op.EQ);
+        if (hypervisor != null) {
+            userVmSearchBuilder.and("hypervisorType", 
userVmSearchBuilder.entity().getHypervisorType(), Op.EQ);
         }
 
-        if (backupOfferingId != null) {
-            sb.and("backupOfferingId", sb.entity().getBackupOfferingId(), 
SearchCriteria.Op.EQ);
+        if (vmHostName != null) {
+            userVmSearchBuilder.and("name", 
userVmSearchBuilder.entity().getHostName(), Op.EQ);
         }
 
+        if (serviceOfferingId != null) {
+            userVmSearchBuilder.and("serviceOfferingId", 
userVmSearchBuilder.entity().getServiceOfferingId(), Op.EQ);
+        }
         if (display != null) {
-            sb.and("display", sb.entity().isDisplayVm(), SearchCriteria.Op.EQ);
+            userVmSearchBuilder.and("display", 
userVmSearchBuilder.entity().isDisplayVm(), Op.EQ);
+        }
+
+        if (!isRootAdmin) {
+            userVmSearchBuilder.and("displayVm", 
userVmSearchBuilder.entity().isDisplayVm(), Op.EQ);
         }
 
         if (isHaEnabled != null) {
-            sb.and("haEnabled", sb.entity().isHaEnabled(), 
SearchCriteria.Op.EQ);
+            userVmSearchBuilder.and("haEnabled", 
userVmSearchBuilder.entity().isHaEnabled(), Op.EQ);
         }
 
-        if (groupId != null && (Long)groupId != -1) {
-            sb.and("instanceGroupId", sb.entity().getInstanceGroupId(), 
SearchCriteria.Op.EQ);
+        if (isoId != null) {
+            userVmSearchBuilder.and("isoId", 
userVmSearchBuilder.entity().getIsoId(), Op.EQ);
         }
 
         if (userId != null) {
-            sb.and("userId", sb.entity().getUserId(), SearchCriteria.Op.EQ);
+            userVmSearchBuilder.and("userId", 
userVmSearchBuilder.entity().getUserId(), Op.EQ);
         }
 
-        if (networkId != null) {
-            sb.and("networkId", sb.entity().getNetworkId(), 
SearchCriteria.Op.EQ);
+        if (podId != null) {
+            userVmSearchBuilder.and("podId", 
userVmSearchBuilder.entity().getPodIdToDeployIn(), Op.EQ);
+        }
+
+        if (networkId != null || vpcId != null) {
+            SearchBuilder<NicVO> nicSearch = nicDao.createSearchBuilder();
+            nicSearch.and("networkId", nicSearch.entity().getNetworkId(), 
Op.EQ);
+            if (vpcId != null) {
+                SearchBuilder<NetworkVO> networkSearch = 
networkDao.createSearchBuilder();
+                networkSearch.and("vpcId", networkSearch.entity().getVpcId(), 
Op.EQ);
+                nicSearch.join("vpc", networkSearch, 
networkSearch.entity().getId(), nicSearch.entity().getNetworkId(), 
JoinBuilder.JoinType.INNER);
+            }
+            userVmSearchBuilder.join("nic", nicSearch, 
nicSearch.entity().getInstanceId(), userVmSearchBuilder.entity().getId(), 
JoinBuilder.JoinType.INNER);
         }
 
-        if (vpcId != null && networkId == null) {
-            sb.and("vpcId", sb.entity().getVpcId(), SearchCriteria.Op.EQ);
+        if (clusterId != null) {
+            userVmSearchBuilder.and().op("hostIdIn", 
userVmSearchBuilder.entity().getHostId(), Op.IN);
+            userVmSearchBuilder.or().op("lastHostIdIn", 
userVmSearchBuilder.entity().getLastHostId(), Op.IN);
+            userVmSearchBuilder.and(userVmSearchBuilder.entity().getState(), 
Op.EQ).values(VirtualMachine.State.Stopped);
+            userVmSearchBuilder.cp().cp();
+        }
+
+        if (groupId != null && groupId != -1) {
+            SearchBuilder<InstanceGroupVMMapVO> instanceGroupSearch = 
instanceGroupVMMapDao.createSearchBuilder();
+            instanceGroupSearch.and("groupId", 
instanceGroupSearch.entity().getGroupId(), Op.EQ);
+            userVmSearchBuilder.join("instanceGroup", instanceGroupSearch, 
instanceGroupSearch.entity().getInstanceId(), 
userVmSearchBuilder.entity().getId(), JoinBuilder.JoinType.INNER);
+        }
+
+        if (affinityGroupId != null && affinityGroupId != -1) {
+            SearchBuilder<AffinityGroupVMMapVO> affinityGroupSearch = 
affinityGroupVMMapDao.createSearchBuilder();
+            affinityGroupSearch.and("affinityGroupId", 
affinityGroupSearch.entity().getAffinityGroupId(), Op.EQ);
+            userVmSearchBuilder.join("affinityGroup", affinityGroupSearch, 
affinityGroupSearch.entity().getInstanceId(), 
userVmSearchBuilder.entity().getId(), JoinBuilder.JoinType.INNER);
+        }
+
+        if (securityGroupId != null && securityGroupId != -1) {
+            SearchBuilder<SecurityGroupVMMapVO> securityGroupSearch = 
securityGroupVMMapDao.createSearchBuilder();
+            securityGroupSearch.and("securityGroupId", 
securityGroupSearch.entity().getSecurityGroupId(), Op.EQ);
+            userVmSearchBuilder.join("securityGroup", securityGroupSearch, 
securityGroupSearch.entity().getInstanceId(), 
userVmSearchBuilder.entity().getId(), JoinBuilder.JoinType.INNER);
         }
 
         if (storageId != null) {
-            StoragePoolVO poolVO = _storagePoolDao.findById((Long) storageId);
-            if (poolVO.getPoolType() == 
Storage.StoragePoolType.DatastoreCluster) {
-                sb.and("poolId", sb.entity().getPoolId(), 
SearchCriteria.Op.IN);
+            SearchBuilder<VolumeVO> volumeSearch = 
volumeDao.createSearchBuilder();
+            if 
(pool.getPoolType().equals(Storage.StoragePoolType.DatastoreCluster)) {
+                volumeSearch.and("storagePoolId", 
volumeSearch.entity().getPoolId(), Op.IN);
             } else {
-                sb.and("poolId", sb.entity().getPoolId(), 
SearchCriteria.Op.EQ);
+                volumeSearch.and("storagePoolId", 
volumeSearch.entity().getPoolId(), Op.EQ);
             }
+            userVmSearchBuilder.join("volume", volumeSearch, 
volumeSearch.entity().getInstanceId(), userVmSearchBuilder.entity().getId(), 
JoinBuilder.JoinType.INNER);
         }
 
-        if (affinityGroupId != null) {
-            sb.and("affinityGroupId", sb.entity().getAffinityGroupId(), 
SearchCriteria.Op.EQ);
+        if (tags != null && !tags.isEmpty()) {
+            SearchBuilder<ResourceTagVO> resourceTagSearch = 
resourceTagDao.createSearchBuilder();
+            resourceTagSearch.and("resourceType", 
resourceTagSearch.entity().getResourceType(), Op.EQ);
+            resourceTagSearch.and().op();
+            for (int count = 0; count < tags.size(); count++) {
+                if (count == 0) {
+                    resourceTagSearch.op("tagKey" + String.valueOf(count), 
resourceTagSearch.entity().getKey(), Op.EQ);
+                } else {
+                    resourceTagSearch.or().op("tagKey" + 
String.valueOf(count), resourceTagSearch.entity().getKey(), Op.EQ);
+                }
+                resourceTagSearch.and("tagValue" + String.valueOf(count), 
resourceTagSearch.entity().getValue(), Op.EQ);
+                resourceTagSearch.cp();
+            }
+            resourceTagSearch.cp();
+
+            userVmSearchBuilder.join("tags", resourceTagSearch, 
resourceTagSearch.entity().getResourceId(), 
userVmSearchBuilder.entity().getId(), JoinBuilder.JoinType.INNER);
         }
 
         if (keyPairName != null) {
-            sb.and("keyPairName", sb.entity().getKeypairNames(), 
SearchCriteria.Op.FIND_IN_SET);
+            SearchBuilder<UserVmDetailVO> vmDetailSearchKeys = 
userVmDetailsDao.createSearchBuilder();
+            SearchBuilder<UserVmDetailVO> vmDetailSearchVmIds = 
userVmDetailsDao.createSearchBuilder();
+            vmDetailSearchKeys.and(vmDetailSearchKeys.entity().getName(), 
Op.EQ).values(SSH_PUBLIC_KEY);
+
+            SearchBuilder<SSHKeyPairVO> sshKeyPairSearch = 
sshKeyPairDao.createSearchBuilder();
+            sshKeyPairSearch.and("keyPairName", 
sshKeyPairSearch.entity().getName(), Op.EQ);
+
+            sshKeyPairSearch.join("keyPairToDetailValueJoin", 
vmDetailSearchKeys, vmDetailSearchKeys.entity().getValue(), 
sshKeyPairSearch.entity().getPublicKey(), JoinBuilder.JoinType.INNER);
+            userVmSearchBuilder.join("userVmToDetailJoin", 
vmDetailSearchVmIds, vmDetailSearchVmIds.entity().getResourceId(), 
userVmSearchBuilder.entity().getId(), JoinBuilder.JoinType.INNER);
+            userVmSearchBuilder.join("userVmToKeyPairJoin", sshKeyPairSearch, 
sshKeyPairSearch.entity().getAccountId(), 
userVmSearchBuilder.entity().getAccountId(), JoinBuilder.JoinType.INNER);
         }
 
-        if (!isRootAdmin) {
-            sb.and("displayVm", sb.entity().isDisplayVm(), 
SearchCriteria.Op.EQ);
+        if (keyword != null) {
+            userVmSearchBuilder.and().op("keywordDisplayName", 
userVmSearchBuilder.entity().getDisplayName(), Op.LIKE);
+            userVmSearchBuilder.or("keywordName", 
userVmSearchBuilder.entity().getHostName(), Op.LIKE);
+            userVmSearchBuilder.or("keywordState", 
userVmSearchBuilder.entity().getState(), Op.EQ);
+            if (isRootAdmin) {
+                userVmSearchBuilder.or("keywordInstanceName", 
userVmSearchBuilder.entity().getInstanceName(), Op.LIKE );
+            }
+            userVmSearchBuilder.cp();
         }
 
-        if (securityGroupId != null) {
-            sb.and("securityGroupId", sb.entity().getSecurityGroupId(), 
SearchCriteria.Op.EQ);
+        if (backupOfferingId != null) {
+            SearchBuilder<BackupOfferingVO> backupOfferingSearch = 
backupOfferingDao.createSearchBuilder();
+            backupOfferingSearch.and("backupOfferingId", 
backupOfferingSearch.entity().getId(), Op.EQ);
+            userVmSearchBuilder.join("backupOffering", backupOfferingSearch, 
backupOfferingSearch.entity().getId(), 
userVmSearchBuilder.entity().getBackupOfferingId(), JoinBuilder.JoinType.INNER);
         }
 
         if (autoScaleVmGroupId != null) {
-            sb.and("autoScaleVmGroupId", sb.entity().getAutoScaleVmGroupId(), 
SearchCriteria.Op.EQ);
+            SearchBuilder<AutoScaleVmGroupVmMapVO> autoScaleMapSearch = 
autoScaleVmGroupVmMapDao.createSearchBuilder();
+            autoScaleMapSearch.and("autoScaleVmGroupId", 
autoScaleMapSearch.entity().getVmGroupId(), Op.EQ);
+            userVmSearchBuilder.join("autoScaleVmGroup", autoScaleMapSearch, 
autoScaleMapSearch.entity().getInstanceId(), 
userVmSearchBuilder.entity().getId(), JoinBuilder.JoinType.INNER);
         }
 
-        // populate the search criteria with the values passed in
-        SearchCriteria<UserVmJoinVO> sc = sb.create();
-
-        // building ACL condition
-        _accountMgr.buildACLViewSearchCriteria(sc, domainId, isRecursive, 
permittedAccounts, listProjectResourcesCriteria);
-
-        if (tags != null && !tags.isEmpty()) {
-            SearchCriteria<UserVmJoinVO> tagSc = 
_userVmJoinDao.createSearchCriteria();
-            for (Map.Entry<String, String> entry : tags.entrySet()) {
-                SearchCriteria<UserVmJoinVO> tsc = 
_userVmJoinDao.createSearchCriteria();
-                tsc.addAnd("tagKey", SearchCriteria.Op.EQ, entry.getKey());
-                tsc.addAnd("tagValue", SearchCriteria.Op.EQ, entry.getValue());
-                tagSc.addOr("tagKey", SearchCriteria.Op.SC, tsc);
-            }
-            sc.addAnd("tagKey", SearchCriteria.Op.SC, tagSc);
-        }
+        SearchCriteria<UserVmVO> userVmSearchCriteria = 
userVmSearchBuilder.create();
+        accountMgr.buildACLSearchCriteria(userVmSearchCriteria, domainId, 
isRecursive, permittedAccounts, listProjectResourcesCriteria);
 
-        if (groupId != null && (Long)groupId != -1) {
-            sc.setParameters("instanceGroupId", groupId);
+        if (serviceOfferingId != null) {
+            userVmSearchCriteria.setParameters("serviceOfferingId", 
serviceOfferingId);
         }
 
-        if (keyword != null) {
-            SearchCriteria<UserVmJoinVO> ssc = 
_userVmJoinDao.createSearchCriteria();
-            String likeKeyword = String.format("%%%s%%", keyword);
-            ssc.addOr("displayName", SearchCriteria.Op.LIKE, likeKeyword);
-            ssc.addOr("name", SearchCriteria.Op.LIKE, likeKeyword);
-            if (isRootAdmin) {
-                ssc.addOr("instanceName", SearchCriteria.Op.LIKE, likeKeyword);
+        if (state != null) {
+            if (state.equalsIgnoreCase("present")) {
+                userVmSearchCriteria.setParameters("stateNIN", "Destroyed", 
"Expunging");
+            } else {
+                userVmSearchCriteria.setParameters("stateEQ", state);
             }
-            ssc.addOr("ipAddress", SearchCriteria.Op.LIKE, likeKeyword);
-            ssc.addOr("publicIpAddress", SearchCriteria.Op.LIKE, likeKeyword);
-            ssc.addOr("ip6Address", SearchCriteria.Op.LIKE, likeKeyword);
-            ssc.addOr("state", SearchCriteria.Op.EQ, keyword);
-            sc.addAnd("displayName", SearchCriteria.Op.SC, ssc);
         }
 
-        if (serviceOffId != null) {
-            sc.setParameters("serviceOfferingId", serviceOffId);
+        if (hypervisor != null) {
+            userVmSearchCriteria.setParameters("hypervisorType", hypervisor);
         }
 
-        if (backupOfferingId != null) {
-            sc.setParameters("backupOfferingId", backupOfferingId);
+        // Don't show Destroyed and Expunging vms to the end user if the 
AllowUserViewDestroyedVM flag is not set.
+        if (!isAdmin && 
!AllowUserViewDestroyedVM.valueIn(caller.getAccountId())) {
+            userVmSearchCriteria.setParameters("stateNIN", "Destroyed", 
"Expunging");
         }
 
-        if (securityGroupId != null) {
-            sc.setParameters("securityGroupId", securityGroupId);
+        if (zoneId != null) {
+            userVmSearchCriteria.setParameters("dataCenterId", zoneId);
         }
 
-        if (autoScaleVmGroupId != null) {
-            sc.setParameters("autoScaleVmGroupId", autoScaleVmGroupId);
+        if (templateId != null) {
+            userVmSearchCriteria.setParameters("templateId", templateId);
         }
 
         if (display != null) {
-            sc.setParameters("display", display);
+            userVmSearchCriteria.setParameters("display", display);
         }
 
         if (isHaEnabled != null) {
-            sc.setParameters("haEnabled", isHaEnabled);
+            userVmSearchCriteria.setParameters("haEnabled", isHaEnabled);
         }
 
-        if (ids != null && !ids.isEmpty()) {
-            sc.setParameters("idIN", ids.toArray());
+        if (isoId != null) {
+            userVmSearchCriteria.setParameters("isoId", isoId);
         }
 
-        if (templateId != null) {
-            sc.setParameters("templateId", templateId);
+        if (ids != null && !ids.isEmpty()) {
+            userVmSearchCriteria.setParameters("idIN", ids.toArray());
         }
 
-        if (isoId != null) {
-            sc.setParameters("isoId", isoId);
+        if (vmHostName != null) {
+            userVmSearchCriteria.setParameters("name", vmHostName);
         }
 
-        if (userId != null) {
-            sc.setParameters("userId", userId);
+        if (groupId != null && groupId != -1) {
+            userVmSearchCriteria.setJoinParameters("instanceGroup","groupId", 
groupId);
         }
 
-        if (networkId != null) {
-            sc.setParameters("networkId", networkId);
+        if (affinityGroupId != null && affinityGroupId != -1) {
+            userVmSearchCriteria.setJoinParameters("affinityGroup", 
"affinityGroupId", affinityGroupId);
         }
 
-        if (vpcId != null && networkId == null) {
-            sc.setParameters("vpcId", vpcId);
+        if (securityGroupId != null && securityGroupId != -1) {
+            
userVmSearchCriteria.setJoinParameters("securityGroup","securityGroupId", 
securityGroupId);
         }
 
-        if (name != null) {
-            sc.setParameters("name", name);
+        if (keyword != null) {
+            String keywordMatch = "%" + keyword + "%";
+            userVmSearchCriteria.setParameters("keywordDisplayName", 
keywordMatch);
+            userVmSearchCriteria.setParameters("keywordName", keywordMatch);
+            userVmSearchCriteria.setParameters("keywordState", keyword);
+            if (isRootAdmin) {
+                userVmSearchCriteria.setParameters("keywordInstanceName", 
keywordMatch);
+            }
         }
 
-        if (state != null) {
-            if (state.equalsIgnoreCase("present")) {
-                sc.setParameters("stateNIN", "Destroyed", "Expunging");
-            } else {
-                sc.setParameters("stateEQ", state);
+        if (tags != null && !tags.isEmpty()) {
+            int count = 0;
+            userVmSearchCriteria.setJoinParameters("tags","resourceType", 
ResourceObjectType.UserVm);
+            for (Map.Entry<String, String> entry : tags.entrySet()) {
+                userVmSearchCriteria.setJoinParameters("tags", "tagKey" + 
String.valueOf(count), entry.getKey());
+                userVmSearchCriteria.setJoinParameters("tags", "tagValue" + 
String.valueOf(count), entry.getValue());
+                count++;
             }
         }
 
-        if (hypervisor != null) {
-            sc.setParameters("hypervisorType", hypervisor);
+        if (keyPairName != null) {
+            userVmSearchCriteria.setJoinParameters("userVmToKeyPairJoin", 
"keyPairName", keyPairName);
         }
 
-        // Don't show Destroyed and Expunging vms to the end user if the 
AllowUserViewDestroyedVM flag is not set.
-        if (!isAdmin && 
!AllowUserViewDestroyedVM.valueIn(caller.getAccountId())) {
-            sc.setParameters("stateNIN", "Destroyed", "Expunging");
+        if (networkId != null) {
+            userVmSearchCriteria.setJoinParameters("nic", "networkId", 
networkId);
         }
 
-        if (zoneId != null) {
-            sc.setParameters("dataCenterId", zoneId);
+        if (vpcId != null) {
+            userVmSearchCriteria.getJoin("nic").setJoinParameters("vpc", 
"vpcId", vpcId);
         }
 
-        if (affinityGroupId != null) {
-            sc.setParameters("affinityGroupId", affinityGroupId);
+        if (userId != null) {
+            userVmSearchCriteria.setParameters("userId", userId);
         }
 
-        if (keyPairName != null) {
-            sc.setParameters("keyPairName", keyPairName);
+        if (backupOfferingId != null) {
+            userVmSearchCriteria.setJoinParameters("backupOffering", 
"backupOfferingId", backupOfferingId);
         }
 
-        if (_accountMgr.isRootAdmin(caller.getId())) {
-            if (pod != null) {
-                sc.setParameters("podId", pod);
+        if (autoScaleVmGroupId != null) {
+            userVmSearchCriteria.setJoinParameters("autoScaleVmGroup", 
"autoScaleVmGroupId", autoScaleVmGroupId);
+        }
 
+        if (isRootAdmin) {
+            if (podId != null) {
+                userVmSearchCriteria.setParameters("podId", podId);
                 if (state == null) {
-                    sc.setParameters("stateNEQ", "Destroyed");
+                    userVmSearchCriteria.setParameters("stateNEQ", 
"Destroyed");
                 }
             }
 
             if (clusterId != null) {
-                sc.setParameters("clusterId", clusterId);
-                List<HostJoinVO> hosts = 
_hostJoinDao.findByClusterId((Long)clusterId, Host.Type.Routing);
+                List<HostJoinVO> hosts = 
hostJoinDao.findByClusterId(clusterId, Host.Type.Routing);
+                if (CollectionUtils.isEmpty(hosts)) {
+                    // cluster has no hosts, so we cannot find VMs, cancel 
search.
+                    return new Pair<>(new ArrayList<>(), 0);
+                }
                 List<Long> hostIds = 
hosts.stream().map(HostJoinVO::getId).collect(Collectors.toList());
-                sc.setParameters("clusterHostId", hostIds.toArray());
-                sc.setParameters("clusterLastHostId", hostIds.toArray());
+                userVmSearchCriteria.setParameters("hostIdIn", 
hostIds.toArray());
+                userVmSearchCriteria.setParameters("lastHostIdIn", 
hostIds.toArray());
             }
 
             if (hostId != null) {
-                sc.setParameters("hostIdEQ", hostId);
+                userVmSearchCriteria.setParameters("hostId", hostId);
             }
 
-            if (storageId != null) {
-                StoragePoolVO poolVO = _storagePoolDao.findById((Long) 
storageId);
-                if (poolVO.getPoolType() == 
Storage.StoragePoolType.DatastoreCluster) {
-                    List<StoragePoolVO> childDatastores = 
_storagePoolDao.listChildStoragePoolsInDatastoreCluster((Long) storageId);
+            if (storageId != null && pool != null) {
+                if 
(pool.getPoolType().equals(Storage.StoragePoolType.DatastoreCluster)) {
+                    List<StoragePoolVO> childDatastores = 
storagePoolDao.listChildStoragePoolsInDatastoreCluster(storageId);
                     List<Long> childDatastoreIds = 
childDatastores.stream().map(mo -> mo.getId()).collect(Collectors.toList());
-                    sc.setParameters("poolId", childDatastoreIds.toArray());
+                    userVmSearchCriteria.setJoinParameters("volume", 
"storagePoolId", childDatastoreIds.toArray());
                 } else {
-                    sc.setParameters("poolId", storageId);
+                    userVmSearchCriteria.setJoinParameters("volume", 
"storagePoolId", storageId);
                 }
             }
+        } else {
+            userVmSearchCriteria.setParameters("displayVm", 1);
         }
 
-        if (!isRootAdmin) {
-            sc.setParameters("displayVm", 1);
-        }
-        // search vm details by ids
-        Pair<List<UserVmJoinVO>, Integer> uniqueVmPair = 
_userVmJoinDao.searchAndDistinctCount(sc, searchFilter);
+        Pair<List<UserVmVO>, Integer> uniqueVmPair = 
userVmDao.searchAndDistinctCount(userVmSearchCriteria, searchFilter, new 
String[]{"vm_instance.id"});
         Integer count = uniqueVmPair.second();
-        if (count.intValue() == 0) {
-            // handle empty result cases
-            return uniqueVmPair;
-        }
-        List<UserVmJoinVO> uniqueVms = uniqueVmPair.first();
-        Long[] vmIds = new Long[uniqueVms.size()];
-        int i = 0;
-        for (UserVmJoinVO v : uniqueVms) {
-            vmIds[i++] = v.getId();
-        }
-        List<UserVmJoinVO> vms = _userVmJoinDao.searchByIds(vmIds);
-        return new Pair<>(vms, count);
+
+        List<Long> vmIds = 
uniqueVmPair.first().stream().map(VMInstanceVO::getId).collect(Collectors.toList());
+        return new Pair<>(vmIds, count);
     }
 
     @Override
@@ -1363,16 +1485,16 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
         Map<String, String> tags = cmd.getTags();
 
         if (instanceId != null) {
-            UserVmVO userVM = _userVmDao.findById(instanceId);
+            UserVmVO userVM = userVmDao.findById(instanceId);
             if (userVM == null) {
                 throw new InvalidParameterValueException("Unable to list 
network groups for virtual machine instance " + instanceId + "; instance not 
found.");
             }
-            _accountMgr.checkAccess(caller, null, true, userVM);
+            accountMgr.checkAccess(caller, null, true, userVM);
             return listSecurityGroupRulesByVM(instanceId.longValue(), 
cmd.getStartIndex(), cmd.getPageSizeVal());
         }
 
         Ternary<Long, Boolean, ListProjectResourcesCriteria> 
domainIdRecursiveListProject = new Ternary<Long, Boolean, 
ListProjectResourcesCriteria>(cmd.getDomainId(), cmd.isRecursive(), null);
-        _accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), 
cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, 
cmd.listAll(), false);
+        accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), 
cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, 
cmd.listAll(), false);
         Long domainId = domainIdRecursiveListProject.first();
         Boolean isRecursive = domainIdRecursiveListProject.second();
         ListProjectResourcesCriteria listProjectResourcesCriteria = 
domainIdRecursiveListProject.third();
@@ -1381,13 +1503,13 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
         SearchBuilder<SecurityGroupJoinVO> sb = 
_securityGroupJoinDao.createSearchBuilder();
         sb.select(null, Func.DISTINCT, sb.entity().getId()); // select distinct
         // ids
-        _accountMgr.buildACLViewSearchBuilder(sb, domainId, isRecursive, 
permittedAccounts, listProjectResourcesCriteria);
+        accountMgr.buildACLViewSearchBuilder(sb, domainId, isRecursive, 
permittedAccounts, listProjectResourcesCriteria);
 
         sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
         sb.and("name", sb.entity().getName(), SearchCriteria.Op.EQ);
 
         SearchCriteria<SecurityGroupJoinVO> sc = sb.create();
-        _accountMgr.buildACLViewSearchCriteria(sc, domainId, isRecursive, 
permittedAccounts, listProjectResourcesCriteria);
+        accountMgr.buildACLViewSearchCriteria(sc, domainId, isRecursive, 
permittedAccounts, listProjectResourcesCriteria);
 
         if (id != null) {
             sc.setParameters("id", id);
@@ -1435,7 +1557,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
 
     private Pair<List<SecurityGroupJoinVO>, Integer> 
listSecurityGroupRulesByVM(long vmId, long pageInd, long pageSize) {
         Filter sf = new Filter(SecurityGroupVMMapVO.class, null, true, 
pageInd, pageSize);
-        Pair<List<SecurityGroupVMMapVO>, Integer> sgVmMappingPair = 
_securityGroupVMMapDao.listByInstanceId(vmId, sf);
+        Pair<List<SecurityGroupVMMapVO>, Integer> sgVmMappingPair = 
securityGroupVMMapDao.listByInstanceId(vmId, sf);
         Integer count = sgVmMappingPair.second();
         if (count.intValue() == 0) {
             // handle empty result cases
@@ -1499,7 +1621,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
         List<Long> permittedAccounts = new ArrayList<Long>();
 
         Ternary<Long, Boolean, ListProjectResourcesCriteria> 
domainIdRecursiveListProject = new Ternary<Long, Boolean, 
ListProjectResourcesCriteria>(cmd.getDomainId(), cmd.isRecursive(), null);
-        _accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), 
cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, 
cmd.listAll(), false);
+        accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), 
cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, 
cmd.listAll(), false);
         Long domainId = domainIdRecursiveListProject.first();
         Boolean isRecursive = domainIdRecursiveListProject.second();
         ListProjectResourcesCriteria listProjectResourcesCriteria = 
domainIdRecursiveListProject.third();
@@ -1511,7 +1633,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
         // number of
         // records with
         // pagination
-        _accountMgr.buildACLViewSearchBuilder(sb, domainId, isRecursive, 
permittedAccounts, listProjectResourcesCriteria);
+        accountMgr.buildACLViewSearchBuilder(sb, domainId, isRecursive, 
permittedAccounts, listProjectResourcesCriteria);
 
         sb.and("name", sb.entity().getInstanceName(), SearchCriteria.Op.EQ);
         sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
@@ -1559,7 +1681,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
         }
 
         SearchCriteria<DomainRouterJoinVO> sc = sb.create();
-        _accountMgr.buildACLViewSearchCriteria(sc, domainId, isRecursive, 
permittedAccounts, listProjectResourcesCriteria);
+        accountMgr.buildACLViewSearchCriteria(sc, domainId, isRecursive, 
permittedAccounts, listProjectResourcesCriteria);
 
         if (keyword != null) {
             SearchCriteria<DomainRouterJoinVO> ssc = 
_routerJoinDao.createSearchCriteria();
@@ -1674,17 +1796,17 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
         sb.select(null, Func.DISTINCT, sb.entity().getId()); // select distinct
         // ids
 
-        if (_accountMgr.isAdmin(caller.getId())) {
+        if (accountMgr.isAdmin(caller.getId())) {
             if (domainId != null) {
                 DomainVO domain = _domainDao.findById(domainId);
                 if (domain == null) {
                     throw new InvalidParameterValueException("Domain id=" + 
domainId + " doesn't exist in the system");
                 }
 
-                _accountMgr.checkAccess(caller, domain);
+                accountMgr.checkAccess(caller, domain);
 
                 if (accountName != null) {
-                    Account owner = 
_accountMgr.getActiveAccountByName(accountName, domainId);
+                    Account owner = 
accountMgr.getActiveAccountByName(accountName, domainId);
                     if (owner == null) {
                         throw new InvalidParameterValueException("Unable to 
find account " + accountName + " in domain " + domainId);
                     }
@@ -1725,10 +1847,10 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
             userId = user.getId();
         }
 
-        if (domainId == null && accountId == null && 
(_accountMgr.isNormalUser(caller.getId()) || !listAll)) {
+        if (domainId == null && accountId == null && 
(accountMgr.isNormalUser(caller.getId()) || !listAll)) {
             accountId = caller.getId();
             userId = user.getId();
-        } else if (_accountMgr.isDomainAdmin(caller.getId()) || (isRecursive 
&& !listAll)) {
+        } else if (accountMgr.isDomainAdmin(caller.getId()) || (isRecursive && 
!listAll)) {
             DomainVO domain = _domainDao.findById(caller.getDomainId());
             path = domain.getPath();
         }
@@ -1839,14 +1961,14 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
         List<Long> permittedAccounts = new ArrayList<Long>();
 
         Ternary<Long, Boolean, ListProjectResourcesCriteria> 
domainIdRecursiveListProject = new Ternary<Long, Boolean, 
ListProjectResourcesCriteria>(domainId, isRecursive, null);
-        _accountMgr.buildACLSearchParameters(caller, id, accountName, 
projectId, permittedAccounts, domainIdRecursiveListProject, listAll, true);
+        accountMgr.buildACLSearchParameters(caller, id, accountName, 
projectId, permittedAccounts, domainIdRecursiveListProject, listAll, true);
         domainId = domainIdRecursiveListProject.first();
         isRecursive = domainIdRecursiveListProject.second();
         ListProjectResourcesCriteria listProjectResourcesCriteria = 
domainIdRecursiveListProject.third();
 
         Filter searchFilter = new Filter(ProjectInvitationJoinVO.class, "id", 
true, startIndex, pageSizeVal);
         SearchBuilder<ProjectInvitationJoinVO> sb = 
_projectInvitationJoinDao.createSearchBuilder();
-        _accountMgr.buildACLViewSearchBuilder(sb, domainId, isRecursive, 
permittedAccounts, listProjectResourcesCriteria);
+        accountMgr.buildACLViewSearchBuilder(sb, domainId, isRecursive, 
permittedAccounts, listProjectResourcesCriteria);
         ProjectInvitation invitation = 
projectInvitationDao.findByUserIdProjectId(callingUser.getId(), 
callingUser.getAccountId(), projectId == null ? -1 : projectId);
         sb.and("projectId", sb.entity().getProjectId(), SearchCriteria.Op.EQ);
         sb.and("state", sb.entity().getState(), SearchCriteria.Op.EQ);
@@ -1854,7 +1976,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
         sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
 
         SearchCriteria<ProjectInvitationJoinVO> sc = sb.create();
-        _accountMgr.buildACLViewSearchCriteria(sc, domainId, isRecursive, 
permittedAccounts, listProjectResourcesCriteria);
+        accountMgr.buildACLViewSearchCriteria(sc, domainId, isRecursive, 
permittedAccounts, listProjectResourcesCriteria);
 
         if (projectId != null) {
             sc.setParameters("projectId", projectId);
@@ -1917,7 +2039,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
 
         // verify permissions - only accounts belonging to the project can list
         // project's account
-        if (!_accountMgr.isAdmin(caller.getId()) && 
_projectAccountDao.findByProjectIdUserId(projectId, callingUser.getAccountId(), 
callingUser.getId()) == null &&
+        if (!accountMgr.isAdmin(caller.getId()) && 
_projectAccountDao.findByProjectIdUserId(projectId, callingUser.getAccountId(), 
callingUser.getId()) == null &&
         _projectAccountDao.findByProjectIdAccountId(projectId, 
caller.getAccountId()) == null) {
             throw new PermissionDeniedException("Account " + caller + " is not 
authorized to list users of the project id=" + projectId);
         }
@@ -1973,7 +2095,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
 
     public Pair<List<HostJoinVO>, Integer> 
searchForServersInternal(ListHostsCmd cmd) {
 
-        Long zoneId = 
_accountMgr.checkAccessAndSpecifyAuthority(CallContext.current().getCallingAccount(),
 cmd.getZoneId());
+        Long zoneId = 
accountMgr.checkAccessAndSpecifyAuthority(CallContext.current().getCallingAccount(),
 cmd.getZoneId());
         Object name = cmd.getHostName();
         Object type = cmd.getType();
         Object state = cmd.getState();
@@ -1991,7 +2113,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
 
         Filter searchFilter = new Filter(HostJoinVO.class, "id", Boolean.TRUE, 
startIndex, pageSize);
 
-        SearchBuilder<HostJoinVO> sb = _hostJoinDao.createSearchBuilder();
+        SearchBuilder<HostJoinVO> sb = hostJoinDao.createSearchBuilder();
         sb.select(null, Func.DISTINCT, sb.entity().getId()); // select distinct
         // ids
         sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
@@ -2021,7 +2143,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
         SearchCriteria<HostJoinVO> sc = sb.create();
 
         if (keyword != null) {
-            SearchCriteria<HostJoinVO> ssc = 
_hostJoinDao.createSearchCriteria();
+            SearchCriteria<HostJoinVO> ssc = 
hostJoinDao.createSearchCriteria();
             ssc.addOr("name", SearchCriteria.Op.LIKE, "%" + keyword + "%");
             ssc.addOr("status", SearchCriteria.Op.LIKE, "%" + keyword + "%");
             ssc.addOr("type", SearchCriteria.Op.LIKE, "%" + keyword + "%");
@@ -2072,7 +2194,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
             sc.setParameters("hypervisor_type", hypervisorType);
         }
         // search host details by ids
-        Pair<List<HostJoinVO>, Integer> uniqueHostPair = 
_hostJoinDao.searchAndCount(sc, searchFilter);
+        Pair<List<HostJoinVO>, Integer> uniqueHostPair = 
hostJoinDao.searchAndCount(sc, searchFilter);
         Integer count = uniqueHostPair.second();
         if (count.intValue() == 0) {
             // handle empty result cases
@@ -2084,7 +2206,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
         for (HostJoinVO v : uniqueHosts) {
             hostIds[i++] = v.getId();
         }
-        List<HostJoinVO> hosts = _hostJoinDao.searchByIds(hostIds);
+        List<HostJoinVO> hosts = hostJoinDao.searchByIds(hostIds);
         return new Pair<List<HostJoinVO>, Integer>(hosts, count);
 
     }
@@ -2101,7 +2223,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
 
         ResponseView respView = cmd.getResponseView();
         Account account = CallContext.current().getCallingAccount();
-        if (_accountMgr.isRootAdmin(account.getAccountId())) {
+        if (accountMgr.isRootAdmin(account.getAccountId())) {
             respView = ResponseView.Full;
         }
 
@@ -2160,7 +2282,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
         List<Long> ids = getIdsListFromCmd(cmd.getId(), cmd.getIds());
 
         Ternary<Long, Boolean, ListProjectResourcesCriteria> 
domainIdRecursiveListProject = new Ternary<Long, Boolean, 
ListProjectResourcesCriteria>(cmd.getDomainId(), cmd.isRecursive(), null);
-        _accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), 
cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, 
cmd.listAll(), false);
+        accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), 
cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, 
cmd.listAll(), false);
         Long domainId = domainIdRecursiveListProject.first();
         Boolean isRecursive = domainIdRecursiveListProject.second();
         ListProjectResourcesCriteria listProjectResourcesCriteria = 
domainIdRecursiveListProject.third();
@@ -2175,7 +2297,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
         // number of
         // records with
         // pagination
-        _accountMgr.buildACLViewSearchBuilder(sb, domainId, isRecursive, 
permittedAccounts, listProjectResourcesCriteria);
+        accountMgr.buildACLViewSearchBuilder(sb, domainId, isRecursive, 
permittedAccounts, listProjectResourcesCriteria);
 
         sb.and("name", sb.entity().getName(), SearchCriteria.Op.EQ);
         sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
@@ -2186,7 +2308,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
         sb.and("dataCenterId", sb.entity().getDataCenterId(), 
SearchCriteria.Op.EQ);
         sb.and("podId", sb.entity().getPodId(), SearchCriteria.Op.EQ);
         if (storageId != null) {
-            StoragePoolVO poolVO = _storagePoolDao.findByUuid(storageId);
+            StoragePoolVO poolVO = storagePoolDao.findByUuid(storageId);
             if (poolVO.getPoolType() == 
Storage.StoragePoolType.DatastoreCluster) {
                 sb.and("storageId", sb.entity().getPoolUuid(), 
SearchCriteria.Op.IN);
             } else {
@@ -2210,7 +2332,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
 
         // now set the SC criteria...
         SearchCriteria<VolumeJoinVO> sc = sb.create();
-        _accountMgr.buildACLViewSearchCriteria(sc, domainId, isRecursive, 
permittedAccounts, listProjectResourcesCriteria);
+        accountMgr.buildACLViewSearchCriteria(sc, domainId, isRecursive, 
permittedAccounts, listProjectResourcesCriteria);
 
         if (keyword != null) {
             SearchCriteria<VolumeJoinVO> ssc = 
_volumeJoinDao.createSearchCriteria();
@@ -2269,9 +2391,9 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
         }
 
         if (storageId != null) {
-            StoragePoolVO poolVO = _storagePoolDao.findByUuid(storageId);
+            StoragePoolVO poolVO = storagePoolDao.findByUuid(storageId);
             if (poolVO.getPoolType() == 
Storage.StoragePoolType.DatastoreCluster) {
-                List<StoragePoolVO> childDatastores = 
_storagePoolDao.listChildStoragePoolsInDatastoreCluster(poolVO.getId());
+                List<StoragePoolVO> childDatastores = 
storagePoolDao.listChildStoragePoolsInDatastoreCluster(poolVO.getId());
                 List<String> childDatastoreIds = 
childDatastores.stream().map(mo -> mo.getUuid()).collect(Collectors.toList());
                 sc.setParameters("storageId", childDatastoreIds.toArray());
             } else {
@@ -2285,7 +2407,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
 
         if (state != null) {
             sc.setParameters("state", state);
-        } else if (!_accountMgr.isAdmin(caller.getId())) {
+        } else if (!accountMgr.isAdmin(caller.getId())) {
             sc.setParameters("stateNEQ", Volume.State.Expunged);
         }
 
@@ -2307,7 +2429,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
     }
 
     private boolean shouldListSystemVms(ListVolumesCmd cmd, Long callerId) {
-        return Boolean.TRUE.equals(cmd.getListSystemVms()) && 
_accountMgr.isRootAdmin(callerId);
+        return Boolean.TRUE.equals(cmd.getListSystemVms()) && 
accountMgr.isRootAdmin(callerId);
     }
 
     @Override
@@ -2337,7 +2459,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
             if (domain == null) {
                 throw new InvalidParameterValueException("Domain id=" + 
domainId + " doesn't exist");
             }
-            _accountMgr.checkAccess(caller, domain);
+            accountMgr.checkAccess(caller, domain);
         } else {
             if (caller.getType() != Account.Type.ADMIN) {
                 domainId = caller.getDomainId();
@@ -2414,7 +2536,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
         String accountName = cmd.getSearchName();
         boolean isRecursive = cmd.isRecursive();
         boolean listAll = cmd.listAll();
-        boolean callerIsAdmin = _accountMgr.isAdmin(caller.getId());
+        boolean callerIsAdmin = accountMgr.isAdmin(caller.getId());
         Account account;
         Domain domain = null;
 
@@ -2426,7 +2548,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
                 throw new InvalidParameterValueException("Domain id=" + 
domainId + " doesn't exist");
             }
             // ... and check access rights.
-            _accountMgr.checkAccess(caller, domain);
+            accountMgr.checkAccess(caller, domain);
         }
 
         // if no "id" specified...
@@ -2449,7 +2571,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
             if (account == null || account.getId() == 
Account.ACCOUNT_ID_SYSTEM) {
                 throw new InvalidParameterValueException("Unable to find 
account by name " + accountName + " in domain " + domainId);
             }
-            _accountMgr.checkAccess(caller, null, true, account);
+            accountMgr.checkAccess(caller, null, true, account);
         } else {
             // if they specified an "id"...
             if (domainId == null) {
@@ -2460,7 +2582,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
             if (account == null || account.getId() == 
Account.ACCOUNT_ID_SYSTEM) {
                 throw new InvalidParameterValueException("Unable to find 
account by id " + accountId + (domainId == null ? "" : " in domain " + 
domainId));
             }
-            _accountMgr.checkAccess(caller, null, true, account);
+            accountMgr.checkAccess(caller, null, true, account);
         }
 
         Filter searchFilter = new Filter(AccountJoinVO.class, "id", true, 
cmd.getStartIndex(), cmd.getPageSizeVal());
@@ -2556,7 +2678,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
         List<Long> permittedAccounts = new ArrayList<Long>();
 
         Ternary<Long, Boolean, ListProjectResourcesCriteria> 
domainIdRecursiveListProject = new Ternary<Long, Boolean, 
ListProjectResourcesCriteria>(cmd.getDomainId(), cmd.isRecursive(), null);
-        _accountMgr.buildACLSearchParameters(caller, null, 
cmd.getAccountName(), null, permittedAccounts, domainIdRecursiveListProject, 
cmd.listAll(), false);
+        accountMgr.buildACLSearchParameters(caller, null, 
cmd.getAccountName(), null, permittedAccounts, domainIdRecursiveListProject, 
cmd.listAll(), false);
         Long domainId = domainIdRecursiveListProject.first();
         Boolean isRecursive = domainIdRecursiveListProject.second();
         ListProjectResourcesCriteria listProjectResourcesCriteria = 
domainIdRecursiveListProject.third();
@@ -2640,7 +2762,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
                     Map<String, String> caps = driver.getCapabilities();
                     if 
(Storage.StoragePoolType.NetworkFilesystem.toString().equals(poolResponse.getType())
 &&
                         
HypervisorType.VMware.toString().equals(poolResponse.getHypervisor())) {
-                        StoragePoolVO pool = 
_storagePoolDao.findPoolByUUID(poolResponse.getId());
+                        StoragePoolVO pool = 
storagePoolDao.findPoolByUUID(poolResponse.getId());
                         StoragePoolDetailVO detail = 
_storagePoolDetailsDao.findDetail(pool.getId(), 
Storage.Capability.HARDWARE_ACCELERATION.toString());
                         if (detail != null) {
                             
caps.put(Storage.Capability.HARDWARE_ACCELERATION.toString(), 
detail.getValue());
@@ -2659,7 +2781,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
         ScopeType scopeType = 
ScopeType.validateAndGetScopeType(cmd.getScope());
         StoragePoolStatus status = 
StoragePoolStatus.validateAndGetStatus(cmd.getStatus());
 
-        Long zoneId = 
_accountMgr.checkAccessAndSpecifyAuthority(CallContext.current().getCallingAccount(),
 cmd.getZoneId());
+        Long zoneId = 
accountMgr.checkAccessAndSpecifyAuthority(CallContext.current().getCallingAccount(),
 cmd.getZoneId());
         Long id = cmd.getId();
         String name = cmd.getStoragePoolName();
         String path = cmd.getPath();
@@ -2667,6 +2789,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
         Long cluster = cmd.getClusterId();
         String address = cmd.getIpAddress();
         String keyword = cmd.getKeyword();
+
         Long startIndex = cmd.getStartIndex();
         Long pageSize = cmd.getPageSizeVal();
 
@@ -2786,7 +2909,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
 
     private Pair<List<ImageStoreJoinVO>, Integer> 
searchForImageStoresInternal(ListImageStoresCmd cmd) {
 
-        Long zoneId = 
_accountMgr.checkAccessAndSpecifyAuthority(CallContext.current().getCallingAccount(),
 cmd.getZoneId());
+        Long zoneId = 
accountMgr.checkAccessAndSpecifyAuthority(CallContext.current().getCallingAccount(),
 cmd.getZoneId());
         Object id = cmd.getId();
         Object name = cmd.getStoreName();
         String provider = cmd.getProvider();
@@ -2870,7 +2993,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
 
     private Pair<List<ImageStoreJoinVO>, Integer> 
searchForCacheStoresInternal(ListSecondaryStagingStoresCmd cmd) {
 
-        Long zoneId = 
_accountMgr.checkAccessAndSpecifyAuthority(CallContext.current().getCallingAccount(),
 cmd.getZoneId());
+        Long zoneId = 
accountMgr.checkAccessAndSpecifyAuthority(CallContext.current().getCallingAccount(),
 cmd.getZoneId());
         Object id = cmd.getId();
         Object name = cmd.getStoreName();
         String provider = cmd.getProvider();
@@ -2967,7 +3090,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
         Object id = cmd.getId();
         Object keyword = cmd.getKeyword();
         Long domainId = cmd.getDomainId();
-        Boolean isRootAdmin = _accountMgr.isRootAdmin(account.getAccountId());
+        Boolean isRootAdmin = accountMgr.isRootAdmin(account.getAccountId());
         Boolean isRecursive = cmd.isRecursive();
         Long zoneId = cmd.getZoneId();
         Long volumeId = cmd.getVolumeId();
@@ -2977,7 +3100,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
         // if a domainId is provided, we just return the disk offering
         // associated with this domain
         if (domainId != null) {
-            if (_accountMgr.isRootAdmin(account.getId()) || 
isPermissible(account.getDomainId(), domainId)) {
+            if (accountMgr.isRootAdmin(account.getId()) || 
isPermissible(account.getDomainId(), domainId)) {
                 // check if the user's domain == do's domain || user's domain 
is
                 // a child of so's domain for non-root users
                 sc.addAnd("domainId", Op.FIND_IN_SET, 
String.valueOf(domainId));
@@ -2992,7 +3115,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
 
         // For non-root users, only return all offerings for the user's domain,
         // and everything above till root
-        if ((_accountMgr.isNormalUser(account.getId()) || 
_accountMgr.isDomainAdmin(account.getId())) || account.getType() == 
Account.Type.RESOURCE_DOMAIN_ADMIN) {
+        if ((accountMgr.isNormalUser(account.getId()) || 
accountMgr.isDomainAdmin(account.getId())) || account.getType() == 
Account.Type.RESOURCE_DOMAIN_ADMIN) {
             if (isRecursive) { // domain + all sub-domains
                 if (account.getType() == Account.Type.NORMAL) {
                     throw new InvalidParameterValueException("Only ROOT admins 
and Domain admins can list disk offerings with isrecursive=true");
@@ -3154,14 +3277,14 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
         Boolean encryptRoot = cmd.getEncryptRoot();
 
         SearchCriteria<ServiceOfferingJoinVO> sc = 
_srvOfferingJoinDao.createSearchCriteria();
-        if (!_accountMgr.isRootAdmin(caller.getId()) && isSystem) {
+        if (!accountMgr.isRootAdmin(caller.getId()) && isSystem) {
             throw new InvalidParameterValueException("Only ROOT admins can 
access system's offering");
         }
 
         // Keeping this logic consistent with domain specific zones
         // if a domainId is provided, we just return the so associated with 
this
         // domain
-        if (domainId != null && !_accountMgr.isRootAdmin(caller.getId())) {
+        if (domainId != null && !accountMgr.isRootAdmin(caller.getId())) {
             // check if the user's domain == so's domain || user's domain is a
             // child of so's domain
             if (!isPermissible(caller.getDomainId(), domainId)) {
@@ -3177,7 +3300,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
                 throw ex;
             }
 
-            _accountMgr.checkAccess(caller, null, true, vmInstance);
+            accountMgr.checkAccess(caller, null, true, vmInstance);
 
             currentVmOffering = 
_srvOfferingDao.findByIdIncludingRemoved(vmInstance.getId(), 
vmInstance.getServiceOfferingId());
             if (! currentVmOffering.isDynamic()) {
@@ -3202,8 +3325,8 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
                 Integer vmMemory = currentVmOffering.getRamSize();
                 Integer vmSpeed = currentVmOffering.getSpeed();
                 if ((vmCpu == null || vmMemory == null || vmSpeed == null) && 
VirtualMachine.Type.User.equals(vmInstance.getType())) {
-                    UserVmVO userVmVO = _userVmDao.findById(vmId);
-                    _userVmDao.loadDetails(userVmVO);
+                    UserVmVO userVmVO = userVmDao.findById(vmId);
+                    userVmDao.loadDetails(userVmVO);
                     Map<String, String> details = userVmVO.getDetails();
                     vmCpu = 
NumbersUtil.parseInt(details.get(ApiConstants.CPU_NUMBER), 0);
                     if (vmSpeed == null) {
@@ -3225,7 +3348,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
         }
 
         // boolean includePublicOfferings = false;
-        if ((_accountMgr.isNormalUser(caller.getId()) || 
_accountMgr.isDomainAdmin(caller.getId())) || caller.getType() == 
Account.Type.RESOURCE_DOMAIN_ADMIN) {
+        if ((accountMgr.isNormalUser(caller.getId()) || 
accountMgr.isDomainAdmin(caller.getId())) || caller.getType() == 
Account.Type.RESOURCE_DOMAIN_ADMIN) {
             // For non-root users.
             if (isSystem) {
                 throw new InvalidParameterValueException("Only root admins can 
access system's offering");
@@ -3411,7 +3534,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
 
         SearchBuilder<DataCenterJoinVO> sb = _dcJoinDao.createSearchBuilder();
         if (resourceTags != null && !resourceTags.isEmpty()) {
-            SearchBuilder<ResourceTagVO> tagSearch = 
_resourceTagDao.createSearchBuilder();
+            SearchBuilder<ResourceTagVO> tagSearch = 
resourceTagDao.createSearchBuilder();
             for (int count = 0; count < resourceTags.size(); count++) {
                 tagSearch.or().op("key" + String.valueOf(count), 
tagSearch.entity().getKey(), SearchCriteria.Op.EQ);
                 tagSearch.and("value" + String.valueOf(count), 
tagSearch.entity().getValue(), SearchCriteria.Op.EQ);
@@ -3455,7 +3578,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
                 // only list zones associated // with this domain, private zone
                 sc.addAnd("domainId", SearchCriteria.Op.EQ, domainId);
 
-                if (_accountMgr.isNormalUser(account.getId())) {
+                if (accountMgr.isNormalUser(account.getId())) {
                     // accountId == null (zones dedicated to a domain) or
                     // accountId = caller
                     SearchCriteria<DataCenterJoinVO> sdc = 
_dcJoinDao.createSearchCriteria();
@@ -3465,7 +3588,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
                     sc.addAnd("accountId", SearchCriteria.Op.SC, sdc);
                 }
 
-            } else if (_accountMgr.isNormalUser(account.getId())) {
+            } else if (accountMgr.isNormalUser(account.getId())) {
                 // it was decided to return all zones for the user's domain, 
and
                 // everything above till root
                 // list all zones belonging to this domain, and all of its
@@ -3510,7 +3633,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
                     sdc.addAnd("id", SearchCriteria.Op.NIN, 
dedicatedZoneIds.toArray(new Object[dedicatedZoneIds.size()]));
                 }
 
-            } else if (_accountMgr.isDomainAdmin(account.getId()) || 
account.getType() == Account.Type.RESOURCE_DOMAIN_ADMIN) {
+            } else if (accountMgr.isDomainAdmin(account.getId()) || 
account.getType() == Account.Type.RESOURCE_DOMAIN_ADMIN) {
                 // it was decided to return all zones for the domain admin, and
                 // everything above till root, as well as zones till the domain
                 // leaf
@@ -3658,11 +3781,11 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
 
         List<Long> permittedAccountIds = new ArrayList<Long>();
         Ternary<Long, Boolean, ListProjectResourcesCriteria> 
domainIdRecursiveListProject = new Ternary<Long, Boolean, 
ListProjectResourcesCriteria>(cmd.getDomainId(), cmd.isRecursive(), null);
-        _accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), 
cmd.getProjectId(), permittedAccountIds, domainIdRecursiveListProject, listAll, 
false);
+        accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), 
cmd.getProjectId(), permittedAccountIds, domainIdRecursiveListProject, listAll, 
false);
         ListProjectResourcesCriteria listProjectResourcesCriteria = 
domainIdRecursiveListProject.third();
         List<Account> permittedAccounts = new ArrayList<Account>();
         for (Long accountId : permittedAccountIds) {
-            permittedAccounts.add(_accountMgr.getAccount(accountId));
+            permittedAccounts.add(accountMgr.getAccount(accountId));
         }
 
         boolean showDomr = ((templateFilter != TemplateFilter.selfexecutable) 
&& (templateFilter != TemplateFilter.featured));
@@ -3720,16 +3843,16 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
                 throw ex;
             }
             if (!template.isPublicTemplate() && caller.getType() == 
Account.Type.DOMAIN_ADMIN) {
-                Account template_acc = 
_accountMgr.getAccount(template.getAccountId());
+                Account template_acc = 
accountMgr.getAccount(template.getAccountId());
                 DomainVO domain = 
_domainDao.findById(template_acc.getDomainId());
-                _accountMgr.checkAccess(caller, domain);
+                accountMgr.checkAccess(caller, domain);
             }
 
             // if template is not public, perform permission check here
             else if (!template.isPublicTemplate() && caller.getType() != 
Account.Type.ADMIN) {
-                _accountMgr.checkAccess(caller, null, false, template);
+                accountMgr.checkAccess(caller, null, false, template);
             } else if (template.isPublicTemplate()) {
-                _accountMgr.checkAccess(caller, null, false, template);
+                accountMgr.checkAccess(caller, null, false, template);
             }
 
             // if templateId is specified, then we will just use the id to
@@ -3782,7 +3905,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
                     }
 
                     // get all child domain ID's
-                    if (_accountMgr.isAdmin(account.getId()) || 
publicTemplates) {
+                    if (accountMgr.isAdmin(account.getId()) || 
publicTemplates) {
                         List<DomainVO> allChildDomains = 
_domainDao.findAllChildren(domainTreeNode.getPath(), domainTreeNode.getId());
                         for (DomainVO childDomain : allChildDomains) {
                             relatedDomainIds.add(childDomain.getId());
@@ -4056,13 +4179,14 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
             listAll = true;
         }
 
+
         List<Long> permittedAccountIds = new ArrayList<>();
         Ternary<Long, Boolean, ListProjectResourcesCriteria> 
domainIdRecursiveListProject = new Ternary<>(cmd.getDomainId(), 
cmd.isRecursive(), null);
-        _accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), 
cmd.getProjectId(), permittedAccountIds, domainIdRecursiveListProject, listAll, 
false);
+        accountMgr.buildACLSearchParameters(caller, id, cmd.getAccountName(), 
cmd.getProjectId(), permittedAccountIds, domainIdRecursiveListProject, listAll, 
false);
         ListProjectResourcesCriteria listProjectResourcesCriteria = 
domainIdRecursiveListProject.third();
         List<Account> permittedAccounts = new ArrayList<>();
         for (Long accountId : permittedAccountIds) {
-            permittedAccounts.add(_accountMgr.getAccount(accountId));
+            permittedAccounts.add(accountMgr.getAccount(accountId));
         }
 
         HypervisorType hypervisorType = 
HypervisorType.getType(cmd.getHypervisor());
@@ -4170,18 +4294,18 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
         Account caller = CallContext.current().getCallingAccount();
 
         if (vmId != null) {
-            UserVmVO userVM = _userVmDao.findById(vmId);
+            UserVmVO userVM = userVmDao.findById(vmId);
             if (userVM == null) {
                 throw new InvalidParameterValueException("Unable to list 
affinity groups for virtual machine instance " + vmId + "; instance not 
found.");
             }
-            _accountMgr.checkAccess(caller, null, true, userVM);
+            accountMgr.checkAccess(caller, null, true, userVM);
             return listAffinityGroupsByVM(vmId.longValue(), startIndex, 
pageSize);
         }
 
         List<Long> permittedAccounts = new ArrayList<Long>();
         Ternary<Long, Boolean, ListProjectResourcesCriteria> ternary = new 
Ternary<Long, Boolean, ListProjectResourcesCriteria>(domainId, isRecursive, 
null);
 
-        _accountMgr.buildACLSearchParameters(caller, affinityGroupId, 
accountName, projectId, permittedAccounts, ternary, listAll, false);
+        accountMgr.buildACLSearchParameters(caller, affinityGroupId, 
accountName, projectId, permittedAccounts, ternary, listAll, false);
 
         domainId = ternary.first();
         isRecursive = ternary.second();
@@ -4568,7 +4692,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
 
         List<Long> permittedAccountIds = new ArrayList<>();
         Ternary<Long, Boolean, ListProjectResourcesCriteria> 
domainIdRecursiveListProject = new Ternary<Long, Boolean, 
ListProjectResourcesCriteria>(domainId, isRecursive, null);
-        _accountMgr.buildACLSearchParameters(caller, id, accountName, 
projectId, permittedAccountIds, domainIdRecursiveListProject, listAll, false);
+        accountMgr.buildACLSearchParameters(caller, id, accountName, 
projectId, permittedAccountIds, domainIdRecursiveListProject, listAll, false);
         ListProjectResourcesCriteria listProjectResourcesCriteria = 
domainIdRecursiveListProject.third();
         domainId = domainIdRecursiveListProject.first();
         isRecursive = domainIdRecursiveListProject.second();
@@ -4576,7 +4700,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
         if (volumeId != null) {
             VolumeVO volume = volumeDao.findById(volumeId);
             if (volume != null) {
-                
_accountMgr.checkAccess(CallContext.current().getCallingAccount(), null, true, 
volume);
+                
accountMgr.checkAccess(CallContext.current().getCallingAccount(), null, true, 
volume);
             }
         }
 
@@ -4586,7 +4710,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
         } else {
             sb.select(null, Func.DISTINCT, 
sb.entity().getSnapshotStorePair()); // select distinct (snapshotId, 
store_role, store_id) key
         }
-        _accountMgr.buildACLSearchBuilder(sb, domainId, isRecursive, 
permittedAccountIds, listProjectResourcesCriteria);
+        accountMgr.buildACLSearchBuilder(sb, domainId, isRecursive, 
permittedAccountIds, listProjectResourcesCriteria);
         sb.and("statusNEQ", sb.entity().getStatus(), SearchCriteria.Op.NEQ); 
//exclude those Destroyed snapshot, not showing on UI
         sb.and("volumeId", sb.entity().getVolumeId(), SearchCriteria.Op.EQ);
         sb.and("name", sb.entity().getName(), SearchCriteria.Op.EQ);
@@ -4598,7 +4722,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
         sb.and("locationType", sb.entity().getStoreRole(), 
SearchCriteria.Op.EQ);
 
         if (tags != null && !tags.isEmpty()) {
-            SearchBuilder<ResourceTagVO> tagSearch = 
_resourceTagDao.createSearchBuilder();
+            SearchBuilder<ResourceTagVO> tagSearch = 
resourceTagDao.createSearchBuilder();
             for (int count = 0; count < tags.size(); count++) {
                 tagSearch.or().op("key" + String.valueOf(count), 
tagSearch.entity().getKey(), SearchCriteria.Op.EQ);
                 tagSearch.and("value" + String.valueOf(count), 
tagSearch.entity().getValue(), SearchCriteria.Op.EQ);
@@ -4610,7 +4734,7 @@ public class QueryManagerImpl extends 
MutualExclusiveIdsManagerBase implements Q
         }
 
         SearchCriteria<SnapshotJoinVO> sc = sb.create();
-        _accountMgr.buildACLSearchCriteria(sc, domainId, isRecursive, 
permittedAccountIds, listProjectResourcesCriteria);
+        accountMgr.buildACLSearchCriteria(sc, domainId, isRecursive, 
permittedAccountIds, listProjectResourcesCriteria);
 
         sc.setParameters("statusNEQ", Snapshot.State.Destroyed);
 


Reply via email to