From 1a5f3e58bd6550ad86d15584ad30206aa6b9188c Mon Sep 17 00:00:00 2001 From: Wei Zhou Date: Wed, 7 Feb 2024 14:39:01 +0100 Subject: [PATCH 1/6] server: fix fail to list public ips of shared networks sometimes error ``` 2024-02-07 10:59:11,110 ERROR [c.c.a.ApiServer] (qtp1146825051-20:ctx-74413901 ctx-b91ecc51) (logid:aa41ab63) unhandled exception executing api command: [Ljava.lang.String;@5a46b058 java.lang.NullPointerException at com.cloud.vm.NicVO.getInstanceId(NicVO.java:256) at com.cloud.api.ApiResponseHelper.addSystemVmInfoToIpResponse(ApiResponseHelper.java:995) at com.cloud.api.ApiResponseHelper.showVmInfoForSharedNetworks(ApiResponseHelper.java:1175) at com.cloud.api.ApiResponseHelper.createIPAddressResponse(ApiResponseHelper.java:1088) at org.apache.cloudstack.api.command.user.address.ListPublicIpAddressesCmd.execute(ListPublicIpAddressesCmd.java:196) ``` --- server/src/main/java/com/cloud/api/ApiResponseHelper.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/server/src/main/java/com/cloud/api/ApiResponseHelper.java b/server/src/main/java/com/cloud/api/ApiResponseHelper.java index e2b72f6175c7..e07e854ebd5e 100644 --- a/server/src/main/java/com/cloud/api/ApiResponseHelper.java +++ b/server/src/main/java/com/cloud/api/ApiResponseHelper.java @@ -992,6 +992,9 @@ private void addSystemVmInfoToIpResponse(NicVO nic, IPAddressResponse ipResponse if (!isAdmin) { return; } + if (Nic.ReservationStrategy.PlaceHolder.equals(nic.getReservationStrategy())) { + return; + } VirtualMachine vm = ApiDBUtils.findVMInstanceById(nic.getInstanceId()); if (vm == null) { return; From c426a196fbd7c832f0899452bf00868a9ec36a6b Mon Sep 17 00:00:00 2001 From: Wei Zhou Date: Fri, 9 Feb 2024 18:00:48 +0100 Subject: [PATCH 2/6] Update server/src/main/java/com/cloud/api/ApiResponseHelper.java --- server/src/main/java/com/cloud/api/ApiResponseHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/main/java/com/cloud/api/ApiResponseHelper.java b/server/src/main/java/com/cloud/api/ApiResponseHelper.java index e07e854ebd5e..4341d643313b 100644 --- a/server/src/main/java/com/cloud/api/ApiResponseHelper.java +++ b/server/src/main/java/com/cloud/api/ApiResponseHelper.java @@ -992,7 +992,7 @@ private void addSystemVmInfoToIpResponse(NicVO nic, IPAddressResponse ipResponse if (!isAdmin) { return; } - if (Nic.ReservationStrategy.PlaceHolder.equals(nic.getReservationStrategy())) { + if (nic == null || Nic.ReservationStrategy.PlaceHolder.equals(nic.getReservationStrategy())) { return; } VirtualMachine vm = ApiDBUtils.findVMInstanceById(nic.getInstanceId()); From 9855c1c3bf064830b4426150a8c0e78e873bced3 Mon Sep 17 00:00:00 2001 From: Wei Zhou Date: Mon, 12 Feb 2024 14:39:12 +0100 Subject: [PATCH 3/6] Update PR#8624: change return type of Nic.getInstanceId from long to Long --- api/src/main/java/com/cloud/vm/Nic.java | 2 +- engine/schema/src/main/java/com/cloud/vm/NicVO.java | 2 +- server/src/main/java/com/cloud/api/ApiResponseHelper.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/api/src/main/java/com/cloud/vm/Nic.java b/api/src/main/java/com/cloud/vm/Nic.java index afc44b8d39fa..a0d38a389abd 100644 --- a/api/src/main/java/com/cloud/vm/Nic.java +++ b/api/src/main/java/com/cloud/vm/Nic.java @@ -125,7 +125,7 @@ public enum ReservationStrategy { /** * @return the vm instance id that this nic belongs to. */ - long getInstanceId(); + Long getInstanceId(); int getDeviceId(); diff --git a/engine/schema/src/main/java/com/cloud/vm/NicVO.java b/engine/schema/src/main/java/com/cloud/vm/NicVO.java index a32a943ea585..db3be1714bbd 100644 --- a/engine/schema/src/main/java/com/cloud/vm/NicVO.java +++ b/engine/schema/src/main/java/com/cloud/vm/NicVO.java @@ -252,7 +252,7 @@ public long getId() { } @Override - public long getInstanceId() { + public Long getInstanceId() { return instanceId; } diff --git a/server/src/main/java/com/cloud/api/ApiResponseHelper.java b/server/src/main/java/com/cloud/api/ApiResponseHelper.java index 4341d643313b..8ac894545fe7 100644 --- a/server/src/main/java/com/cloud/api/ApiResponseHelper.java +++ b/server/src/main/java/com/cloud/api/ApiResponseHelper.java @@ -992,7 +992,7 @@ private void addSystemVmInfoToIpResponse(NicVO nic, IPAddressResponse ipResponse if (!isAdmin) { return; } - if (nic == null || Nic.ReservationStrategy.PlaceHolder.equals(nic.getReservationStrategy())) { + if (nic == null || nic.getInstanceId() == null) { return; } VirtualMachine vm = ApiDBUtils.findVMInstanceById(nic.getInstanceId()); From 89cb8a47e85b68f5b8b05078b0014abb9ea671b4 Mon Sep 17 00:00:00 2001 From: Wei Zhou Date: Thu, 25 Apr 2024 15:21:14 +0200 Subject: [PATCH 4/6] Update PR#8624: fix Nic is not a nic on VM --- server/src/main/java/com/cloud/vm/UserVmManagerImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java index 0d3f047809a2..7d3622d8e7bf 100644 --- a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java @@ -1562,7 +1562,7 @@ public UserVm removeNicFromVirtualMachine(RemoveNicFromVMCmd cmd) throws Invalid } // check to see if nic is attached to VM - if (nic.getInstanceId() != vmId) { + if (!nic.getInstanceId().equals(vmId)) { throw new InvalidParameterValueException(nic + " is not a nic on " + vmInstance); } @@ -1633,7 +1633,7 @@ public UserVm updateDefaultNicForVirtualMachine(UpdateDefaultNicForVMCmd cmd) th Network existingdefaultnet = _networkModel.getDefaultNetworkForVm(vmId); //check to see if nic is attached to VM - if (nic.getInstanceId() != vmId) { + if (!nic.getInstanceId().equals(vmId)) { throw new InvalidParameterValueException(nic + " is not a nic on " + vmInstance); } // if current default equals chosen new default, Throw an exception From e9a02efca14ea2507e4b94e7dbb9b9c41fe454cb Mon Sep 17 00:00:00 2001 From: Wei Zhou Date: Wed, 22 May 2024 12:53:32 +0200 Subject: [PATCH 5/6] Revert all changes --- api/src/main/java/com/cloud/vm/Nic.java | 2 +- engine/schema/src/main/java/com/cloud/vm/NicVO.java | 2 +- server/src/main/java/com/cloud/api/ApiResponseHelper.java | 3 --- server/src/main/java/com/cloud/vm/UserVmManagerImpl.java | 4 ++-- 4 files changed, 4 insertions(+), 7 deletions(-) diff --git a/api/src/main/java/com/cloud/vm/Nic.java b/api/src/main/java/com/cloud/vm/Nic.java index a0d38a389abd..afc44b8d39fa 100644 --- a/api/src/main/java/com/cloud/vm/Nic.java +++ b/api/src/main/java/com/cloud/vm/Nic.java @@ -125,7 +125,7 @@ public enum ReservationStrategy { /** * @return the vm instance id that this nic belongs to. */ - Long getInstanceId(); + long getInstanceId(); int getDeviceId(); diff --git a/engine/schema/src/main/java/com/cloud/vm/NicVO.java b/engine/schema/src/main/java/com/cloud/vm/NicVO.java index 18f9145b72d7..936efd112b74 100644 --- a/engine/schema/src/main/java/com/cloud/vm/NicVO.java +++ b/engine/schema/src/main/java/com/cloud/vm/NicVO.java @@ -253,7 +253,7 @@ public long getId() { } @Override - public Long getInstanceId() { + public long getInstanceId() { return instanceId; } diff --git a/server/src/main/java/com/cloud/api/ApiResponseHelper.java b/server/src/main/java/com/cloud/api/ApiResponseHelper.java index 7cbc6598a38f..6d66da43c37a 100644 --- a/server/src/main/java/com/cloud/api/ApiResponseHelper.java +++ b/server/src/main/java/com/cloud/api/ApiResponseHelper.java @@ -992,9 +992,6 @@ private void addSystemVmInfoToIpResponse(NicVO nic, IPAddressResponse ipResponse if (!isAdmin) { return; } - if (nic == null || nic.getInstanceId() == null) { - return; - } VirtualMachine vm = ApiDBUtils.findVMInstanceById(nic.getInstanceId()); if (vm == null) { return; diff --git a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java index dbf8cc910a81..3c1720514634 100644 --- a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java @@ -1566,7 +1566,7 @@ public UserVm removeNicFromVirtualMachine(RemoveNicFromVMCmd cmd) throws Invalid } // check to see if nic is attached to VM - if (!nic.getInstanceId().equals(vmId)) { + if (nic.getInstanceId() != vmId) { throw new InvalidParameterValueException(nic + " is not a nic on " + vmInstance); } @@ -1637,7 +1637,7 @@ public UserVm updateDefaultNicForVirtualMachine(UpdateDefaultNicForVMCmd cmd) th Network existingdefaultnet = _networkModel.getDefaultNetworkForVm(vmId); //check to see if nic is attached to VM - if (!nic.getInstanceId().equals(vmId)) { + if (nic.getInstanceId() != vmId) { throw new InvalidParameterValueException(nic + " is not a nic on " + vmInstance); } // if current default equals chosen new default, Throw an exception From 4f6ed22ac22595e7c8f62a7479d7e577290527ea Mon Sep 17 00:00:00 2001 From: Wei Zhou Date: Wed, 22 May 2024 12:52:30 +0200 Subject: [PATCH 6/6] Update 8624: new fix --- server/src/main/java/com/cloud/api/ApiResponseHelper.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/server/src/main/java/com/cloud/api/ApiResponseHelper.java b/server/src/main/java/com/cloud/api/ApiResponseHelper.java index 6d66da43c37a..b49a278de5b9 100644 --- a/server/src/main/java/com/cloud/api/ApiResponseHelper.java +++ b/server/src/main/java/com/cloud/api/ApiResponseHelper.java @@ -992,6 +992,12 @@ private void addSystemVmInfoToIpResponse(NicVO nic, IPAddressResponse ipResponse if (!isAdmin) { return; } + try { + nic.getInstanceId(); + } catch (NullPointerException ex) { + return; + } + VirtualMachine vm = ApiDBUtils.findVMInstanceById(nic.getInstanceId()); if (vm == null) { return;