HTTPCORE-727 (follow-up): async HTTP/1.1 protocol handler fails to count bytes transferred while flushing session buffer when writing out a message head or suspending session output.
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/AbstractHttp1StreamDuplexer.java b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/AbstractHttp1StreamDuplexer.java
index 6710149..1424508 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/AbstractHttp1StreamDuplexer.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/AbstractHttp1StreamDuplexer.java
@@ -446,7 +446,10 @@ void commitMessageHead(
}
outgoingMessageWriter.reset();
if (flushMode == FlushMode.IMMEDIATE) {
- outbuf.flush(ioSession);
+ final int bytesWritten = outbuf.flush(ioSession);
+ if (bytesWritten > 0) {
+ outTransportMetrics.incrementBytesTransferred(bytesWritten);
+ }
}
ioSession.setEvent(EventMask.WRITE);
} finally {
@@ -479,7 +482,10 @@ void suspendSessionOutput() throws IOException {
ioSession.getLock().lock();
try {
if (outbuf.hasData()) {
- outbuf.flush(ioSession);
+ final int bytesWritten = outbuf.flush(ioSession);
+ if (bytesWritten > 0) {
+ outTransportMetrics.incrementBytesTransferred(bytesWritten);
+ }
} else {
ioSession.clearEvent(SelectionKey.OP_WRITE);
}