Skip to content

Commit f958896

Browse files
authored
Refactor: Replace sleep() with wait() (#10504)
1 parent 51126a7 commit f958896

File tree

2 files changed

+42
-1
lines changed

2 files changed

+42
-1
lines changed

engine/orchestration/src/main/java/com/cloud/agent/manager/DirectAgentAttache.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import java.util.concurrent.TimeUnit;
2424
import java.util.concurrent.atomic.AtomicInteger;
2525

26+
import com.cloud.utils.ThreadUtil;
2627
import org.apache.cloudstack.framework.config.ConfigKey;
2728
import org.apache.cloudstack.managed.context.ManagedContextRunnable;
2829

@@ -166,7 +167,7 @@ protected synchronized void runInContext() {
166167
PingCommand cmd = resource.getCurrentStatus(_id);
167168
int retried = 0;
168169
while (cmd == null && ++retried <= _HostPingRetryCount.value()) {
169-
Thread.sleep(1000*_HostPingRetryTimer.value());
170+
ThreadUtil.wait(this, 1000L *_HostPingRetryTimer.value(), _id, _uuid, _name);
170171
cmd = resource.getCurrentStatus(_id);
171172
}
172173

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
//
2+
// Licensed to the Apache Software Foundation (ASF) under one
3+
// or more contributor license agreements. See the NOTICE file
4+
// distributed with this work for additional information
5+
// regarding copyright ownership. The ASF licenses this file
6+
// to you under the Apache License, Version 2.0 (the
7+
// "License"); you may not use this file except in compliance
8+
// with the License. You may obtain a copy of the License at
9+
//
10+
// http://www.apache.org/licenses/LICENSE-2.0
11+
//
12+
// Unless required by applicable law or agreed to in writing,
13+
// software distributed under the License is distributed on an
14+
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
// KIND, either express or implied. See the License for the
16+
// specific language governing permissions and limitations
17+
// under the License.
18+
//
19+
20+
package com.cloud.utils;
21+
22+
import org.apache.logging.log4j.LogManager;
23+
import org.apache.logging.log4j.Logger;
24+
25+
public class ThreadUtil {
26+
27+
protected static Logger LOGGER = LogManager.getLogger(AutoCloseableUtil.class);
28+
29+
public static void wait(Object object, long timeoutInMillis, long id, String uuid, String name) {
30+
synchronized (object) {
31+
try {
32+
object.wait(timeoutInMillis);
33+
} catch (InterruptedException e) {
34+
LOGGER.warn("PingTask interrupted while waiting to retry ping [id: {}, uuid: {}, name: {}]", id, uuid, name, e);
35+
Thread.currentThread().interrupt(); // Restore interrupted status
36+
}
37+
}
38+
39+
}
40+
}

0 commit comments

Comments
 (0)