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; }