]> git.basschouten.com Git - openhab-addons.git/commitdiff
[openhabcloud] sleepSocketIO(long delay) halts entire io.socket thread #13210 (#13421)
authorFelix Lo <lsafelix75@gmail.com>
Mon, 3 Oct 2022 17:43:43 +0000 (01:43 +0800)
committerGitHub <noreply@github.com>
Mon, 3 Oct 2022 17:43:43 +0000 (19:43 +0200)
* sleepSocketIO(long delay) halts entire io.socket thread CI #6047

Signed-off-by: lsafelix75 <lsafelix75@gmail.com>
bundles/org.openhab.io.openhabcloud/src/main/java/org/openhab/io/openhabcloud/internal/CloudClient.java

index e7013f55f0960fd8a76d589968cfa3a476dc3db9..c7df163459298828242e9e4197a9417a8000a478 100644 (file)
@@ -24,6 +24,8 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
 
 import org.eclipse.jdt.annotation.Nullable;
 import org.eclipse.jetty.client.HttpClient;
@@ -38,6 +40,7 @@ import org.eclipse.jetty.util.URIUtil;
 import org.json.JSONException;
 import org.json.JSONObject;
 import org.openhab.core.OpenHAB;
+import org.openhab.core.common.ThreadPoolManager;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -50,7 +53,6 @@ import io.socket.emitter.Emitter;
 import io.socket.engineio.client.Transport;
 import io.socket.parser.Packet;
 import io.socket.parser.Parser;
-import io.socket.thread.EventThread;
 import okhttp3.OkHttpClient.Builder;
 import okhttp3.logging.HttpLoggingInterceptor;
 import okhttp3.logging.HttpLoggingInterceptor.Level;
@@ -135,6 +137,13 @@ public class CloudClient {
      */
     private final Backoff reconnectBackoff = new Backoff();
 
+    /*
+     * Delay reconnect scheduler pool
+     * 
+     */
+    protected final ScheduledExecutorService scheduler = ThreadPoolManager
+            .getScheduledPool(ThreadPoolManager.THREAD_POOL_NAME_COMMON);
+
     /**
      * Constructor of CloudClient
      *
@@ -316,8 +325,12 @@ public class CloudClient {
                             logger.warn("Error connecting to the openHAB Cloud instance. Reconnecting.");
                         }
                         socket.close();
-                        sleepSocketIO(delay);
-                        socket.connect();
+                        scheduler.schedule(new Runnable() {
+                            @Override
+                            public void run() {
+                                socket.connect();
+                            }
+                        }, delay, TimeUnit.MILLISECONDS);
                     }
                 })//
 
@@ -685,16 +698,6 @@ public class CloudClient {
         return headersJSON;
     }
 
-    private void sleepSocketIO(long delay) {
-        EventThread.exec(() -> {
-            try {
-                Thread.sleep(delay);
-            } catch (InterruptedException e) {
-
-            }
-        });
-    }
-
     private static String censored(String secret) {
         if (secret.length() < 4) {
             return "*******";