From b8344d59624a69ff3bcaea7b34b6021ddd54d1f2 Mon Sep 17 00:00:00 2001 From: Stephan Krug Date: Wed, 9 Nov 2022 15:35:08 -0300 Subject: [PATCH 1/5] Externalize frequency --- agent/conf/agent.properties | 3 +++ .../java/com/cloud/agent/properties/AgentProperties.java | 8 ++++++++ .../java/com/cloud/hypervisor/kvm/resource/KVMHABase.java | 4 +++- 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/agent/conf/agent.properties b/agent/conf/agent.properties index b88da3621cd6..18e798cc43be 100644 --- a/agent/conf/agent.properties +++ b/agent/conf/agent.properties @@ -407,3 +407,6 @@ iscsi.session.cleanup.enabled=false # The path of an executable file/script for host health check for CloudStack to Auto Disable/Enable the host # depending on the return value of the file/script # agent.health.check.script.path= + +# Time interval (in milliseconds) between KVM heartbeats. +# kvm.heartbeat.update.frequency=60000 diff --git a/agent/src/main/java/com/cloud/agent/properties/AgentProperties.java b/agent/src/main/java/com/cloud/agent/properties/AgentProperties.java index 610c5be759f3..95cb703df457 100644 --- a/agent/src/main/java/com/cloud/agent/properties/AgentProperties.java +++ b/agent/src/main/java/com/cloud/agent/properties/AgentProperties.java @@ -740,6 +740,14 @@ public Property getWorkers() { */ public static final Property CONTROL_CIDR = new Property<>("control.cidr", "169.254.0.0/16"); + /** + * Time interval (in milliseconds) between KVM heartbeats.
+ * This property is for KVM only. + * Data type: Long.
+ * Default value: 60000l + */ + public static final Property KVM_HEARTBEAT_UPDATE_FREQUENCY = new Property("kvm.heartbeat.update.frequency", 60000l); + public static class Property { private String name; private T defaultValue; diff --git a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/KVMHABase.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/KVMHABase.java index 093070fddd6d..292d7f333805 100644 --- a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/KVMHABase.java +++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/KVMHABase.java @@ -18,6 +18,8 @@ import java.io.File; +import com.cloud.agent.properties.AgentProperties; +import com.cloud.agent.properties.AgentPropertiesFileHandler; import org.apache.log4j.Logger; import org.libvirt.LibvirtException; import org.libvirt.StoragePool; @@ -34,7 +36,7 @@ public class KVMHABase { private long _timeout = 60000; /* 1 minutes */ protected static String s_heartBeatPath; protected long _heartBeatUpdateTimeout = 60000; - protected long _heartBeatUpdateFreq = 60000; + protected long _heartBeatUpdateFreq = AgentPropertiesFileHandler.getPropertyValue(AgentProperties.KVM_HEARTBEAT_UPDATE_FREQUENCY); protected long _heartBeatUpdateMaxTries = 5; protected long _heartBeatUpdateRetrySleep = 10000; From 53d17ae938e198570cbb04eafc344ef457493df3 Mon Sep 17 00:00:00 2001 From: Stephan Krug Date: Tue, 17 Jan 2023 17:15:39 -0300 Subject: [PATCH 2/5] Fix code smell and move import --- .../main/java/com/cloud/agent/properties/AgentProperties.java | 2 +- .../java/com/cloud/hypervisor/kvm/resource/KVMHABase.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/agent/src/main/java/com/cloud/agent/properties/AgentProperties.java b/agent/src/main/java/com/cloud/agent/properties/AgentProperties.java index 95cb703df457..2896694ff056 100644 --- a/agent/src/main/java/com/cloud/agent/properties/AgentProperties.java +++ b/agent/src/main/java/com/cloud/agent/properties/AgentProperties.java @@ -746,7 +746,7 @@ public Property getWorkers() { * Data type: Long.
* Default value: 60000l */ - public static final Property KVM_HEARTBEAT_UPDATE_FREQUENCY = new Property("kvm.heartbeat.update.frequency", 60000l); + public static final Property KVM_HEARTBEAT_UPDATE_FREQUENCY = new Property<>("kvm.heartbeat.update.frequency", 60000l); public static class Property { private String name; diff --git a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/KVMHABase.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/KVMHABase.java index 292d7f333805..5409c9c8cd85 100644 --- a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/KVMHABase.java +++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/KVMHABase.java @@ -18,8 +18,6 @@ import java.io.File; -import com.cloud.agent.properties.AgentProperties; -import com.cloud.agent.properties.AgentPropertiesFileHandler; import org.apache.log4j.Logger; import org.libvirt.LibvirtException; import org.libvirt.StoragePool; @@ -30,6 +28,8 @@ import com.cloud.utils.script.OutputInterpreter; import com.cloud.utils.script.OutputInterpreter.AllLinesParser; import com.cloud.utils.script.Script; +import com.cloud.agent.properties.AgentProperties; +import com.cloud.agent.properties.AgentPropertiesFileHandler; public class KVMHABase { private static final Logger s_logger = Logger.getLogger(KVMHABase.class); From 31e6df9f3bc71a426e60416a97178728c1a8124c Mon Sep 17 00:00:00 2001 From: Stephan Krug Date: Thu, 2 Feb 2023 17:55:52 -0300 Subject: [PATCH 3/5] Externalize additional KVM HA properties --- agent/conf/agent.properties | 9 ++++++ .../agent/properties/AgentProperties.java | 30 +++++++++++++++++-- .../hypervisor/kvm/resource/KVMHABase.java | 6 ++-- .../hypervisor/kvm/resource/KVMHAMonitor.java | 1 - .../kvm/storage/KVMStoragePool.java | 12 ++++---- 5 files changed, 46 insertions(+), 12 deletions(-) diff --git a/agent/conf/agent.properties b/agent/conf/agent.properties index 18e798cc43be..3f07ba16237e 100644 --- a/agent/conf/agent.properties +++ b/agent/conf/agent.properties @@ -410,3 +410,12 @@ iscsi.session.cleanup.enabled=false # Time interval (in milliseconds) between KVM heartbeats. # kvm.heartbeat.update.frequency=60000 + +# Number of maximum tries to KVM heartbeats. +# kvm.heartbeat.update.max.tries=5 + +# Time amount (in milliseconds) for the KVM heartbeat retry sleep. +# kvm.heartbeat.update.retry.sleep=10000 + +# Timeout (in milliseconds) of the KVM heartbeat checker. +# kvm.heartbeat.checker.timeout=360000 diff --git a/agent/src/main/java/com/cloud/agent/properties/AgentProperties.java b/agent/src/main/java/com/cloud/agent/properties/AgentProperties.java index 2896694ff056..6cf85a42d71f 100644 --- a/agent/src/main/java/com/cloud/agent/properties/AgentProperties.java +++ b/agent/src/main/java/com/cloud/agent/properties/AgentProperties.java @@ -539,10 +539,10 @@ public class AgentProperties{ /** * Heartbeat update timeout (in ms).
* Depending on the use case, this timeout might need increasing/decreasing.
- * Data type: Integer.
- * Default value: 60000 + * Data type: Long.
+ * Default value: 60000l */ - public static final Property HEARTBEAT_UPDATE_TIMEOUT = new Property<>("heartbeat.update.timeout", 60000); + public static final Property HEARTBEAT_UPDATE_TIMEOUT = new Property<>("heartbeat.update.timeout", 60000l); /** * The timeout (in seconds) to retrieve the target's domain ID when migrating a VM with KVM.
@@ -748,6 +748,30 @@ public Property getWorkers() { */ public static final Property KVM_HEARTBEAT_UPDATE_FREQUENCY = new Property<>("kvm.heartbeat.update.frequency", 60000l); + /** + * Number of maximum tries to KVM heartbeats.
+ * This property is for KVM only. + * Data type: Long.
+ * Default value: 5l + */ + public static final Property KVM_HEARTBEAT_UPDATE_MAX_TRIES = new Property<>("kvm.heartbeat.update.max.tries", 5l); + + /** + * Time amount (in milliseconds) for the KVM heartbeat retry sleep.
+ * This property is for KVM only. + * Data type: Long.
+ * Default value: 10000l + */ + public static final Property KVM_HEARTBEAT_UPDATE_RETRY_SLEEP = new Property<>("kvm.heartbeat.update.retry.sleep", 10000l); + + /** + * Timeout (in milliseconds) of the KVM heartbeat checker.
+ * This property is for KVM only. + * Data type: Long.
+ * Default value: 360000l + */ + public static final Property KVM_HEARTBEAT_CHECKER_TIMEOUT = new Property<>("kvm.heartbeat.checker.timeout", 360000l); + public static class Property { private String name; private T defaultValue; diff --git a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/KVMHABase.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/KVMHABase.java index 5409c9c8cd85..b9abea4f0bce 100644 --- a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/KVMHABase.java +++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/KVMHABase.java @@ -35,10 +35,10 @@ public class KVMHABase { private static final Logger s_logger = Logger.getLogger(KVMHABase.class); private long _timeout = 60000; /* 1 minutes */ protected static String s_heartBeatPath; - protected long _heartBeatUpdateTimeout = 60000; + protected long _heartBeatUpdateTimeout = AgentPropertiesFileHandler.getPropertyValue(AgentProperties.HEARTBEAT_UPDATE_TIMEOUT); protected long _heartBeatUpdateFreq = AgentPropertiesFileHandler.getPropertyValue(AgentProperties.KVM_HEARTBEAT_UPDATE_FREQUENCY); - protected long _heartBeatUpdateMaxTries = 5; - protected long _heartBeatUpdateRetrySleep = 10000; + protected long _heartBeatUpdateMaxTries = AgentPropertiesFileHandler.getPropertyValue(AgentProperties.KVM_HEARTBEAT_UPDATE_MAX_TRIES); + protected long _heartBeatUpdateRetrySleep = AgentPropertiesFileHandler.getPropertyValue(AgentProperties.KVM_HEARTBEAT_UPDATE_RETRY_SLEEP); public static enum PoolType { PrimaryStorage, SecondaryStorage diff --git a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/KVMHAMonitor.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/KVMHAMonitor.java index 72944b54e92c..eb09408c14ed 100644 --- a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/KVMHAMonitor.java +++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/KVMHAMonitor.java @@ -48,7 +48,6 @@ public KVMHAMonitor(HAStoragePool pool, String host, String scriptPath) { hostPrivateIp = host; configureHeartBeatPath(scriptPath); - _heartBeatUpdateTimeout = AgentPropertiesFileHandler.getPropertyValue(AgentProperties.HEARTBEAT_UPDATE_TIMEOUT); rebootHostAndAlertManagementOnHeartbeatTimeout = AgentPropertiesFileHandler.getPropertyValue(AgentProperties.REBOOT_HOST_AND_ALERT_MANAGEMENT_ON_HEARTBEAT_TIMEOUT); } diff --git a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/KVMStoragePool.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/KVMStoragePool.java index 98e779253cc3..43a09ccf2bf9 100644 --- a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/KVMStoragePool.java +++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/KVMStoragePool.java @@ -19,6 +19,8 @@ import java.util.List; import java.util.Map; +import com.cloud.agent.properties.AgentProperties; +import com.cloud.agent.properties.AgentPropertiesFileHandler; import org.apache.cloudstack.utils.qemu.QemuImg.PhysicalDiskFormat; import org.joda.time.Duration; @@ -29,11 +31,11 @@ public interface KVMStoragePool { - public static final long HeartBeatUpdateTimeout = 60000; - public static final long HeartBeatUpdateFreq = 60000; - public static final long HeartBeatUpdateMaxTries = 5; - public static final long HeartBeatUpdateRetrySleep = 10000; - public static final long HeartBeatCheckerTimeout = 360000; // 6 minutes + public static final long HeartBeatUpdateTimeout = AgentPropertiesFileHandler.getPropertyValue(AgentProperties.HEARTBEAT_UPDATE_TIMEOUT); + public static final long HeartBeatUpdateFreq = AgentPropertiesFileHandler.getPropertyValue(AgentProperties.KVM_HEARTBEAT_UPDATE_FREQUENCY); + public static final long HeartBeatUpdateMaxTries = AgentPropertiesFileHandler.getPropertyValue(AgentProperties.KVM_HEARTBEAT_UPDATE_MAX_TRIES); + public static final long HeartBeatUpdateRetrySleep = AgentPropertiesFileHandler.getPropertyValue(AgentProperties.KVM_HEARTBEAT_UPDATE_RETRY_SLEEP); + public static final long HeartBeatCheckerTimeout = AgentPropertiesFileHandler.getPropertyValue(AgentProperties.KVM_HEARTBEAT_CHECKER_TIMEOUT); public KVMPhysicalDisk createPhysicalDisk(String volumeUuid, PhysicalDiskFormat format, Storage.ProvisioningType provisioningType, long size, byte[] passphrase); From 6a86a7b4eb5fd690ba33b947bd6e2336c2b9b511 Mon Sep 17 00:00:00 2001 From: GaOrtiga <49285692+GaOrtiga@users.noreply.github.com> Date: Tue, 10 Oct 2023 11:59:52 -0300 Subject: [PATCH 4/5] Apply suggestions from code review Co-authored-by: dahn --- .../com/cloud/agent/properties/AgentProperties.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/agent/src/main/java/com/cloud/agent/properties/AgentProperties.java b/agent/src/main/java/com/cloud/agent/properties/AgentProperties.java index 6cf85a42d71f..2c1448877f19 100644 --- a/agent/src/main/java/com/cloud/agent/properties/AgentProperties.java +++ b/agent/src/main/java/com/cloud/agent/properties/AgentProperties.java @@ -540,9 +540,9 @@ public class AgentProperties{ * Heartbeat update timeout (in ms).
* Depending on the use case, this timeout might need increasing/decreasing.
* Data type: Long.
- * Default value: 60000l + * Default value: 60000L */ - public static final Property HEARTBEAT_UPDATE_TIMEOUT = new Property<>("heartbeat.update.timeout", 60000l); + public static final Property HEARTBEAT_UPDATE_TIMEOUT = new Property<>("heartbeat.update.timeout", 60000L); /** * The timeout (in seconds) to retrieve the target's domain ID when migrating a VM with KVM.
@@ -746,7 +746,7 @@ public Property getWorkers() { * Data type: Long.
* Default value: 60000l */ - public static final Property KVM_HEARTBEAT_UPDATE_FREQUENCY = new Property<>("kvm.heartbeat.update.frequency", 60000l); + public static final Property KVM_HEARTBEAT_UPDATE_FREQUENCY = new Property<>("kvm.heartbeat.update.frequency", 60000L); /** * Number of maximum tries to KVM heartbeats.
@@ -754,7 +754,7 @@ public Property getWorkers() { * Data type: Long.
* Default value: 5l */ - public static final Property KVM_HEARTBEAT_UPDATE_MAX_TRIES = new Property<>("kvm.heartbeat.update.max.tries", 5l); + public static final Property KVM_HEARTBEAT_UPDATE_MAX_TRIES = new Property<>("kvm.heartbeat.update.max.tries", 5L); /** * Time amount (in milliseconds) for the KVM heartbeat retry sleep.
@@ -762,7 +762,7 @@ public Property getWorkers() { * Data type: Long.
* Default value: 10000l */ - public static final Property KVM_HEARTBEAT_UPDATE_RETRY_SLEEP = new Property<>("kvm.heartbeat.update.retry.sleep", 10000l); + public static final Property KVM_HEARTBEAT_UPDATE_RETRY_SLEEP = new Property<>("kvm.heartbeat.update.retry.sleep", 10000L); /** * Timeout (in milliseconds) of the KVM heartbeat checker.
From 5b68672d472a03ddc41476b415b75f635cc2d430 Mon Sep 17 00:00:00 2001 From: GaOrtiga <49285692+GaOrtiga@users.noreply.github.com> Date: Wed, 11 Oct 2023 09:53:15 -0300 Subject: [PATCH 5/5] Update agent/src/main/java/com/cloud/agent/properties/AgentProperties.java Co-authored-by: dahn --- .../main/java/com/cloud/agent/properties/AgentProperties.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/agent/src/main/java/com/cloud/agent/properties/AgentProperties.java b/agent/src/main/java/com/cloud/agent/properties/AgentProperties.java index 2c1448877f19..8f51d470f07a 100644 --- a/agent/src/main/java/com/cloud/agent/properties/AgentProperties.java +++ b/agent/src/main/java/com/cloud/agent/properties/AgentProperties.java @@ -770,7 +770,7 @@ public Property getWorkers() { * Data type: Long.
* Default value: 360000l */ - public static final Property KVM_HEARTBEAT_CHECKER_TIMEOUT = new Property<>("kvm.heartbeat.checker.timeout", 360000l); + public static final Property KVM_HEARTBEAT_CHECKER_TIMEOUT = new Property<>("kvm.heartbeat.checker.timeout", 360000L); public static class Property { private String name;