server: fix list public ip returns duplicated records (#5464)

* server: fix list public ip returns duplicated records

* update #5464: fix shared network
This commit is contained in:
Wei Zhou 2021-09-20 07:19:53 +02:00 committed by GitHub
parent f2315ec0e2
commit f50cc27a5c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 4 additions and 4 deletions

View File

@ -2128,7 +2128,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
_accountMgr.buildACLSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
}
buildParameters(sb, cmd);
buildParameters(sb, cmd, vlanType == VlanType.VirtualNetwork ? true : isAllocated);
SearchCriteria<IPAddressVO> sc = sb.create();
setParameters(sc, cmd, vlanType);
@ -2190,7 +2190,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
}
if (freeAddrIds.size() > 0) {
final SearchBuilder<IPAddressVO> sb2 = _publicIpAddressDao.createSearchBuilder();
buildParameters(sb2, cmd);
buildParameters(sb2, cmd, false);
sb2.and("ids", sb2.entity().getId(), SearchCriteria.Op.IN);
SearchCriteria<IPAddressVO> sc2 = sb2.create();
@ -2198,6 +2198,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
sc2.setParameters("ids", freeAddrIds.toArray());
addrs.addAll(_publicIpAddressDao.search(sc2, searchFilter)); // Allocated + Free
}
Collections.sort(addrs, Comparator.comparing(IPAddressVO::getAddress));
List<? extends IpAddress> wPagination = com.cloud.utils.StringUtils.applyPagination(addrs, cmd.getStartIndex(), cmd.getPageSizeVal());
if (wPagination != null) {
return new Pair<List<? extends IpAddress>, Integer>(wPagination, addrs.size());
@ -2205,11 +2206,10 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe
return new Pair<>(addrs, addrs.size());
}
private void buildParameters(final SearchBuilder<IPAddressVO> sb, final ListPublicIpAddressesCmd cmd) {
private void buildParameters(final SearchBuilder<IPAddressVO> sb, final ListPublicIpAddressesCmd cmd, final Boolean isAllocated) {
final Object keyword = cmd.getKeyword();
final String address = cmd.getIpAddress();
final Boolean forLoadBalancing = cmd.isForLoadBalancing();
Boolean isAllocated = cmd.isAllocatedOnly();
final Map<String, String> tags = cmd.getTags();
sb.and("dataCenterId", sb.entity().getDataCenterId(), SearchCriteria.Op.EQ);