mirror of https://github.com/grpc/grpc-java.git
core: Fix migrating deframer compatibility with RetriableStream
Fixes #7168
This commit is contained in:
parent
cb5ceaaaa0
commit
bcb287bb15
|
|
@ -157,8 +157,7 @@ public abstract class AbstractStream implements Stream {
|
||||||
maxMessageSize,
|
maxMessageSize,
|
||||||
statsTraceCtx,
|
statsTraceCtx,
|
||||||
transportTracer);
|
transportTracer);
|
||||||
// TODO(#7168): use MigratingThreadDeframer when enabling retry doesn't break.
|
deframer = new MigratingThreadDeframer(this, this, rawDeframer);
|
||||||
deframer = rawDeframer;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
final void optimizeForDirectExecutor() {
|
final void optimizeForDirectExecutor() {
|
||||||
|
|
|
||||||
|
|
@ -47,11 +47,14 @@ final class MigratingThreadDeframer implements ThreadOptimizedDeframer {
|
||||||
/**
|
/**
|
||||||
* {@code true} means decoding on transport thread.
|
* {@code true} means decoding on transport thread.
|
||||||
*
|
*
|
||||||
* <p>Invariant: if there are outstanding requests, then deframerOnTransportThread=true. Otherwise
|
* <p>Invariant: if there are outstanding requests, then deframerOnTransportThread=true. If there
|
||||||
* deframerOnTransportThread=false.
|
* is buffered data, then deframerOnTransportThread=false.
|
||||||
|
*
|
||||||
|
* <p>Start on transport thread since our stubs will generally request(1) immediately, and to be
|
||||||
|
* compatible with RetriableStream.
|
||||||
*/
|
*/
|
||||||
@GuardedBy("lock")
|
@GuardedBy("lock")
|
||||||
private boolean deframerOnTransportThread;
|
private boolean deframerOnTransportThread = true;
|
||||||
@GuardedBy("lock")
|
@GuardedBy("lock")
|
||||||
private final Queue<Op> opQueue = new ArrayDeque<>();
|
private final Queue<Op> opQueue = new ArrayDeque<>();
|
||||||
@GuardedBy("lock")
|
@GuardedBy("lock")
|
||||||
|
|
@ -65,8 +68,7 @@ final class MigratingThreadDeframer implements ThreadOptimizedDeframer {
|
||||||
new SquelchLateMessagesAvailableDeframerListener(checkNotNull(listener, "listener"));
|
new SquelchLateMessagesAvailableDeframerListener(checkNotNull(listener, "listener"));
|
||||||
this.transportExecutor = checkNotNull(transportExecutor, "transportExecutor");
|
this.transportExecutor = checkNotNull(transportExecutor, "transportExecutor");
|
||||||
this.appListener = new ApplicationThreadDeframerListener(transportListener, transportExecutor);
|
this.appListener = new ApplicationThreadDeframerListener(transportListener, transportExecutor);
|
||||||
// Starts on app thread
|
this.migratingListener = new MigratingDeframerListener(transportListener);
|
||||||
this.migratingListener = new MigratingDeframerListener(appListener);
|
|
||||||
deframer.setListener(migratingListener);
|
deframer.setListener(migratingListener);
|
||||||
this.deframer = deframer;
|
this.deframer = deframer;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue