From dbb2650f088686987cf2ba6138f75a92984ee2dd Mon Sep 17 00:00:00 2001 From: Pearl Dsilva Date: Mon, 19 Aug 2024 17:56:47 -0400 Subject: [PATCH 1/5] Filter list VMs by IP address --- .../com/cloud/api/query/QueryManagerImpl.java | 26 ++++++++++++------- 1 file changed, 17 insertions(+), 9 deletions(-) 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 5286dad29e4b..bf5bc8e639b4 100644 --- a/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java +++ b/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java @@ -1447,13 +1447,18 @@ private Pair, Integer> searchForUserVMIdsAndCount(ListVMsCmd cmd) { } 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); + SearchBuilder userVmJoinSearchBuilder = _userVmJoinDao.createSearchBuilder(); + userVmJoinSearchBuilder.and().op("keywordDisplayName", userVmJoinSearchBuilder.entity().getDisplayName(), Op.LIKE); + userVmJoinSearchBuilder.or("keywordName", userVmJoinSearchBuilder.entity().getHostName(), Op.LIKE); + userVmJoinSearchBuilder.or("keywordState", userVmJoinSearchBuilder.entity().getState(), Op.EQ); + userVmJoinSearchBuilder.or("keywordIpAddress", userVmJoinSearchBuilder.entity().getIpAddress(), Op.LIKE); + userVmJoinSearchBuilder.or("keywordPublicIpAddress", userVmJoinSearchBuilder.entity().getPublicIpAddress(), Op.LIKE); + userVmJoinSearchBuilder.or("keywordIp6Address", userVmJoinSearchBuilder.entity().getIp6Address(), Op.LIKE); if (isRootAdmin) { - userVmSearchBuilder.or("keywordInstanceName", userVmSearchBuilder.entity().getInstanceName(), Op.LIKE ); + userVmJoinSearchBuilder.or("keywordInstanceName", userVmJoinSearchBuilder.entity().getInstanceName(), Op.LIKE ); } - userVmSearchBuilder.cp(); + userVmJoinSearchBuilder.cp(); + userVmSearchBuilder.join("keyword", userVmJoinSearchBuilder, userVmJoinSearchBuilder.entity().getId(), userVmSearchBuilder.entity().getId(), JoinBuilder.JoinType.INNER); } if (backupOfferingId != null) { @@ -1543,11 +1548,14 @@ private Pair, Integer> searchForUserVMIdsAndCount(ListVMsCmd cmd) { if (keyword != null) { String keywordMatch = "%" + keyword + "%"; - userVmSearchCriteria.setParameters("keywordDisplayName", keywordMatch); - userVmSearchCriteria.setParameters("keywordName", keywordMatch); - userVmSearchCriteria.setParameters("keywordState", keyword); + userVmSearchCriteria.setJoinParameters("keyword","keywordDisplayName", keywordMatch); + userVmSearchCriteria.setJoinParameters("keyword","keywordName", keywordMatch); + userVmSearchCriteria.setJoinParameters("keyword","keywordState", keywordMatch); + userVmSearchCriteria.setJoinParameters("keyword","keywordIpAddress", keywordMatch); + userVmSearchCriteria.setJoinParameters("keyword","keywordPublicIpAddress", keywordMatch); + userVmSearchCriteria.setJoinParameters("keyword", "keywordIp6Address", keywordMatch); if (isRootAdmin) { - userVmSearchCriteria.setParameters("keywordInstanceName", keywordMatch); + userVmSearchCriteria.setJoinParameters("keyword", "keywordInstanceName", keywordMatch); } } From d0324df247a39392a769be0246c53bca4638546a Mon Sep 17 00:00:00 2001 From: Pearl Dsilva Date: Fri, 27 Sep 2024 15:48:38 -0400 Subject: [PATCH 2/5] update using the new joins feature over views --- .../com/cloud/api/query/QueryManagerImpl.java | 49 ++++++++++++------- 1 file changed, 32 insertions(+), 17 deletions(-) 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 bf5bc8e639b4..2e68c8abc743 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,8 @@ import javax.inject.Inject; +import com.cloud.network.dao.IPAddressDao; +import com.cloud.network.dao.IPAddressVO; import com.cloud.storage.StoragePool; import com.cloud.storage.StoragePoolHostVO; import com.cloud.event.EventVO; @@ -549,6 +551,9 @@ public class QueryManagerImpl extends MutualExclusiveIdsManagerBase implements Q @Inject private NetworkDao networkDao; + @Inject + private IPAddressDao ipAddressDao; + @Inject private NicDao nicDao; @@ -1447,18 +1452,28 @@ private Pair, Integer> searchForUserVMIdsAndCount(ListVMsCmd cmd) { } if (keyword != null) { - SearchBuilder userVmJoinSearchBuilder = _userVmJoinDao.createSearchBuilder(); - userVmJoinSearchBuilder.and().op("keywordDisplayName", userVmJoinSearchBuilder.entity().getDisplayName(), Op.LIKE); - userVmJoinSearchBuilder.or("keywordName", userVmJoinSearchBuilder.entity().getHostName(), Op.LIKE); - userVmJoinSearchBuilder.or("keywordState", userVmJoinSearchBuilder.entity().getState(), Op.EQ); - userVmJoinSearchBuilder.or("keywordIpAddress", userVmJoinSearchBuilder.entity().getIpAddress(), Op.LIKE); - userVmJoinSearchBuilder.or("keywordPublicIpAddress", userVmJoinSearchBuilder.entity().getPublicIpAddress(), Op.LIKE); - userVmJoinSearchBuilder.or("keywordIp6Address", userVmJoinSearchBuilder.entity().getIp6Address(), Op.LIKE); + 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) { - userVmJoinSearchBuilder.or("keywordInstanceName", userVmJoinSearchBuilder.entity().getInstanceName(), Op.LIKE ); + userVmSearchBuilder.or("keywordInstanceName", userVmSearchBuilder.entity().getInstanceName(), Op.LIKE ); } - userVmJoinSearchBuilder.cp(); - userVmSearchBuilder.join("keyword", userVmJoinSearchBuilder, userVmJoinSearchBuilder.entity().getId(), userVmSearchBuilder.entity().getId(), JoinBuilder.JoinType.INNER); + + SearchBuilder ipAddressSearch = ipAddressDao.createSearchBuilder(); + userVmSearchBuilder.join("ipAddressSearch", ipAddressSearch, + ipAddressSearch.entity().getAssociatedWithVmId(), userVmSearchBuilder.entity().getId(), JoinBuilder.JoinType.LEFT); + + SearchBuilder nicSearch = nicDao.createSearchBuilder(); + userVmSearchBuilder.join("nicSearch", nicSearch, JoinBuilder.JoinType.LEFT, + JoinBuilder.JoinCondition.AND, + nicSearch.entity().getInstanceId(), userVmSearchBuilder.entity().getId()); + + userVmSearchBuilder.or("ipAddressSearch", "keywordPublicIpAddress", ipAddressSearch.entity().getAddress(), Op.LIKE); + + userVmSearchBuilder.or("nicSearch", "keywordIpAddress", nicSearch.entity().getIPv4Address(), Op.LIKE); + userVmSearchBuilder.or("nicSearch", "keywordIp6Address", nicSearch.entity().getIPv6Address(), Op.LIKE); + + userVmSearchBuilder.cp(); } if (backupOfferingId != null) { @@ -1548,14 +1563,14 @@ private Pair, Integer> searchForUserVMIdsAndCount(ListVMsCmd cmd) { if (keyword != null) { String keywordMatch = "%" + keyword + "%"; - userVmSearchCriteria.setJoinParameters("keyword","keywordDisplayName", keywordMatch); - userVmSearchCriteria.setJoinParameters("keyword","keywordName", keywordMatch); - userVmSearchCriteria.setJoinParameters("keyword","keywordState", keywordMatch); - userVmSearchCriteria.setJoinParameters("keyword","keywordIpAddress", keywordMatch); - userVmSearchCriteria.setJoinParameters("keyword","keywordPublicIpAddress", keywordMatch); - userVmSearchCriteria.setJoinParameters("keyword", "keywordIp6Address", keywordMatch); + userVmSearchCriteria.setParameters("keywordDisplayName", keywordMatch); + userVmSearchCriteria.setParameters("keywordName", keywordMatch); + userVmSearchCriteria.setParameters("keywordState", keywordMatch); + userVmSearchCriteria.setParameters("keywordIpAddress", keywordMatch); + userVmSearchCriteria.setParameters("keywordPublicIpAddress", keywordMatch); + userVmSearchCriteria.setParameters("keywordIp6Address", keywordMatch); if (isRootAdmin) { - userVmSearchCriteria.setJoinParameters("keyword", "keywordInstanceName", keywordMatch); + userVmSearchCriteria.setParameters("keyword", "keywordInstanceName", keywordMatch); } } From f8b6e6d133fdb83ca84e098518e7b3ee87b20f97 Mon Sep 17 00:00:00 2001 From: Pearl Dsilva Date: Fri, 4 Oct 2024 14:26:57 -0400 Subject: [PATCH 3/5] add support to filter removed nics --- .../com/cloud/utils/db/GenericDaoBase.java | 35 ++++++++++++------- .../com/cloud/api/query/QueryManagerImpl.java | 7 ++-- 2 files changed, 26 insertions(+), 16 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 3b950e1983dd..94e2a2d9848c 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 @@ -421,7 +421,6 @@ public List searchIncludingRemoved(SearchCriteria sc, final Filter filter, pstmt.setObject(i++, value); } } - if (s_logger.isDebugEnabled() && lock != null) { txn.registerLock(pstmt.toString()); } @@ -1342,22 +1341,32 @@ protected List addJoins(StringBuilder str, Collection, Integer> searchForUserVMIdsAndCount(ListVMsCmd cmd) { SearchBuilder nicSearch = nicDao.createSearchBuilder(); userVmSearchBuilder.join("nicSearch", nicSearch, JoinBuilder.JoinType.LEFT, JoinBuilder.JoinCondition.AND, - nicSearch.entity().getInstanceId(), userVmSearchBuilder.entity().getId()); + nicSearch.entity().getInstanceId(), userVmSearchBuilder.entity().getId(), + nicSearch.entity().getRemoved(), userVmSearchBuilder.entity().setLong(null)); userVmSearchBuilder.or("ipAddressSearch", "keywordPublicIpAddress", ipAddressSearch.entity().getAddress(), Op.LIKE); @@ -1565,12 +1566,12 @@ private Pair, Integer> searchForUserVMIdsAndCount(ListVMsCmd cmd) { String keywordMatch = "%" + keyword + "%"; userVmSearchCriteria.setParameters("keywordDisplayName", keywordMatch); userVmSearchCriteria.setParameters("keywordName", keywordMatch); - userVmSearchCriteria.setParameters("keywordState", keywordMatch); + userVmSearchCriteria.setParameters("keywordState", keyword); userVmSearchCriteria.setParameters("keywordIpAddress", keywordMatch); userVmSearchCriteria.setParameters("keywordPublicIpAddress", keywordMatch); userVmSearchCriteria.setParameters("keywordIp6Address", keywordMatch); if (isRootAdmin) { - userVmSearchCriteria.setParameters("keyword", "keywordInstanceName", keywordMatch); + userVmSearchCriteria.setParameters("keywordInstanceName", keywordMatch); } } From cb33945bd33e111d4a4a34c0479619cbe51753ed Mon Sep 17 00:00:00 2001 From: Pearl Dsilva Date: Mon, 7 Oct 2024 15:47:39 -0400 Subject: [PATCH 4/5] address case when any one of the attribute is null --- .../java/com/cloud/utils/db/GenericDaoBase.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 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 94e2a2d9848c..36a5be4ba0f2 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 @@ -1341,17 +1341,24 @@ protected List addJoins(StringBuilder str, Collection addJoins(StringBuilder str, Collection