This is an automated email from the ASF dual-hosted git repository.

weizhou pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudstack.git

commit 842b2f8c2433f44ae743cba3480ccf69d9e1b02c
Merge: b17808bfba1 5444261902a
Author: Wei Zhou <weiz...@apache.org>
AuthorDate: Mon May 19 21:25:37 2025 +0200

    Merge remote-tracking branch 'apache/4.20'

 .../api/response/UnmanagedInstanceResponse.java    |  24 ++
 .../apache/cloudstack/vm/UnmanagedInstanceTO.java  |  19 ++
 .../agent/manager/ClusteredAgentManagerImpl.java   |  50 ++--
 .../com/cloud/vm/VirtualMachineManagerImpl.java    |  13 +
 .../manager/ClusteredAgentManagerImplTest.java     | 150 +++++++++++
 .../storage/endpoint/DefaultEndPointSelector.java  |   2 +-
 .../storage/volume/VolumeServiceImpl.java          |  24 +-
 .../cloudstack/backup/NASBackupProvider.java       |   2 +
 .../LibvirtRestoreBackupCommandWrapper.java        |   2 +-
 .../vmware/manager/VmwareManagerImpl.java          |  91 +++++--
 .../hypervisor/vmware/resource/VmwareResource.java | 132 +++++----
 .../resource/VmwareStorageLayoutHelper.java        |  40 ++-
 .../storage/resource/VmwareStorageProcessor.java   |  30 ++-
 .../api/command/admin/zone/ListVmwareDcVmsCmd.java |  19 ++
 .../CloudStackPrimaryDataStoreDriverImpl.java      |  11 +-
 .../datastore/provider/LinstorHostListener.java    |   4 +-
 .../main/java/com/cloud/api/ApiResponseHelper.java |   2 +
 .../configuration/ConfigurationManagerImpl.java    | 106 +++++---
 .../storage/snapshot/SnapshotManagerImpl.java      |   2 +-
 .../java/com/cloud/usage/UsageServiceImpl.java     |  17 +-
 .../main/java/com/cloud/vm/UserVmManagerImpl.java  |   2 +-
 .../configuration/ConfigurationManagerTest.java    |   6 +
 .../SecondaryStorageManagerImpl.java               |   8 +-
 test/integration/smoke/test_restore_vm.py          |  10 +-
 test/integration/smoke/test_ssvm.py                |   6 +
 tools/marvin/marvin/config/test_data.py            |   6 +-
 ui/.env.qa                                         |   1 +
 ui/public/locales/en.json                          |   1 +
 ui/src/components/header/ProjectMenu.vue           | 117 +++-----
 ui/src/components/widgets/InfiniteScrollSelect.vue | 298 +++++++++++++++++++++
 ui/src/views/AutogenView.vue                       |   2 +-
 ui/src/views/compute/EditVM.vue                    |   8 +-
 ui/src/views/network/CreateNetworkPermission.vue   | 124 +++------
 ui/src/views/tools/ManageInstances.vue             |  28 ++
 ui/src/views/tools/SelectVmwareVcenter.vue         |   7 +
 .../main/java/com/cloud/utils/script/Script.java   |  27 +-
 .../com/cloud/hypervisor/vmware/mo/BaseMO.java     | 107 ++++++++
 .../cloud/hypervisor/vmware/mo/DatacenterMO.java   |  44 +--
 .../hypervisor/vmware/mo/VirtualMachineMO.java     |  29 +-
 .../cloud/hypervisor/vmware/util/VmwareHelper.java |  13 +
 40 files changed, 1171 insertions(+), 413 deletions(-)

diff --cc 
engine/orchestration/src/main/java/com/cloud/agent/manager/ClusteredAgentManagerImpl.java
index 40899c7d8f4,724b824942b..8795c8d428f
--- 
a/engine/orchestration/src/main/java/com/cloud/agent/manager/ClusteredAgentManagerImpl.java
+++ 
b/engine/orchestration/src/main/java/com/cloud/agent/manager/ClusteredAgentManagerImpl.java
@@@ -951,10 -940,10 +961,10 @@@ public class ClusteredAgentManagerImpl 
                  try {
                      logger.trace("Clustered agent transfer scan check, 
management server id: {}",  _nodeId);
                      synchronized (_agentToTransferIds) {
 -                        if (_agentToTransferIds.size() > 0) {
 +                        if (!_agentToTransferIds.isEmpty()) {
                              logger.debug("Found {} agents to transfer", 
_agentToTransferIds.size());
                              // for (Long hostId : _agentToTransferIds) {
-                             for (final Iterator<Long> iterator = 
_agentToTransferIds.iterator(); iterator.hasNext();) {
+                             for (final Iterator<Long> iterator = 
_agentToTransferIds.iterator(); iterator.hasNext(); ) {
                                  final Long hostId = iterator.next();
                                  final AgentAttache attache = 
findAttache(hostId);
  
@@@ -1253,10 -1242,10 +1263,10 @@@
              }
  
              if (cmds.length == 1 && cmds[0] instanceof ChangeAgentCommand) { 
// intercepted
-                 final ChangeAgentCommand cmd = (ChangeAgentCommand)cmds[0];
+                 final ChangeAgentCommand cmd = (ChangeAgentCommand) cmds[0];
  
                  logger.debug("Intercepting command for agent change: agent {} 
event: {}", cmd.getAgentId(), cmd.getEvent());
 -                boolean result = false;
 +                boolean result;
                  try {
                      result = executeAgentUserRequest(cmd.getAgentId(), 
cmd.getEvent());
                      logger.debug("Result is {}", result);
@@@ -1270,12 -1259,12 +1280,12 @@@
                  answers[0] = new ChangeAgentAnswer(cmd, result);
                  return _gson.toJson(answers);
              } else if (cmds.length == 1 && cmds[0] instanceof 
TransferAgentCommand) {
-                 final TransferAgentCommand cmd = 
(TransferAgentCommand)cmds[0];
+                 final TransferAgentCommand cmd = (TransferAgentCommand) 
cmds[0];
  
 -                logger.debug("Intercepting command for agent rebalancing: 
agent {} event: {}", cmd.getAgentId(), cmd.getEvent());
 -                boolean result = false;
 +                logger.debug("Intercepting command for agent rebalancing: 
agent: {}, event: {}, connection transfer: {}", cmd.getAgentId(), 
cmd.getEvent(), cmd.isConnectionTransfer());
 +                boolean result;
                  try {
 -                    result = rebalanceAgent(cmd.getAgentId(), cmd.getEvent(), 
cmd.getCurrentOwner(), cmd.getFutureOwner());
 +                    result = rebalanceAgent(cmd.getAgentId(), cmd.getEvent(), 
cmd.getCurrentOwner(), cmd.getFutureOwner(), cmd.isConnectionTransfer());
                      logger.debug("Result is {}", result);
  
                  } catch (final AgentUnavailableException e) {
@@@ -1339,48 -1328,30 +1349,48 @@@
          }
  
          private String 
handleShutdownManagementServerHostCommand(BaseShutdownManagementServerHostCommand
 cmd) {
 +            if (cmd instanceof 
PrepareForMaintenanceManagementServerHostCommand) {
 +                logger.debug("Received 
PrepareForMaintenanceManagementServerHostCommand - preparing for maintenance");
 +                try {
 +                    
managementServerMaintenanceManager.prepareForMaintenance(((PrepareForMaintenanceManagementServerHostCommand)
 cmd).getLbAlgorithm());
 +                    return "Successfully prepared for maintenance";
 +                } catch(CloudRuntimeException e) {
 +                    return e.getMessage();
 +                }
 +            }
 +            if (cmd instanceof CancelMaintenanceManagementServerHostCommand) {
 +                logger.debug("Received 
CancelMaintenanceManagementServerHostCommand - cancelling maintenance");
 +                try {
 +                    managementServerMaintenanceManager.cancelMaintenance();
 +                    return "Successfully cancelled maintenance";
 +                } catch(CloudRuntimeException e) {
 +                    return e.getMessage();
 +                }
 +            }
              if (cmd instanceof PrepareForShutdownManagementServerHostCommand) 
{
 -                logger.debug("Received 
BaseShutdownManagementServerHostCommand - preparing to shut down");
 +                logger.debug("Received 
PrepareForShutdownManagementServerHostCommand - preparing to shut down");
                  try {
 -                    shutdownManager.prepareForShutdown();
 +                    managementServerMaintenanceManager.prepareForShutdown();
                      return "Successfully prepared for shutdown";
-                 } catch(CloudRuntimeException e) {
+                 } catch (CloudRuntimeException e) {
                      return e.getMessage();
                  }
              }
              if (cmd instanceof TriggerShutdownManagementServerHostCommand) {
                  logger.debug("Received 
TriggerShutdownManagementServerHostCommand - triggering a shut down");
                  try {
 -                    shutdownManager.triggerShutdown();
 +                    managementServerMaintenanceManager.triggerShutdown();
                      return "Successfully triggered shutdown";
-                 } catch(CloudRuntimeException e) {
+                 } catch (CloudRuntimeException e) {
                      return e.getMessage();
                  }
              }
              if (cmd instanceof CancelShutdownManagementServerHostCommand) {
                  logger.debug("Received 
CancelShutdownManagementServerHostCommand - cancelling shut down");
                  try {
 -                    shutdownManager.cancelShutdown();
 -                    return "Successfully prepared for shutdown";
 +                    managementServerMaintenanceManager.cancelShutdown();
 +                    return "Successfully cancelled shutdown";
-                 } catch(CloudRuntimeException e) {
+                 } catch (CloudRuntimeException e) {
                      return e.getMessage();
                  }
              }
diff --cc 
engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java
index e2e6f3c6f9d,47740b5b672..13475579f77
--- 
a/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java
+++ 
b/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java
@@@ -61,9 -61,12 +61,13 @@@ import org.apache.cloudstack.ca.CAManag
  import org.apache.cloudstack.context.CallContext;
  import 
org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
  import 
org.apache.cloudstack.engine.orchestration.service.VolumeOrchestrationService;
+ import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreDriver;
  import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
+ import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreProvider;
+ import 
org.apache.cloudstack.engine.subsystem.api.storage.DataStoreProviderManager;
+ import 
org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreDriver;
  import 
org.apache.cloudstack.engine.subsystem.api.storage.StoragePoolAllocator;
 +import org.apache.cloudstack.engine.subsystem.api.storage.VolumeDataFactory;
  import org.apache.cloudstack.framework.ca.Certificate;
  import org.apache.cloudstack.framework.config.ConfigKey;
  import org.apache.cloudstack.framework.config.Configurable;
diff --cc utils/src/main/java/com/cloud/utils/script/Script.java
index 71d50853c5c,fce4cf8e467..a1104b37c27
--- a/utils/src/main/java/com/cloud/utils/script/Script.java
+++ b/utils/src/main/java/com/cloud/utils/script/Script.java
@@@ -47,9 -47,9 +47,10 @@@ import org.apache.logging.log4j.LogMana
  import org.apache.logging.log4j.Logger;
  import org.joda.time.Duration;
  
 +import com.cloud.utils.exception.CloudRuntimeException;
  import com.cloud.utils.Pair;
  import com.cloud.utils.PropertiesUtil;
+ import com.cloud.utils.StringUtils;
  import com.cloud.utils.concurrency.NamedThreadFactory;
  import com.cloud.utils.script.OutputInterpreter.TimedOutLogger;
  

Reply via email to