From 97d42e9980f04aa5a9e82c6c7f4a3bf149084ace Mon Sep 17 00:00:00 2001 From: Nicolas Vazquez Date: Mon, 14 Feb 2022 23:52:45 -0300 Subject: [PATCH] Fix: allow executing CopyCommand operations in parallel when it is set (#5960) * Invoke the hypervisor guru instead of the guru cycle * Refactor * Remove unused import * Refactor error --- .../java/com/cloud/hypervisor/HypervisorGuruManager.java | 2 ++ .../java/com/cloud/agent/manager/AgentManagerImpl.java | 9 +++++++-- .../com/cloud/hypervisor/HypervisorGuruManagerImpl.java | 7 +++++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/engine/components-api/src/main/java/com/cloud/hypervisor/HypervisorGuruManager.java b/engine/components-api/src/main/java/com/cloud/hypervisor/HypervisorGuruManager.java index 82716cae7cb..cb0307ab88e 100644 --- a/engine/components-api/src/main/java/com/cloud/hypervisor/HypervisorGuruManager.java +++ b/engine/components-api/src/main/java/com/cloud/hypervisor/HypervisorGuruManager.java @@ -24,4 +24,6 @@ public interface HypervisorGuruManager extends Manager { HypervisorGuru getGuru(HypervisorType hypervisorType); long getGuruProcessedCommandTargetHost(long hostId, Command cmd); + + long getGuruProcessedCommandTargetHost(long hostId, Command cmd, HypervisorType hypervisorType); } diff --git a/engine/orchestration/src/main/java/com/cloud/agent/manager/AgentManagerImpl.java b/engine/orchestration/src/main/java/com/cloud/agent/manager/AgentManagerImpl.java index 2c48cda7d24..8d46bc8c39d 100644 --- a/engine/orchestration/src/main/java/com/cloud/agent/manager/AgentManagerImpl.java +++ b/engine/orchestration/src/main/java/com/cloud/agent/manager/AgentManagerImpl.java @@ -342,10 +342,15 @@ public class AgentManagerImpl extends ManagerBase implements AgentManager, Handl } Answer answer = null; try { - - final long targetHostId = _hvGuruMgr.getGuruProcessedCommandTargetHost(host.getId(), cmd); + final long targetHostId = _hvGuruMgr.getGuruProcessedCommandTargetHost(host.getId(), cmd, host.getHypervisorType()); answer = easySend(targetHostId, cmd); } catch (final Exception e) { + String errorMsg = String.format("Error sending command %s to host %s, due to %s", cmd.getClass().getName(), + host.getUuid(), e.getLocalizedMessage()); + s_logger.error(errorMsg); + if (s_logger.isDebugEnabled()) { + s_logger.debug(errorMsg, e); + } } if (answer != null) { return answer; diff --git a/server/src/main/java/com/cloud/hypervisor/HypervisorGuruManagerImpl.java b/server/src/main/java/com/cloud/hypervisor/HypervisorGuruManagerImpl.java index 02778cbed4e..a5f1f9fa5cb 100644 --- a/server/src/main/java/com/cloud/hypervisor/HypervisorGuruManagerImpl.java +++ b/server/src/main/java/com/cloud/hypervisor/HypervisorGuruManagerImpl.java @@ -81,6 +81,13 @@ public class HypervisorGuruManagerImpl extends ManagerBase implements Hypervisor return hostId; } + @Override + public long getGuruProcessedCommandTargetHost(long hostId, Command cmd, HypervisorType hypervisorType) { + HypervisorGuru guru = getGuru(hypervisorType); + Pair result = guru.getCommandHostDelegation(hostId, cmd); + return result.first() ? result.second() : hostId; + } + public List getHvGuruList() { return _hvGuruList; }