You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2019/10/16 10:26:24 UTC
[httpcomponents-core] 01/02: I/O and protocol logging improvements
This is an automated email from the ASF dual-hosted git repository.
olegk pushed a commit to branch bug-fixes
in repository https://gitbox.apache.org/repos/asf/httpcomponents-core.git
commit cc9ba24a102e6ef4ecce2f466bc4cd1d825dbcbf
Author: Oleg Kalnichevski <ol...@apache.org>
AuthorDate: Wed Oct 16 11:35:50 2019 +0200
I/O and protocol logging improvements
---
.../core5/http2/impl/nio/AbstractH2StreamMultiplexer.java | 14 ++++++++++++++
.../hc/core5/testing/nio/LoggingH2StreamListener.java | 4 ++--
.../java/org/apache/hc/core5/reactor/IOSessionImpl.java | 10 ++--------
.../org/apache/hc/core5/reactor/SingleCoreIOReactor.java | 4 ++--
4 files changed, 20 insertions(+), 12 deletions(-)
diff --git a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/AbstractH2StreamMultiplexer.java b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/AbstractH2StreamMultiplexer.java
index 831114b..17002ec 100644
--- a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/AbstractH2StreamMultiplexer.java
+++ b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/AbstractH2StreamMultiplexer.java
@@ -410,6 +410,13 @@ abstract class AbstractH2StreamMultiplexer implements Identifiable, HttpConnecti
commitFrame(settingsFrame);
localSettingState = SettingsHandshake.TRANSMITTED;
+
+ if (streamListener != null) {
+ final int initInputWindow = connInputWindow.get();
+ streamListener.onInputFlowControl(this, 0, initInputWindow, initInputWindow);
+ final int initOutputWindow = connOutputWindow.get();
+ streamListener.onOutputFlowControl(this, 0, initOutputWindow, initOutputWindow);
+ }
}
public final void onInput(final ByteBuffer src) throws HttpException, IOException {
@@ -613,6 +620,13 @@ abstract class AbstractH2StreamMultiplexer implements Identifiable, HttpConnecti
final H2Stream stream = new H2Stream(channel, streamHandler, false);
streamMap.put(streamId, stream);
+ if (streamListener != null) {
+ final int initInputWindow = stream.getInputWindow().get();
+ streamListener.onInputFlowControl(this, streamId, initInputWindow, initInputWindow);
+ final int initOutputWindow = stream.getOutputWindow().get();
+ streamListener.onOutputFlowControl(this, streamId, initOutputWindow, initOutputWindow);
+ }
+
if (stream.isOutputReady()) {
stream.produceOutput();
}
diff --git a/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/nio/LoggingH2StreamListener.java b/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/nio/LoggingH2StreamListener.java
index 4b071a4..83802f8 100644
--- a/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/nio/LoggingH2StreamListener.java
+++ b/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/nio/LoggingH2StreamListener.java
@@ -128,14 +128,14 @@ public class LoggingH2StreamListener implements H2StreamListener {
@Override
public void onInputFlowControl(final HttpConnection connection, final int streamId, final int delta, final int actualSize) {
if (flowCtrlLog.isDebugEnabled()) {
- logFlowControl(LoggingSupport.getId(connection) + " <<", streamId, delta, actualSize);
+ logFlowControl(LoggingSupport.getId(connection) + " in", streamId, delta, actualSize);
}
}
@Override
public void onOutputFlowControl(final HttpConnection connection, final int streamId, final int delta, final int actualSize) {
if (flowCtrlLog.isDebugEnabled()) {
- logFlowControl(LoggingSupport.getId(connection) + " >>", streamId, delta, actualSize);
+ logFlowControl(LoggingSupport.getId(connection) + " out", streamId, delta, actualSize);
}
}
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/reactor/IOSessionImpl.java b/httpcore5/src/main/java/org/apache/hc/core5/reactor/IOSessionImpl.java
index ac111af..437aa87 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/reactor/IOSessionImpl.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/reactor/IOSessionImpl.java
@@ -64,20 +64,14 @@ class IOSessionImpl implements IOSession {
private volatile long lastWriteTime;
private volatile long lastEventTime;
- /**
- * Creates new instance of IOSessionImpl.
- *
- * @param key the selection key.
- * @param socketChannel the socket channel
- */
- public IOSessionImpl(final SelectionKey key, final SocketChannel socketChannel) {
+ public IOSessionImpl(final String type, final SelectionKey key, final SocketChannel socketChannel) {
super();
this.key = Args.notNull(key, "Selection key");
this.channel = Args.notNull(socketChannel, "Socket channel");
this.commandQueue = new ConcurrentLinkedDeque<>();
this.lock = new ReentrantLock();
this.socketTimeout = Timeout.DISABLED;
- this.id = String.format("i/o-%08X", COUNT.getAndIncrement());
+ this.id = String.format(type + "-%08X", COUNT.getAndIncrement());
this.handlerRef = new AtomicReference<>();
this.status = new AtomicInteger(ACTIVE);
final long currentTimeMillis = System.currentTimeMillis();
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/reactor/SingleCoreIOReactor.java b/httpcore5/src/main/java/org/apache/hc/core5/reactor/SingleCoreIOReactor.java
index 78bc3a7..43b3201 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/reactor/SingleCoreIOReactor.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/reactor/SingleCoreIOReactor.java
@@ -206,7 +206,7 @@ class SingleCoreIOReactor extends AbstractSingleCoreIOReactor implements Connect
} catch (final ClosedChannelException ex) {
return;
}
- final IOSession ioSession = new IOSessionImpl(key, socketChannel);
+ final IOSession ioSession = new IOSessionImpl("a", key, socketChannel);
final InternalDataChannel dataChannel = new InternalDataChannel(
ioSessionDecorator != null ? ioSessionDecorator.decorate(ioSession) : ioSession,
null,
@@ -363,7 +363,7 @@ class SingleCoreIOReactor extends AbstractSingleCoreIOReactor implements Connect
final SocketChannel socketChannel,
final NamedEndpoint namedEndpoint,
final Object attachment) {
- final IOSession ioSession = new IOSessionImpl(key, socketChannel);
+ final IOSession ioSession = new IOSessionImpl("c", key, socketChannel);
final InternalDataChannel dataChannel = new InternalDataChannel(
ioSessionDecorator != null ? ioSessionDecorator.decorate(ioSession) : ioSession,
namedEndpoint,