From 479d2d427a508288309ad52bd9159a1134176854 Mon Sep 17 00:00:00 2001 From: redkale Date: Fri, 30 Jun 2023 09:29:38 +0800 Subject: [PATCH] =?UTF-8?q?ClientCodec=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/redkale/net/client/ClientCodec.java | 28 ++++++++++++++++--- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/redkale/net/client/ClientCodec.java b/src/main/java/org/redkale/net/client/ClientCodec.java index 0bbcdba5f..a0a75d72d 100644 --- a/src/main/java/org/redkale/net/client/ClientCodec.java +++ b/src/main/java/org/redkale/net/client/ClientCodec.java @@ -123,11 +123,21 @@ public abstract class ClientCodec implements Complet connection.preComplete(message, (R) request, exc); if (exc != null) { - if (workThread.inIO()) { - workThread.execute(() -> { + if (workThread == readThread) { + workThread.runWork(() -> { Traces.currentTraceid(request.traceid); respFuture.completeExceptionally(exc); }); + } else if (workThread.getState() == Thread.State.RUNNABLE) { //fullCache时state不是RUNNABLE + if (workThread.inIO()) { + Traces.currentTraceid(request.traceid); + respFuture.completeExceptionally(exc); + } else { + workThread.execute(() -> { + Traces.currentTraceid(request.traceid); + respFuture.completeExceptionally(exc); + }); + } } else { workThread.runWork(() -> { Traces.currentTraceid(request.traceid); @@ -136,11 +146,21 @@ public abstract class ClientCodec implements Complet } } else { final P rs = request.respTransfer == null ? message : (P) request.respTransfer.apply(message); - if (workThread.inIO()) { - workThread.execute(() -> { + if (workThread == readThread) { + workThread.runWork(() -> { Traces.currentTraceid(request.traceid); respFuture.complete(rs); }); + } else if (workThread.getState() == Thread.State.RUNNABLE) { //fullCache时state不是RUNNABLE + if (workThread.inIO()) { + Traces.currentTraceid(request.traceid); + respFuture.complete(rs); + } else { + workThread.execute(() -> { + Traces.currentTraceid(request.traceid); + respFuture.complete(rs); + }); + } } else { workThread.runWork(() -> { Traces.currentTraceid(request.traceid);