MitchDrage opened a new issue, #14248:
URL: https://github.com/apache/cloudstack/issues/14248

   ### problem
   
   On 4.22.1.0, listPublicIpAddresses with forvirtualnetwork=false sometimes 
fails with a 530:
   
   
   ```
   2026-09-25 06:50:01,162 ERROR [c.c.a.ApiServer] 
(qtp2038105753-72330:[ctx-762cfe49, ctx-ac3b837a, ctx-e861c603]) 
(logid:e972f310) unhandled exception executing api command: 
[Ljava.lang.String;@4e95c7d5 java.lang.NullPointerException: Cannot invoke 
"java.lang.Long.longValue()" because "this.instanceId" is null
   2026-09-25 06:50:01,165 INFO  [a.c.c.a.ApiServlet] 
(qtp2038105753-72330:[ctx-762cfe49, ctx-ac3b837a, ctx-e861c603]) 
(logid:e972f310) (userId=8 accountId=2 sessionId=null) 0:0:0:0:0:0:0:1 -- GET 
allocatedonly=false&apikey=<redacted>&command=listPublicIpAddresses&forvirtualnetwork=false&listall=true&page=1&pagesize=500&response=json&signature=<redacted>
 530 Cannot invoke "java.lang.Long.longValue()" because "this.instanceId" is 
null
   ```
   The same request succeeds on some attempts and fails on others.
   
   It looks like the DomainRouter branch added to 
ApiResponseHelper.showVmInfoForSharedNetworks() in #10458 is hitting the VR's 
placeholder NIC, which has a null instance_id. Our shared network has two NIC 
rows for the VR's IP (the placeholder and the real one), and the NIC lookup can 
return either, which would explain why it's intermittent. It seems to be the 
same or a similar problem as #8622, which #8624 fixed for the system VM branch.
   
   ### versions
   
   ACS 4.22.1.0, KVM, advanced zone. The shared network offering uses 
VirtualRouter for DHCP, DNS and UserData.
   
   ### The steps to reproduce the bug
   
   1. Create a shared network whose offering uses VirtualRouter for DHCP/DNS, 
and deploy a VM on it so the VR starts.
   2. As admin, call listPublicIpAddresses networkid=<network> 
forvirtualnetwork=false a few times.
   3. Some calls fail with the NPE above.
   
   ### What to do about it?
   
   findNonPlaceHolderByIp4AddressAndNetworkId() looks to skip placeholder IP 
addresses, so should be able to change this line in ApiResponseHelper.java:
   
   Change:
   ```
           if (!forVirtualNetworks) {
               NicVO nic = 
ApiDBUtils.findByIp4AddressAndNetworkId(ipAddr.getAddress().toString(), 
ipAddr.getNetworkId());
   ```
   
   To:
   ```
           if (!forVirtualNetworks) {
               NicVO nic = 
ApiDBUtils.findNonPlaceHolderByIp4AddressAndNetworkId(ipAddr.getAddress().toString(),
 ipAddr.getNetworkId());
   ```


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to