From 801071887810dbeb68a24e94e36f117e911883bc Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Wed, 24 Jun 2020 07:02:56 +0530 Subject: [PATCH] server: fix for wrong affinity group count (#4154) Fixes wrong count in listAffinityGroup API. API was returning the count of AffinityGroupJoinVO records. Signed-off-by: Abhishek Kumar --- .../com/cloud/api/query/QueryManagerImpl.java | 23 +++++++++++-------- 1 file changed, 14 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 c41cd0e68a6..bf304303b28 100644 --- a/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java +++ b/server/src/main/java/com/cloud/api/query/QueryManagerImpl.java @@ -3625,25 +3625,30 @@ public class QueryManagerImpl extends MutualExclusiveIdsManagerBase implements Q if (domainId != null) { SearchCriteria scDomain = buildAffinityGroupSearchCriteria(null, isRecursive, new ArrayList(), listProjectResourcesCriteria, affinityGroupId, affinityGroupName, affinityGroupType, keyword); - affinityGroups.addAll(listDomainLevelAffinityGroups(scDomain, searchFilter, domainId)); + Pair, Integer> groupsPair = listDomainLevelAffinityGroups(scDomain, searchFilter, domainId); + affinityGroups.addAll(groupsPair.first()); + count += groupsPair.second(); } else { for (Long permAcctId : permittedAccounts) { Account permittedAcct = _accountDao.findById(permAcctId); SearchCriteria scDomain = buildAffinityGroupSearchCriteria(null, isRecursive, new ArrayList(), listProjectResourcesCriteria, affinityGroupId, affinityGroupName, affinityGroupType, keyword); - - affinityGroups.addAll(listDomainLevelAffinityGroups(scDomain, searchFilter, permittedAcct.getDomainId())); + Pair, Integer> groupsPair = listDomainLevelAffinityGroups(scDomain, searchFilter, permittedAcct.getDomainId()); + affinityGroups.addAll(groupsPair.first()); + count += groupsPair.second(); } } } else if (((permittedAccounts.isEmpty()) && (domainId != null) && isRecursive)) { // list all domain level affinity groups for the domain admin case SearchCriteria scDomain = buildAffinityGroupSearchCriteria(null, isRecursive, new ArrayList(), listProjectResourcesCriteria, affinityGroupId, affinityGroupName, affinityGroupType, keyword); - affinityGroups.addAll(listDomainLevelAffinityGroups(scDomain, searchFilter, domainId)); + Pair, Integer> groupsPair = listDomainLevelAffinityGroups(scDomain, searchFilter, domainId); + affinityGroups.addAll(groupsPair.first()); + count += groupsPair.second(); } - return new Pair, Integer>(affinityGroups, affinityGroups.size()); + return new Pair, Integer>(affinityGroups, count); } @@ -3741,7 +3746,7 @@ public class QueryManagerImpl extends MutualExclusiveIdsManagerBase implements Q return new Pair, Integer>(ags, count); } - private List listDomainLevelAffinityGroups(SearchCriteria sc, Filter searchFilter, long domainId) { + private Pair, Integer> listDomainLevelAffinityGroups(SearchCriteria sc, Filter searchFilter, long domainId) { List affinityGroupIds = new ArrayList(); Set allowedDomains = _domainMgr.getDomainParentIds(domainId); List maps = _affinityGroupDomainMapDao.listByDomain(allowedDomains.toArray()); @@ -3765,7 +3770,7 @@ public class QueryManagerImpl extends MutualExclusiveIdsManagerBase implements Q Integer count = uniqueGroupsPair.second(); if (count.intValue() == 0) { // empty result - return new ArrayList(); + return new Pair<>(new ArrayList(), 0); } List uniqueGroups = uniqueGroupsPair.first(); Long[] vrIds = new Long[uniqueGroups.size()]; @@ -3774,9 +3779,9 @@ public class QueryManagerImpl extends MutualExclusiveIdsManagerBase implements Q vrIds[i++] = v.getId(); } List vrs = _affinityGroupJoinDao.searchByIds(vrIds); - return vrs; + return new Pair<>(vrs, count); } else { - return new ArrayList(); + return new Pair<>(new ArrayList(), 0); } }