Reduce overhead of cancel flowcontrolled writes.
Motivation: When we cancel the flowcontrolled writes we did create a new StreamException for each write that was enqueued. Creating Exceptions is very expensive due of filling the stacktrace. Modifications: Only create the StreamException once and reuse the same for all the flowcontrolled writes (per stream). Result: Less expensive to cancel flowcontrolled writes.
This commit is contained in:
parent
2d815fa752
commit
b769ec0934
@ -480,13 +480,15 @@ public class DefaultHttp2RemoteFlowController implements Http2RemoteFlowControll
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (;;) {
|
|
||||||
FlowControlled frame = pendingWriteQueue.poll();
|
FlowControlled frame = pendingWriteQueue.poll();
|
||||||
if (frame == null) {
|
if (frame != null) {
|
||||||
break;
|
// Only create exception once and reuse to reduce overhead of filling in the stacktrace.
|
||||||
}
|
final Http2Exception exception = streamError(stream.id(), INTERNAL_ERROR, cause,
|
||||||
writeError(frame, streamError(stream.id(), INTERNAL_ERROR, cause,
|
"Stream closed before write could take place");
|
||||||
"Stream closed before write could take place"));
|
do {
|
||||||
|
writeError(frame, exception);
|
||||||
|
frame = pendingWriteQueue.poll();
|
||||||
|
} while (frame != null);
|
||||||
}
|
}
|
||||||
|
|
||||||
streamByteDistributor.updateStreamableBytes(this);
|
streamByteDistributor.updateStreamableBytes(this);
|
||||||
|
Loading…
Reference in New Issue
Block a user