This is an automated email from the ASF dual-hosted git repository.
dahn pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/main by this push:
new f9588960d43 Refactor: Replace sleep() with wait() (#10504)
f9588960d43 is described below
commit f9588960d43051ff2f921ace07c17ce0d711e963
Author: roopsai <[email protected]>
AuthorDate: Fri Jul 11 18:50:28 2025 +0530
Refactor: Replace sleep() with wait() (#10504)
---
.../cloud/agent/manager/DirectAgentAttache.java | 3 +-
.../src/main/java/com/cloud/utils/ThreadUtil.java | 40 ++++++++++++++++++++++
2 files changed, 42 insertions(+), 1 deletion(-)
diff --git
a/engine/orchestration/src/main/java/com/cloud/agent/manager/DirectAgentAttache.java
b/engine/orchestration/src/main/java/com/cloud/agent/manager/DirectAgentAttache.java
index 81148c5db30..ed18d1e82b7 100644
---
a/engine/orchestration/src/main/java/com/cloud/agent/manager/DirectAgentAttache.java
+++
b/engine/orchestration/src/main/java/com/cloud/agent/manager/DirectAgentAttache.java
@@ -23,6 +23,7 @@ import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
+import com.cloud.utils.ThreadUtil;
import org.apache.cloudstack.framework.config.ConfigKey;
import org.apache.cloudstack.managed.context.ManagedContextRunnable;
@@ -166,7 +167,7 @@ public class DirectAgentAttache extends AgentAttache {
PingCommand cmd = resource.getCurrentStatus(_id);
int retried = 0;
while (cmd == null && ++retried <=
_HostPingRetryCount.value()) {
- Thread.sleep(1000*_HostPingRetryTimer.value());
+ ThreadUtil.wait(this, 1000L
*_HostPingRetryTimer.value(), _id, _uuid, _name);
cmd = resource.getCurrentStatus(_id);
}
diff --git a/utils/src/main/java/com/cloud/utils/ThreadUtil.java
b/utils/src/main/java/com/cloud/utils/ThreadUtil.java
new file mode 100644
index 00000000000..5421a1fce4d
--- /dev/null
+++ b/utils/src/main/java/com/cloud/utils/ThreadUtil.java
@@ -0,0 +1,40 @@
+//
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+//
+
+package com.cloud.utils;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+public class ThreadUtil {
+
+ protected static Logger LOGGER =
LogManager.getLogger(AutoCloseableUtil.class);
+
+ public static void wait(Object object, long timeoutInMillis, long id,
String uuid, String name) {
+ synchronized (object) {
+ try {
+ object.wait(timeoutInMillis);
+ } catch (InterruptedException e) {
+ LOGGER.warn("PingTask interrupted while waiting to retry ping
[id: {}, uuid: {}, name: {}]", id, uuid, name, e);
+ Thread.currentThread().interrupt(); // Restore interrupted
status
+ }
+ }
+
+ }
+}