临时优化Client runWork
This commit is contained in:
@@ -16,8 +16,6 @@ import javax.net.ssl.SSLEngineResult.HandshakeStatus;
|
|||||||
import static javax.net.ssl.SSLEngineResult.HandshakeStatus.*;
|
import static javax.net.ssl.SSLEngineResult.HandshakeStatus.*;
|
||||||
import static javax.net.ssl.SSLEngineResult.Status.*;
|
import static javax.net.ssl.SSLEngineResult.Status.*;
|
||||||
import javax.net.ssl.*;
|
import javax.net.ssl.*;
|
||||||
import static javax.net.ssl.SSLEngineResult.HandshakeStatus.*;
|
|
||||||
import static javax.net.ssl.SSLEngineResult.Status.*;
|
|
||||||
import org.redkale.util.*;
|
import org.redkale.util.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -25,8 +25,4 @@ public class ClientIOThread extends AsyncIOThread {
|
|||||||
super(name, index, threads, workExecutor, selector, unsafeBufferPool, safeBufferPool);
|
super(name, index, threads, workExecutor, selector, unsafeBufferPool, safeBufferPool);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public final boolean inClient() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -80,6 +80,14 @@ public class WorkThread extends Thread implements Executor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void runWork(Runnable command) {
|
||||||
|
if (workExecutor == null) {
|
||||||
|
command.run();
|
||||||
|
} else {
|
||||||
|
workExecutor.execute(command);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void runAsync(Runnable command) {
|
public void runAsync(Runnable command) {
|
||||||
if (workExecutor == null) {
|
if (workExecutor == null) {
|
||||||
ForkJoinPool.commonPool().execute(command);
|
ForkJoinPool.commonPool().execute(command);
|
||||||
@@ -114,16 +122,6 @@ public class WorkThread extends Thread implements Executor {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 是否客户端的IO线程
|
|
||||||
*
|
|
||||||
* @since 2.8.0
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
public boolean inClient() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean inCurrThread() {
|
public boolean inCurrThread() {
|
||||||
return this == Thread.currentThread();
|
return this == Thread.currentThread();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -203,28 +203,54 @@ public abstract class ClientConnection<R extends ClientRequest, P> implements Co
|
|||||||
workThread = request.workThread;
|
workThread = request.workThread;
|
||||||
request.workThread = null;
|
request.workThread = null;
|
||||||
}
|
}
|
||||||
|
// if (rs.exc != null) {
|
||||||
|
// if (workThread == null || workThread == Thread.currentThread() || workThread.inIO()
|
||||||
|
// || workThread.getState() != Thread.State.RUNNABLE) {
|
||||||
|
// if (request != null) {
|
||||||
|
// Traces.currTraceid(request.traceid);
|
||||||
|
// }
|
||||||
|
// respFuture.completeExceptionally(rs.exc);
|
||||||
|
// } else {
|
||||||
|
// workThread.execute(() -> {
|
||||||
|
// if (request != null) {
|
||||||
|
// Traces.currTraceid(request.traceid);
|
||||||
|
// }
|
||||||
|
// respFuture.completeExceptionally(rs.exc);
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
// } else {
|
||||||
|
// if (workThread == null || workThread == Thread.currentThread() || workThread.inIO()
|
||||||
|
// || workThread.getState() != Thread.State.RUNNABLE) {
|
||||||
|
// if (request != null) {
|
||||||
|
// Traces.currTraceid(request.traceid);
|
||||||
|
// }
|
||||||
|
// respFuture.complete(rs.result);
|
||||||
|
// } else {
|
||||||
|
// workThread.execute(() -> {
|
||||||
|
// if (request != null) {
|
||||||
|
// Traces.currTraceid(request.traceid);
|
||||||
|
// }
|
||||||
|
// respFuture.complete(rs.result);
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
if (workThread == null || workThread.getWorkExecutor() == null) {
|
||||||
|
workThread = channel.getAsyncIOThread();
|
||||||
|
}
|
||||||
if (rs.exc != null) {
|
if (rs.exc != null) {
|
||||||
if (workThread == null || workThread == Thread.currentThread() || workThread.inIO()
|
workThread.runWork(() -> {
|
||||||
|| workThread.getState() != Thread.State.RUNNABLE) {
|
if (request != null) {
|
||||||
Traces.currTraceid(request.traceid);
|
Traces.currTraceid(request.traceid);
|
||||||
|
}
|
||||||
respFuture.completeExceptionally(rs.exc);
|
respFuture.completeExceptionally(rs.exc);
|
||||||
} else {
|
});
|
||||||
workThread.execute(() -> {
|
|
||||||
Traces.currTraceid(request.traceid);
|
|
||||||
respFuture.completeExceptionally(rs.exc);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
if (workThread == null || workThread == Thread.currentThread() || workThread.inIO()
|
workThread.runWork(() -> {
|
||||||
|| workThread.getState() != Thread.State.RUNNABLE) {
|
if (request != null) {
|
||||||
Traces.currTraceid(request.traceid);
|
|
||||||
respFuture.complete(rs.result);
|
|
||||||
} else {
|
|
||||||
workThread.execute(() -> {
|
|
||||||
Traces.currTraceid(request.traceid);
|
Traces.currTraceid(request.traceid);
|
||||||
respFuture.complete(rs.result);
|
}
|
||||||
});
|
respFuture.complete(rs.result);
|
||||||
}
|
});
|
||||||
}
|
}
|
||||||
} catch (Throwable t) {
|
} catch (Throwable t) {
|
||||||
client.logger.log(Level.INFO, "Complete result error, request: " + respFuture.request, t);
|
client.logger.log(Level.INFO, "Complete result error, request: " + respFuture.request, t);
|
||||||
|
|||||||
@@ -82,11 +82,15 @@ public class ClientFuture<T> extends CompletableFuture<T> implements Runnable {
|
|||||||
workThread = request.workThread;
|
workThread = request.workThread;
|
||||||
request.workThread = null;
|
request.workThread = null;
|
||||||
}
|
}
|
||||||
if (workThread == null || workThread == Thread.currentThread() || workThread.inIO()
|
// if (workThread == null || workThread == Thread.currentThread() || workThread.inIO()
|
||||||
|| workThread.getState() != Thread.State.RUNNABLE) {
|
// || workThread.getState() != Thread.State.RUNNABLE) {
|
||||||
this.completeExceptionally(ex);
|
// this.completeExceptionally(ex);
|
||||||
} else {
|
// } else {
|
||||||
workThread.execute(() -> completeExceptionally(ex));
|
// workThread.execute(() -> completeExceptionally(ex));
|
||||||
|
// }
|
||||||
|
if (workThread == null || workThread.getWorkExecutor() == null) {
|
||||||
|
workThread = conn.getChannel().getAsyncIOThread();
|
||||||
}
|
}
|
||||||
|
workThread.runWork(() -> completeExceptionally(ex));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user