From 02729e6cb0283d8ca40115e9ab017a9ce790a2af Mon Sep 17 00:00:00 2001 From: Julien Viet Date: Mon, 28 Apr 2025 10:53:49 +0200 Subject: [PATCH] Use the channel read complete event to process pending messages. Motivation: When the socket uses pipeling and there are pending messages (due to pipelining limit), the pending message queue will likely be examined for sending by each message read. Examining the pending message queue is more efficient when done upon channel read complete. Changes: Move the pending message check in the read completion event, rather that after each processed messsage. --- .../java/io/vertx/sqlclient/impl/SocketConnectionBase.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SocketConnectionBase.java b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SocketConnectionBase.java index af411b86bb..614d52a73b 100644 --- a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SocketConnectionBase.java +++ b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/SocketConnectionBase.java @@ -134,6 +134,7 @@ public void init() { handleException(e); } }); + socket.readCompletionHandler(this::handleReadComplete); } public NetSocketInternal socket() { @@ -313,13 +314,16 @@ protected void handleMessage(Object msg) { inflight--; CommandResponse resp =(CommandResponse) msg; resp.fire(); - checkPending(); } else if (msg instanceof InvalidCachedStatementEvent) { InvalidCachedStatementEvent event = (InvalidCachedStatementEvent) msg; removeCachedStatement(event.sql()); } } + private void handleReadComplete(Void v) { + checkPending(); + } + protected void handleEvent(Object event) { if (holder != null) { holder.handleEvent(event);