Skip to content

Commit 0577b0a

Browse files
authored
server: add logs to public ip allocation attempt (#8239)
1 parent 405aac3 commit 0577b0a

File tree

1 file changed

+29
-9
lines changed

1 file changed

+29
-9
lines changed

server/src/main/java/com/cloud/network/IpAddressManagerImpl.java

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -343,6 +343,9 @@ private IPAddressVO assignAndAllocateIpAddressEntry(final Account owner, final V
343343
if (possibleAddr.getState() != State.Free) {
344344
continue;
345345
}
346+
if (s_logger.isDebugEnabled()) {
347+
s_logger.debug(String.format("trying ip address %s", possibleAddr.getAddress()));
348+
}
346349
possibleAddr.setSourceNat(sourceNat);
347350
possibleAddr.setAllocatedTime(new Date());
348351
possibleAddr.setAllocatedInDomainId(owner.getDomainId());
@@ -357,15 +360,9 @@ private IPAddressVO assignAndAllocateIpAddressEntry(final Account owner, final V
357360
possibleAddr.setAssociatedWithNetworkId(guestNetworkId);
358361
possibleAddr.setVpcId(vpcId);
359362
}
360-
if (_ipAddressDao.lockRow(possibleAddr.getId(), true) != null) {
361-
final IPAddressVO userIp = _ipAddressDao.findById(possibleAddr.getId());
362-
if (userIp.getState() == State.Free) {
363-
possibleAddr.setState(State.Allocating);
364-
if (_ipAddressDao.update(possibleAddr.getId(), possibleAddr)) {
365-
finalAddress = possibleAddr;
366-
break;
367-
}
368-
}
363+
finalAddress = assignIpAddressWithLock(possibleAddr);
364+
if (finalAddress != null) {
365+
break;
369366
}
370367
}
371368

@@ -387,6 +384,29 @@ private IPAddressVO assignAndAllocateIpAddressEntry(final Account owner, final V
387384
});
388385
}
389386

387+
private IPAddressVO assignIpAddressWithLock(IPAddressVO possibleAddr) {
388+
IPAddressVO finalAddress = null;
389+
IPAddressVO userIp = _ipAddressDao.acquireInLockTable(possibleAddr.getId());
390+
if (userIp != null) {
391+
if (s_logger.isDebugEnabled()) {
392+
s_logger.debug(String.format("locked row for ip address %s (id: %s)", possibleAddr.getAddress(), possibleAddr.getUuid()));
393+
}
394+
if (userIp.getState() == State.Free) {
395+
possibleAddr.setState(State.Allocating);
396+
if (_ipAddressDao.update(possibleAddr.getId(), possibleAddr)) {
397+
s_logger.info(String.format("successfully allocated ip address %s", possibleAddr.getAddress()));
398+
finalAddress = possibleAddr;
399+
}
400+
} else {
401+
if (s_logger.isDebugEnabled()) {
402+
s_logger.debug(String.format("locked ip address %s is not free (%s)", possibleAddr.getAddress(), userIp.getState()));
403+
}
404+
}
405+
_ipAddressDao.releaseFromLockTable(possibleAddr.getId());
406+
}
407+
return finalAddress;
408+
}
409+
390410
@Override
391411
public boolean configure(String name, Map<String, Object> params) {
392412
// populate providers

0 commit comments

Comments
 (0)