From 6a11bad25236d872d55db1558fde7b11e0d7707a Mon Sep 17 00:00:00 2001 From: Saurabh Kushwaha Date: Wed, 27 May 2026 18:10:58 +0530 Subject: [PATCH 1/3] improved errorlog message by adding null check --- .../org/apache/cloudstack/vm/ImportVmTasksManagerImpl.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/server/src/main/java/org/apache/cloudstack/vm/ImportVmTasksManagerImpl.java b/server/src/main/java/org/apache/cloudstack/vm/ImportVmTasksManagerImpl.java index 7294ec051eaf..e85389ecf45a 100644 --- a/server/src/main/java/org/apache/cloudstack/vm/ImportVmTasksManagerImpl.java +++ b/server/src/main/java/org/apache/cloudstack/vm/ImportVmTasksManagerImpl.java @@ -161,6 +161,9 @@ public void updateImportVMTaskStep(ImportVmTask importVMTask, DataCenter zone, A @Override public void updateImportVMTaskErrorState(ImportVmTask importVMTask, ImportVmTask.TaskState state, String errorMsg) { + if (importVMTask == null) { + return; + } ImportVMTaskVO importVMTaskVO = (ImportVMTaskVO) importVMTask; Date updatedDate = DateUtil.now(); importVMTaskVO.setUpdated(updatedDate); From 2f2bbd79c10bbf4d03de82bc5e984b8d79ab8f07 Mon Sep 17 00:00:00 2001 From: Saurabh Kushwaha Date: Wed, 27 May 2026 22:31:15 +0530 Subject: [PATCH 2/3] ui: centralize importVMTask null guard in task manager and add warning logs B --- .../vm/ImportVmTasksManagerImpl.java | 36 ++++++++++++------- 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/server/src/main/java/org/apache/cloudstack/vm/ImportVmTasksManagerImpl.java b/server/src/main/java/org/apache/cloudstack/vm/ImportVmTasksManagerImpl.java index e85389ecf45a..92015aab098f 100644 --- a/server/src/main/java/org/apache/cloudstack/vm/ImportVmTasksManagerImpl.java +++ b/server/src/main/java/org/apache/cloudstack/vm/ImportVmTasksManagerImpl.java @@ -80,7 +80,8 @@ public ListResponse listImportVMTasks(ListImportVMTasksCmd Long pageSizeVal = cmd.getPageSizeVal(); ImportVmTask.TaskState state = getStateFromFilter(cmd.getTasksFilter()); - Pair, Integer> result = importVMTaskDao.listImportVMTasks(zoneId, accountId, vcenter, convertHostId, state, startIndex, pageSizeVal); + Pair, Integer> result = importVMTaskDao.listImportVMTasks(zoneId, accountId, vcenter, + convertHostId, state, startIndex, pageSizeVal); List tasks = result.first(); List responses = new ArrayList<>(); @@ -99,14 +100,16 @@ private ImportVmTask.TaskState getStateFromFilter(String tasksFilter) { try { return ImportVmTask.TaskState.getValue(tasksFilter); } catch (IllegalArgumentException e) { - throw new ServerApiException(ApiErrorCode.PARAM_ERROR, String.format("Invalid value for task state: %s", tasksFilter)); + throw new ServerApiException(ApiErrorCode.PARAM_ERROR, + String.format("Invalid value for task state: %s", tasksFilter)); } } @Override - public ImportVmTask createImportVMTaskRecord(DataCenter zone, Account owner, long userId, String displayName, String vcenter, String datacenterName, String sourceVMName, Host convertHost, Host importHost) { + public ImportVmTask createImportVMTaskRecord(DataCenter zone, Account owner, long userId, String displayName, + String vcenter, String datacenterName, String sourceVMName, Host convertHost, Host importHost) { logger.debug("Creating import VM task entry for VM: {} for account {} on zone {} " + - "from the vCenter: {} / datacenter: {} / source VM: {}", + "from the vCenter: {} / datacenter: {} / source VM: {}", sourceVMName, owner.getAccountName(), zone.getName(), displayName, vcenter, datacenterName); ImportVMTaskVO importVMTaskVO = new ImportVMTaskVO(zone.getId(), owner.getAccountId(), userId, displayName, vcenter, datacenterName, sourceVMName, convertHost.getId(), importHost.getId()); @@ -115,21 +118,26 @@ public ImportVmTask createImportVMTaskRecord(DataCenter zone, Account owner, lon } private String getStepDescription(ImportVMTaskVO importVMTaskVO, Host convertHost, Host importHost, - ImportVMTaskVO.Step step, Date updatedDate) { + ImportVMTaskVO.Step step, Date updatedDate) { String sourceVMName = importVMTaskVO.getSourceVMName(); String vcenter = importVMTaskVO.getVcenter(); String datacenter = importVMTaskVO.getDatacenter(); StringBuilder stringBuilder = new StringBuilder(); if (Completed == step) { - stringBuilder.append("Completed at ").append(DateUtil.getDateDisplayString(TimeZone.getTimeZone("GMT"), updatedDate)); + stringBuilder.append("Completed at ") + .append(DateUtil.getDateDisplayString(TimeZone.getTimeZone("GMT"), updatedDate)); } else { if (CloningInstance == step) { - stringBuilder.append(String.format("Cloning source instance: %s on vCenter: %s / datacenter: %s", sourceVMName, vcenter, datacenter)); + stringBuilder.append(String.format("Cloning source instance: %s on vCenter: %s / datacenter: %s", + sourceVMName, vcenter, datacenter)); } else if (ConvertingInstance == step) { - stringBuilder.append(String.format("Converting the cloned VMware instance to a KVM instance on the host: %s", convertHost.getName())); + stringBuilder + .append(String.format("Converting the cloned VMware instance to a KVM instance on the host: %s", + convertHost.getName())); } else if (Importing == step) { - stringBuilder.append(String.format("Importing the converted KVM instance on the host: %s", importHost.getName())); + stringBuilder.append( + String.format("Importing the converted KVM instance on the host: %s", importHost.getName())); } else if (Prepare == step) { stringBuilder.append("Preparing to convert Vmware instance"); } @@ -139,11 +147,12 @@ private String getStepDescription(ImportVMTaskVO importVMTaskVO, Host convertHos @Override public void updateImportVMTaskStep(ImportVmTask importVMTask, DataCenter zone, Account owner, Host convertHost, - Host importHost, Long vmId, ImportVmTask.Step step) { + Host importHost, Long vmId, ImportVmTask.Step step) { ImportVMTaskVO importVMTaskVO = (ImportVMTaskVO) importVMTask; logger.debug("Updating import VM task entry for VM: {} for account {} on zone {} " + - "from the vCenter: {} / datacenter: {} / source VM: {} to step: {}", - importVMTaskVO.getSourceVMName(), owner.getAccountName(), zone.getName(), importVMTaskVO.getDisplayName(), + "from the vCenter: {} / datacenter: {} / source VM: {} to step: {}", + importVMTaskVO.getSourceVMName(), owner.getAccountName(), zone.getName(), + importVMTaskVO.getDisplayName(), importVMTaskVO.getVcenter(), importVMTaskVO.getDatacenter(), step); Date updatedDate = DateUtil.now(); String description = getStepDescription(importVMTaskVO, convertHost, importHost, step, updatedDate); @@ -162,6 +171,9 @@ public void updateImportVMTaskStep(ImportVmTask importVMTask, DataCenter zone, A @Override public void updateImportVMTaskErrorState(ImportVmTask importVMTask, ImportVmTask.TaskState state, String errorMsg) { if (importVMTask == null) { + logger.warn( + "Skipping import VM task error state update because importVMTask is null; state: {}, errorMsg: {}", + state, errorMsg); return; } ImportVMTaskVO importVMTaskVO = (ImportVMTaskVO) importVMTask; From 15c33ac6f8d49fbf5faed7f1f99d83727f1ac8db Mon Sep 17 00:00:00 2001 From: Saurabh Kushwaha Date: Sat, 13 Jun 2026 22:57:11 +0530 Subject: [PATCH 3/3] Fix debug log placeholder argument mapping in ImportVmTasksManagerImpl --- .../apache/cloudstack/vm/ImportVmTasksManagerImpl.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/server/src/main/java/org/apache/cloudstack/vm/ImportVmTasksManagerImpl.java b/server/src/main/java/org/apache/cloudstack/vm/ImportVmTasksManagerImpl.java index 92015aab098f..b06311731141 100644 --- a/server/src/main/java/org/apache/cloudstack/vm/ImportVmTasksManagerImpl.java +++ b/server/src/main/java/org/apache/cloudstack/vm/ImportVmTasksManagerImpl.java @@ -110,7 +110,7 @@ public ImportVmTask createImportVMTaskRecord(DataCenter zone, Account owner, lon String vcenter, String datacenterName, String sourceVMName, Host convertHost, Host importHost) { logger.debug("Creating import VM task entry for VM: {} for account {} on zone {} " + "from the vCenter: {} / datacenter: {} / source VM: {}", - sourceVMName, owner.getAccountName(), zone.getName(), displayName, vcenter, datacenterName); + displayName, owner.getAccountName(), zone.getName(), vcenter, datacenterName, sourceVMName); ImportVMTaskVO importVMTaskVO = new ImportVMTaskVO(zone.getId(), owner.getAccountId(), userId, displayName, vcenter, datacenterName, sourceVMName, convertHost.getId(), importHost.getId()); importVMTaskVO.setState(ImportVmTask.TaskState.Running); @@ -151,9 +151,9 @@ public void updateImportVMTaskStep(ImportVmTask importVMTask, DataCenter zone, A ImportVMTaskVO importVMTaskVO = (ImportVMTaskVO) importVMTask; logger.debug("Updating import VM task entry for VM: {} for account {} on zone {} " + "from the vCenter: {} / datacenter: {} / source VM: {} to step: {}", - importVMTaskVO.getSourceVMName(), owner.getAccountName(), zone.getName(), - importVMTaskVO.getDisplayName(), - importVMTaskVO.getVcenter(), importVMTaskVO.getDatacenter(), step); + importVMTaskVO.getDisplayName(), owner.getAccountName(), zone.getName(), + importVMTaskVO.getVcenter(), importVMTaskVO.getDatacenter(), + importVMTaskVO.getSourceVMName(), step); Date updatedDate = DateUtil.now(); String description = getStepDescription(importVMTaskVO, convertHost, importHost, step, updatedDate); importVMTaskVO.setStep(step);