You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by da...@apache.org on 2020/10/14 16:50:08 UTC
[cloudstack] branch master updated: Dont add host back after agent
service restart (#4228)
This is an automated email from the ASF dual-hosted git repository.
dahn pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/master by this push:
new 6c88e9a Dont add host back after agent service restart (#4228)
6c88e9a is described below
commit 6c88e9afb39f5a9aee131ddaaa0b7b74e5ee80fb
Author: Rakesh <ra...@gmail.com>
AuthorDate: Wed Oct 14 18:49:39 2020 +0200
Dont add host back after agent service restart (#4228)
---
agent/src/main/java/com/cloud/agent/Agent.java | 16 ++++++++++++++++
.../main/java/com/cloud/agent/api/ShutdownCommand.java | 12 ++++++++++++
.../cloud/configuration/ConfigurationManagerImpl.java | 7 ++++++-
.../kvm/discoverer/LibvirtServerDiscoverer.java | 5 ++++-
4 files changed, 38 insertions(+), 2 deletions(-)
diff --git a/agent/src/main/java/com/cloud/agent/Agent.java b/agent/src/main/java/com/cloud/agent/Agent.java
index 1f2f485..144f7ef 100644
--- a/agent/src/main/java/com/cloud/agent/Agent.java
+++ b/agent/src/main/java/com/cloud/agent/Agent.java
@@ -420,6 +420,19 @@ public class Agent implements HandlerFactory, IAgentControl {
}
}
+ /**
+ * Cleanup agent zone properties.
+ *
+ * Unset zone, cluster and pod values so that host is not added back
+ * when service is restarted. This will be set to proper values
+ * when host is added back
+ */
+ protected void cleanupAgentZoneProperties() {
+ _shell.setPersistentProperty(null, "zone", "");
+ _shell.setPersistentProperty(null, "cluster", "");
+ _shell.setPersistentProperty(null, "pod", "");
+ }
+
public synchronized void lockStartupTask(final Link link) {
_startup = new StartupTask(link);
_timer.schedule(_startup, _startupWait);
@@ -603,6 +616,9 @@ public class Agent implements HandlerFactory, IAgentControl {
final ShutdownCommand shutdown = (ShutdownCommand)cmd;
s_logger.debug("Received shutdownCommand, due to: " + shutdown.getReason());
cancelTasks();
+ if (shutdown.isRemoveHost()) {
+ cleanupAgentZoneProperties();
+ }
_reconnectAllowed = false;
answer = new Answer(cmd, true, null);
} else if (cmd instanceof ReadyCommand && ((ReadyCommand)cmd).getDetails() != null) {
diff --git a/core/src/main/java/com/cloud/agent/api/ShutdownCommand.java b/core/src/main/java/com/cloud/agent/api/ShutdownCommand.java
index 3c0571c..d36621d 100644
--- a/core/src/main/java/com/cloud/agent/api/ShutdownCommand.java
+++ b/core/src/main/java/com/cloud/agent/api/ShutdownCommand.java
@@ -30,6 +30,7 @@ public class ShutdownCommand extends Command {
private String reason;
private String detail;
+ private boolean removeHost;
protected ShutdownCommand() {
super();
@@ -41,6 +42,13 @@ public class ShutdownCommand extends Command {
this.detail = detail;
}
+ public ShutdownCommand(String reason, String detail, boolean removeHost) {
+ super();
+ this.reason = reason;
+ this.detail = detail;
+ this.removeHost = removeHost;
+ }
+
/**
* @return return the reason the agent shutdown. If Unknown, call getDetail() for any details.
*/
@@ -52,6 +60,10 @@ public class ShutdownCommand extends Command {
return detail;
}
+ public boolean isRemoveHost() {
+ return removeHost;
+ }
+
@Override
public boolean executeInSequence() {
return true;
diff --git a/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java
index 412fa7f..0ad3563 100755
--- a/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java
+++ b/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java
@@ -411,6 +411,10 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
public final static ConfigKey<Long> IOPS_MAX_WRITE_LENGTH = new ConfigKey<Long>(Long.class, "vm.disk.iops.maximum.write.length", "Advanced", "0",
"Maximum IOPS write burst duration (seconds). If '0' (zero) then does not check for maximum burst length.", true, ConfigKey.Scope.Global, null);
+ public static final ConfigKey<Boolean> ADD_HOST_ON_SERVICE_RESTART_KVM = new ConfigKey<Boolean>(Boolean.class, "add.host.on.service.restart.kvm", "Advanced", "true",
+ "Indicates whether the host will be added back to cloudstack after restarting agent service on host. If false it wont be added back even after service restart",
+ true, ConfigKey.Scope.Global, null);
+
private static final String IOPS_READ_RATE = "IOPS Read";
private static final String IOPS_WRITE_RATE = "IOPS Write";
private static final String BYTES_READ_RATE = "Bytes Read";
@@ -6381,6 +6385,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
@Override
public ConfigKey<?>[] getConfigKeys() {
- return new ConfigKey<?>[] {SystemVMUseLocalStorage, IOPS_MAX_READ_LENGTH, IOPS_MAX_WRITE_LENGTH, BYTES_MAX_READ_LENGTH, BYTES_MAX_WRITE_LENGTH};
+ return new ConfigKey<?>[] {SystemVMUseLocalStorage, IOPS_MAX_READ_LENGTH, IOPS_MAX_WRITE_LENGTH,
+ BYTES_MAX_READ_LENGTH, BYTES_MAX_WRITE_LENGTH, ADD_HOST_ON_SERVICE_RESTART_KVM};
}
}
diff --git a/server/src/main/java/com/cloud/hypervisor/kvm/discoverer/LibvirtServerDiscoverer.java b/server/src/main/java/com/cloud/hypervisor/kvm/discoverer/LibvirtServerDiscoverer.java
index 904a488..eaa5fea 100644
--- a/server/src/main/java/com/cloud/hypervisor/kvm/discoverer/LibvirtServerDiscoverer.java
+++ b/server/src/main/java/com/cloud/hypervisor/kvm/discoverer/LibvirtServerDiscoverer.java
@@ -67,6 +67,8 @@ import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.utils.ssh.SSHCmdHelper;
import com.trilead.ssh2.Connection;
+import static com.cloud.configuration.ConfigurationManagerImpl.ADD_HOST_ON_SERVICE_RESTART_KVM;
+
public abstract class LibvirtServerDiscoverer extends DiscovererBase implements Discoverer, Listener, ResourceStateAdapter {
private static final Logger s_logger = Logger.getLogger(LibvirtServerDiscoverer.class);
private final int _waitTime = 5; /* wait for 5 minutes */
@@ -348,6 +350,7 @@ public abstract class LibvirtServerDiscoverer extends DiscovererBase implements
_hostDao.saveDetails(connectedHost);
return resources;
} catch (DiscoveredWithErrorException e) {
+ s_logger.error("DiscoveredWithErrorException caught and rethrowing, message: "+ e.getMessage());
throw e;
} catch (Exception e) {
String msg = " can't setup agent, due to " + e.toString() + " - " + e.getMessage();
@@ -474,7 +477,7 @@ public abstract class LibvirtServerDiscoverer extends DiscovererBase implements
_resourceMgr.deleteRoutingHost(host, isForced, isForceDeleteStorage);
try {
- ShutdownCommand cmd = new ShutdownCommand(ShutdownCommand.DeleteHost, null);
+ ShutdownCommand cmd = new ShutdownCommand(ShutdownCommand.DeleteHost, null, !ADD_HOST_ON_SERVICE_RESTART_KVM.value());
agentMgr.send(host.getId(), cmd);
} catch (AgentUnavailableException e) {
s_logger.warn("Sending ShutdownCommand failed: ", e);