This is an automated email from the ASF dual-hosted git repository.

mikexue pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/eventmesh.git


The following commit(s) were added to refs/heads/master by this push:
     new 08fabd20e [ISSUE #4060]Use AbstractRetryer to unify GrpcRetryer, 
HttpRetryer and EventMeshTcpRetryer
08fabd20e is described below

commit 08fabd20ec6fcf23ad8197eb21b9f9ffec96e3ea
Author: pandaapo <[email protected]>
AuthorDate: Fri Sep 22 17:48:48 2023 +0800

    [ISSUE #4060]Use AbstractRetryer to unify GrpcRetryer, HttpRetryer and 
EventMeshTcpRetryer
---
 .../runtime/core/protocol/AbstractRetryer.java     | 87 ++++++++++++++++++++++
 .../core/protocol/grpc/retry/GrpcRetryer.java      | 57 ++------------
 .../core/protocol/http/retry/HttpRetryer.java      | 63 ++--------------
 .../client/session/retry/EventMeshTcpRetryer.java  | 51 ++-----------
 .../runtime/metrics/grpc/EventMeshGrpcMonitor.java |  2 +-
 .../runtime/metrics/http/HTTPMetricsServer.java    |  4 +-
 6 files changed, 112 insertions(+), 152 deletions(-)

diff --git 
a/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/AbstractRetryer.java
 
b/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/AbstractRetryer.java
new file mode 100644
index 000000000..3bfa13f87
--- /dev/null
+++ 
b/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/AbstractRetryer.java
@@ -0,0 +1,87 @@
+/*
+ * 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 org.apache.eventmesh.runtime.core.protocol;
+
+import java.util.concurrent.DelayQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+public abstract class AbstractRetryer {
+
+    protected final DelayQueue<DelayRetryable> retrys = new DelayQueue<>();
+
+    protected ThreadPoolExecutor pool;
+
+    protected Thread dispatcher;
+
+    protected abstract void pushRetry(DelayRetryable delayRetryable);
+
+    protected abstract void init();
+
+    public int getRetrySize() {
+        return retrys.size();
+    }
+
+    protected void initDispatcher(Thread dispatcher) {
+        dispatcher = new Thread(() -> {
+            try {
+                DelayRetryable retryObj;
+                while (!Thread.currentThread().isInterrupted() && (retryObj = 
retrys.take()) != null) {
+                    final DelayRetryable delayRetryable = retryObj;
+                    pool.execute(() -> {
+                        try {
+                            delayRetryable.retry();
+                            if (log.isDebugEnabled()) {
+                                log.debug("retryObj : {}", delayRetryable);
+                            }
+                        } catch (Exception e) {
+                            log.error("retry-dispatcher error!", e);
+                        }
+                    });
+                }
+            } catch (Exception e) {
+                if (e instanceof InterruptedException) {
+                    Thread.currentThread().interrupt();
+                }
+                log.error("retry-dispatcher error!", e);
+            }
+        }, "retry-dispatcher");
+        dispatcher.setDaemon(true);
+        log.info("EventMesh retryer inited......");
+    }
+
+    public void shutdown() {
+        dispatcher.interrupt();
+        pool.shutdown();
+        log.info("EventMesh retryer shutdown......");
+    }
+
+    public void start() throws Exception {
+        dispatcher.start();
+        log.info("EventMesh retryer started......");
+    }
+
+    /**
+     * Get fail-retry queue, this method is just used for metrics.
+     */
+    public DelayQueue<DelayRetryable> getRetryQueue() {
+        return retrys;
+    }
+}
diff --git 
a/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/grpc/retry/GrpcRetryer.java
 
b/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/grpc/retry/GrpcRetryer.java
index 6de4eee58..b3f209448 100644
--- 
a/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/grpc/retry/GrpcRetryer.java
+++ 
b/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/grpc/retry/GrpcRetryer.java
@@ -20,17 +20,17 @@ package 
org.apache.eventmesh.runtime.core.protocol.grpc.retry;
 import org.apache.eventmesh.common.EventMeshThreadFactory;
 import org.apache.eventmesh.runtime.boot.EventMeshGrpcServer;
 import org.apache.eventmesh.runtime.configuration.EventMeshGrpcConfiguration;
+import org.apache.eventmesh.runtime.core.protocol.AbstractRetryer;
 import org.apache.eventmesh.runtime.core.protocol.DelayRetryable;
 
 import java.util.concurrent.ArrayBlockingQueue;
-import java.util.concurrent.DelayQueue;
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
 
 import lombok.extern.slf4j.Slf4j;
 
 @Slf4j
-public class GrpcRetryer {
+public class GrpcRetryer extends AbstractRetryer {
 
     private final EventMeshGrpcConfiguration grpcConfiguration;
 
@@ -38,20 +38,16 @@ public class GrpcRetryer {
         this.grpcConfiguration = 
eventMeshGrpcServer.getEventMeshGrpcConfiguration();
     }
 
-    private final DelayQueue<DelayRetryable> failed = new 
DelayQueue<DelayRetryable>();
-
-    private ThreadPoolExecutor pool;
-
-    private Thread dispatcher;
-
+    @Override
     public void pushRetry(DelayRetryable delayRetryable) {
-        if (failed.size() >= 
grpcConfiguration.getEventMeshServerRetryBlockQueueSize()) {
+        if (retrys.size() >= 
grpcConfiguration.getEventMeshServerRetryBlockQueueSize()) {
             log.error("[RETRY-QUEUE] is full!");
             return;
         }
-        failed.offer(delayRetryable);
+        retrys.offer(delayRetryable);
     }
 
+    @Override
     public void init() {
         pool = new ThreadPoolExecutor(
             grpcConfiguration.getEventMeshServerRetryThreadNum(),
@@ -60,46 +56,7 @@ public class GrpcRetryer {
             new EventMeshThreadFactory("grpc-retry", true, 
Thread.NORM_PRIORITY),
             new ThreadPoolExecutor.AbortPolicy());
 
-        dispatcher = new Thread(() -> {
-            try {
-                DelayRetryable retryObj;
-                while (!Thread.currentThread().isInterrupted()
-                    && (retryObj = failed.take()) != null) {
-                    final DelayRetryable delayRetryable = retryObj;
-                    pool.execute(() -> {
-                        try {
-                            delayRetryable.retry();
-                            if (log.isDebugEnabled()) {
-                                log.debug("retryObj : {}", delayRetryable);
-                            }
-                        } catch (Exception e) {
-                            log.error("grpc-retry-dispatcher error!", e);
-                        }
-                    });
-                }
-            } catch (Exception e) {
-                if (e instanceof InterruptedException) {
-                    Thread.currentThread().interrupt();
-                }
-                log.error("grpc-retry-dispatcher error!", e);
-            }
-        }, "grpc-retry-dispatcher");
-        dispatcher.setDaemon(true);
-        log.info("GrpcRetryer inited......");
-    }
-
-    public int size() {
-        return failed.size();
-    }
-
-    public void shutdown() {
-        dispatcher.interrupt();
-        pool.shutdown();
-        log.info("GrpcRetryer shutdown......");
+        initDispatcher(dispatcher);
     }
 
-    public void start() throws Exception {
-        dispatcher.start();
-        log.info("GrpcRetryer started......");
-    }
 }
diff --git 
a/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/http/retry/HttpRetryer.java
 
b/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/http/retry/HttpRetryer.java
index 14ff727df..891d09901 100644
--- 
a/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/http/retry/HttpRetryer.java
+++ 
b/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/http/retry/HttpRetryer.java
@@ -19,10 +19,10 @@ package 
org.apache.eventmesh.runtime.core.protocol.http.retry;
 
 import org.apache.eventmesh.common.EventMeshThreadFactory;
 import org.apache.eventmesh.runtime.boot.EventMeshHTTPServer;
+import org.apache.eventmesh.runtime.core.protocol.AbstractRetryer;
 import org.apache.eventmesh.runtime.core.protocol.DelayRetryable;
 
 import java.util.concurrent.ArrayBlockingQueue;
-import java.util.concurrent.DelayQueue;
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
 
@@ -33,7 +33,7 @@ import org.slf4j.LoggerFactory;
 import lombok.extern.slf4j.Slf4j;
 
 @Slf4j
-public class HttpRetryer {
+public class HttpRetryer extends AbstractRetryer {
 
     private final Logger retryLogger = LoggerFactory.getLogger("retry");
 
@@ -43,20 +43,16 @@ public class HttpRetryer {
         this.eventMeshHTTPServer = eventMeshHTTPServer;
     }
 
-    private final DelayQueue<DelayRetryable> failed = new DelayQueue<>();
-
-    private ThreadPoolExecutor pool;
-
-    private Thread dispatcher;
-
+    @Override
     public void pushRetry(DelayRetryable delayRetryable) {
-        if (failed.size() >= 
eventMeshHTTPServer.getEventMeshHttpConfiguration().getEventMeshServerRetryBlockQSize())
 {
+        if (retrys.size() >= 
eventMeshHTTPServer.getEventMeshHttpConfiguration().getEventMeshServerRetryBlockQSize())
 {
             retryLogger.error("[RETRY-QUEUE] is full!");
             return;
         }
-        failed.offer(delayRetryable);
+        retrys.offer(delayRetryable);
     }
 
+    @Override
     public void init() {
         pool = new 
ThreadPoolExecutor(eventMeshHTTPServer.getEventMeshHttpConfiguration().getEventMeshServerRetryThreadNum(),
             
eventMeshHTTPServer.getEventMeshHttpConfiguration().getEventMeshServerRetryThreadNum(),
@@ -66,52 +62,7 @@ public class HttpRetryer {
             new EventMeshThreadFactory("http-retry", true, 
Thread.NORM_PRIORITY),
             new ThreadPoolExecutor.AbortPolicy());
 
-        dispatcher = new Thread(() -> {
-            try {
-                DelayRetryable retryObj;
-                while (!Thread.currentThread().isInterrupted() && (retryObj = 
failed.take()) != null) {
-                    final DelayRetryable delayRetryable = retryObj;
-                    pool.execute(() -> {
-                        try {
-                            delayRetryable.retry();
-                            if (retryLogger.isDebugEnabled()) {
-                                retryLogger.debug("retryObj : {}", 
delayRetryable);
-                            }
-                        } catch (Exception e) {
-                            retryLogger.error("http-retry-dispatcher error!", 
e);
-                        }
-                    });
-                }
-            } catch (Exception e) {
-                if (e instanceof InterruptedException) {
-                    Thread.currentThread().interrupt();
-                }
-                retryLogger.error("http-retry-dispatcher error!", e);
-            }
-        }, "http-retry-dispatcher");
-        dispatcher.setDaemon(true);
-        log.info("HttpRetryer inited......");
-    }
-
-    public int size() {
-        return failed.size();
+        initDispatcher(dispatcher);
     }
 
-    /**
-     * Get failed queue, this method is just used for metrics.
-     */
-    public DelayQueue<DelayRetryable> getFailedQueue() {
-        return failed;
-    }
-
-    public void shutdown() {
-        dispatcher.interrupt();
-        pool.shutdown();
-        log.info("HttpRetryer shutdown......");
-    }
-
-    public void start() throws Exception {
-        dispatcher.start();
-        log.info("HttpRetryer started......");
-    }
 }
diff --git 
a/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/tcp/client/session/retry/EventMeshTcpRetryer.java
 
b/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/tcp/client/session/retry/EventMeshTcpRetryer.java
index 1975a0901..bacfdd71b 100644
--- 
a/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/tcp/client/session/retry/EventMeshTcpRetryer.java
+++ 
b/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/core/protocol/tcp/client/session/retry/EventMeshTcpRetryer.java
@@ -20,13 +20,14 @@ package 
org.apache.eventmesh.runtime.core.protocol.tcp.client.session.retry;
 import org.apache.eventmesh.common.EventMeshThreadFactory;
 import org.apache.eventmesh.common.protocol.SubscriptionType;
 import org.apache.eventmesh.runtime.boot.EventMeshTCPServer;
+import org.apache.eventmesh.runtime.core.protocol.AbstractRetryer;
+import org.apache.eventmesh.runtime.core.protocol.DelayRetryable;
 import org.apache.eventmesh.runtime.core.protocol.RetryContext;
 import 
org.apache.eventmesh.runtime.core.protocol.tcp.client.session.push.DownStreamMsgContext;
 import org.apache.eventmesh.runtime.util.EventMeshUtil;
 import org.apache.eventmesh.runtime.util.ThreadPoolHelper;
 
 import java.util.concurrent.ArrayBlockingQueue;
-import java.util.concurrent.DelayQueue;
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
 
@@ -34,12 +35,10 @@ import java.util.concurrent.TimeUnit;
 import lombok.extern.slf4j.Slf4j;
 
 @Slf4j
-public class EventMeshTcpRetryer {
+public class EventMeshTcpRetryer extends AbstractRetryer {
 
     private EventMeshTCPServer eventMeshTCPServer;
 
-    private final DelayQueue<RetryContext> retrys = new DelayQueue<>();
-
     private final ThreadPoolExecutor pool = new ThreadPoolExecutor(3,
         3,
         60000,
@@ -47,8 +46,6 @@ public class EventMeshTcpRetryer {
         new EventMeshThreadFactory("eventMesh-tcp-retry", true),
         new ThreadPoolExecutor.AbortPolicy());
 
-    private Thread dispatcher;
-
     public EventMeshTcpRetryer(EventMeshTCPServer eventMeshTCPServer) {
         this.eventMeshTCPServer = eventMeshTCPServer;
     }
@@ -61,7 +58,9 @@ public class EventMeshTcpRetryer {
         this.eventMeshTCPServer = eventMeshTCPServer;
     }
 
-    public void pushRetry(RetryContext retryContext) {
+    @Override
+    public void pushRetry(DelayRetryable delayRetryable) {
+        RetryContext retryContext = (RetryContext) delayRetryable;
         if (retrys.size() >= 
eventMeshTCPServer.getEventMeshTCPConfiguration().getEventMeshTcpMsgRetryQueueSize())
 {
             log.error("pushRetry fail, retrys is too much,allow max 
retryQueueSize:{}, retryTimes:{}, seq:{}, bizSeq:{}",
                 
eventMeshTCPServer.getEventMeshTCPConfiguration().getEventMeshTcpMsgRetryQueueSize(),
 retryContext.retryTimes,
@@ -88,43 +87,9 @@ public class EventMeshTcpRetryer {
             EventMeshUtil.getMessageBizSeq(retryContext.event));
     }
 
+    @Override
     public void init() {
-        dispatcher = new Thread(() -> {
-            try {
-                RetryContext retryContext;
-                while ((retryContext = retrys.take()) != null) {
-                    final RetryContext retryCtx = retryContext;
-                    pool.execute(() -> {
-                        try {
-                            retryCtx.retry();
-                        } catch (Exception e) {
-                            log.error("retry-dispatcher error!", e);
-                        }
-                    });
-                }
-            } catch (Exception e) {
-                if (e instanceof InterruptedException) {
-                    Thread.currentThread().interrupt();
-                }
-                log.error("retry-dispatcher error!", e);
-            }
-        }, "retry-dispatcher");
-        dispatcher.setDaemon(true);
-        log.info("EventMeshTcpRetryer inited......");
-    }
-
-    public void start() throws Exception {
-        dispatcher.start();
-        log.info("EventMeshTcpRetryer started......");
-    }
-
-    public void shutdown() {
-        pool.shutdown();
-        log.info("EventMeshTcpRetryer shutdown......");
-    }
-
-    public int getRetrySize() {
-        return retrys.size();
+        initDispatcher(dispatcher);
     }
 
     public void printRetryThreadPoolState() {
diff --git 
a/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/metrics/grpc/EventMeshGrpcMonitor.java
 
b/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/metrics/grpc/EventMeshGrpcMonitor.java
index a6d5c3f3b..e7ea5d9e3 100644
--- 
a/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/metrics/grpc/EventMeshGrpcMonitor.java
+++ 
b/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/metrics/grpc/EventMeshGrpcMonitor.java
@@ -64,7 +64,7 @@ public class EventMeshGrpcMonitor {
         scheduleTask = scheduler.scheduleAtFixedRate(() -> {
             grpcSummaryMetrics.refreshTpsMetrics(SCHEDULE_PERIOD_MILLS);
             grpcSummaryMetrics.clearAllMessageCounter();
-            
grpcSummaryMetrics.setRetrySize(eventMeshGrpcServer.getGrpcRetryer().size());
+            
grpcSummaryMetrics.setRetrySize(eventMeshGrpcServer.getGrpcRetryer().getRetrySize());
             
grpcSummaryMetrics.setSubscribeTopicNum(eventMeshGrpcServer.getConsumerManager().getAllConsumerTopic().size());
         }, DELAY_MILLS, SCHEDULE_PERIOD_MILLS, TimeUnit.MILLISECONDS);
     }
diff --git 
a/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/metrics/http/HTTPMetricsServer.java
 
b/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/metrics/http/HTTPMetricsServer.java
index dc39b23d9..b1e133bac 100644
--- 
a/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/metrics/http/HTTPMetricsServer.java
+++ 
b/eventmesh-runtime/src/main/java/org/apache/eventmesh/runtime/metrics/http/HTTPMetricsServer.java
@@ -51,7 +51,7 @@ public class HTTPMetricsServer {
             eventMeshHTTPServer.getHttpThreadPoolGroup().getBatchMsgExecutor(),
             eventMeshHTTPServer.getHttpThreadPoolGroup().getSendMsgExecutor(),
             eventMeshHTTPServer.getHttpThreadPoolGroup().getPushMsgExecutor(),
-            eventMeshHTTPServer.getHttpRetryer().getFailedQueue());
+            eventMeshHTTPServer.getHttpRetryer().getRetryQueue());
 
         init();
     }
@@ -171,7 +171,7 @@ public class HTTPMetricsServer {
                 
eventMeshHTTPServer.getHttpThreadPoolGroup().getBatchMsgExecutor().getQueue().size(),
                 
eventMeshHTTPServer.getHttpThreadPoolGroup().getSendMsgExecutor().getQueue().size(),
                 
eventMeshHTTPServer.getHttpThreadPoolGroup().getPushMsgExecutor().getQueue().size(),
-                eventMeshHTTPServer.getHttpRetryer().size());
+                eventMeshHTTPServer.getHttpRetryer().getRetrySize());
         }
 
         if (log.isInfoEnabled()) {


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to