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

zrlw pushed a commit to branch 3.3
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/3.3 by this push:
     new c6e619b0dc Fix issue #15698 Distinguish between timeout and task 
rejection in DefaultFuture (#15738)
c6e619b0dc is described below

commit c6e619b0dc5b12620575a0870e8d01fb7b176dc6
Author: qxggg <[email protected]>
AuthorDate: Thu Nov 13 14:15:00 2025 +0800

    Fix issue #15698 Distinguish between timeout and task rejection in 
DefaultFuture (#15738)
---
 .../dubbo/remoting/exchange/support/DefaultFuture.java     | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git 
a/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/exchange/support/DefaultFuture.java
 
b/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/exchange/support/DefaultFuture.java
index f18edb0881..08ca7cfb66 100644
--- 
a/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/exchange/support/DefaultFuture.java
+++ 
b/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/exchange/support/DefaultFuture.java
@@ -328,7 +328,7 @@ public class DefaultFuture extends 
CompletableFuture<Object> {
                 try {
                     executor.execute(() -> notifyTimeout(future));
                 } catch (RejectedExecutionException e) {
-                    notifyTimeout(future);
+                    notifyExecutionError(future, e);
                     throw e;
                 }
             } else {
@@ -345,5 +345,17 @@ public class DefaultFuture extends 
CompletableFuture<Object> {
             // handle response.
             DefaultFuture.received(future.getChannel(), timeoutResponse, true);
         }
+
+        private void notifyExecutionError(DefaultFuture future, Throwable e) {
+            // create exception response.
+            Response errorResponse = new Response(future.getId());
+            // set error status
+            
errorResponse.setStatus(Response.SERVER_THREADPOOL_EXHAUSTED_ERROR);
+            // set detailed error message
+            errorResponse.setErrorMessage("Executor rejected the task for 
handling timeout notification: "
+                    + e.getClass().getSimpleName() + " - " + e.getMessage());
+            // handle response.
+            DefaultFuture.received(future.getChannel(), errorResponse, true);
+        }
     }
 }

Reply via email to