From f50cc27a5c94705fc38a5134462730e2f2448577 Mon Sep 17 00:00:00 2001 From: Wei Zhou Date: Mon, 20 Sep 2021 07:19:53 +0200 Subject: [PATCH] server: fix list public ip returns duplicated records (#5464) * server: fix list public ip returns duplicated records * update #5464: fix shared network --- .../main/java/com/cloud/server/ManagementServerImpl.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/server/src/main/java/com/cloud/server/ManagementServerImpl.java b/server/src/main/java/com/cloud/server/ManagementServerImpl.java index 93c1e9bf78c..2c52b673452 100644 --- a/server/src/main/java/com/cloud/server/ManagementServerImpl.java +++ b/server/src/main/java/com/cloud/server/ManagementServerImpl.java @@ -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 sc = sb.create(); setParameters(sc, cmd, vlanType); @@ -2190,7 +2190,7 @@ public class ManagementServerImpl extends ManagerBase implements ManagementServe } if (freeAddrIds.size() > 0) { final SearchBuilder sb2 = _publicIpAddressDao.createSearchBuilder(); - buildParameters(sb2, cmd); + buildParameters(sb2, cmd, false); sb2.and("ids", sb2.entity().getId(), SearchCriteria.Op.IN); SearchCriteria 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 wPagination = com.cloud.utils.StringUtils.applyPagination(addrs, cmd.getStartIndex(), cmd.getPageSizeVal()); if (wPagination != null) { return new Pair, 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 sb, final ListPublicIpAddressesCmd cmd) { + private void buildParameters(final SearchBuilder 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 tags = cmd.getTags(); sb.and("dataCenterId", sb.entity().getDataCenterId(), SearchCriteria.Op.EQ);