From 4f0b26bfd9a56365e9404ec01f6df608f85c2a78 Mon Sep 17 00:00:00 2001 From: Wei Zhou Date: Wed, 8 May 2024 12:55:28 +0200 Subject: [PATCH 1/2] server: throw exception if fail to cleanup IP resources when release a public IP --- .../main/java/com/cloud/network/IpAddressManagerImpl.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/server/src/main/java/com/cloud/network/IpAddressManagerImpl.java b/server/src/main/java/com/cloud/network/IpAddressManagerImpl.java index 0178236a21a9..426c33ad4719 100644 --- a/server/src/main/java/com/cloud/network/IpAddressManagerImpl.java +++ b/server/src/main/java/com/cloud/network/IpAddressManagerImpl.java @@ -732,8 +732,9 @@ public boolean disassociatePublicIpAddress(long addrId, long userId, Account cal PublicIpQuarantine publicIpQuarantine = null; // Cleanup all ip address resources - PF/LB/Static nat rules if (!cleanupIpResources(addrId, userId, caller)) { - success = false; - s_logger.warn("Failed to release resources for ip address id=" + addrId); + String msg = String.format("Failed to release resources for ip address id=%s", addrId); + s_logger.error(msg); + throw new CloudRuntimeException(msg); } IPAddressVO ip = markIpAsUnavailable(addrId); From 8d0aab5a7ccaf094eb4880d26c89d9657dbe732d Mon Sep 17 00:00:00 2001 From: Wei Zhou Date: Mon, 24 Jun 2024 09:18:43 +0200 Subject: [PATCH 2/2] Update 9059: rename markAsUnavailable to markAsReleasing --- .../src/main/java/com/cloud/network/dao/IPAddressDao.java | 2 +- .../src/main/java/com/cloud/network/dao/IPAddressDaoImpl.java | 2 +- .../src/main/java/com/cloud/network/IpAddressManagerImpl.java | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/engine/schema/src/main/java/com/cloud/network/dao/IPAddressDao.java b/engine/schema/src/main/java/com/cloud/network/dao/IPAddressDao.java index b1b1e1cf7571..152b5cc117d8 100644 --- a/engine/schema/src/main/java/com/cloud/network/dao/IPAddressDao.java +++ b/engine/schema/src/main/java/com/cloud/network/dao/IPAddressDao.java @@ -26,7 +26,7 @@ public interface IPAddressDao extends GenericDao { - IPAddressVO markAsUnavailable(long ipAddressId); + IPAddressVO markAsReleasing(long ipAddressId); void unassignIpAddress(long ipAddressId); diff --git a/engine/schema/src/main/java/com/cloud/network/dao/IPAddressDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/dao/IPAddressDaoImpl.java index d14275227158..938d99a18c5c 100644 --- a/engine/schema/src/main/java/com/cloud/network/dao/IPAddressDaoImpl.java +++ b/engine/schema/src/main/java/com/cloud/network/dao/IPAddressDaoImpl.java @@ -382,7 +382,7 @@ public int countIPs(long dcId, Long accountId, String vlanId, String vlanGateway @Override @DB - public IPAddressVO markAsUnavailable(long ipAddressId) { + public IPAddressVO markAsReleasing(long ipAddressId) { SearchCriteria sc = AllFieldsSearch.create(); sc.setParameters("id", ipAddressId); diff --git a/server/src/main/java/com/cloud/network/IpAddressManagerImpl.java b/server/src/main/java/com/cloud/network/IpAddressManagerImpl.java index 426c33ad4719..fc8d31e03cae 100644 --- a/server/src/main/java/com/cloud/network/IpAddressManagerImpl.java +++ b/server/src/main/java/com/cloud/network/IpAddressManagerImpl.java @@ -1568,7 +1568,7 @@ public IPAddressVO associateIPToGuestNetwork(long ipId, long networkId, boolean if (ip != null) { try { s_logger.warn("Failed to associate ip address, so releasing ip from the database " + ip); - _ipAddressDao.markAsUnavailable(ip.getId()); + _ipAddressDao.markAsReleasing(ip.getId()); if (!applyIpAssociations(network, true)) { // if fail to apply ip associations again, unassign ip address without updating resource // count and generating usage event as there is no need to keep it in the db @@ -1982,7 +1982,7 @@ public IPAddressVO doInTransaction(TransactionStatus status) { } } - return _ipAddressDao.markAsUnavailable(addrId); + return _ipAddressDao.markAsReleasing(addrId); } }); }