This is an automated email from the ASF dual-hosted git repository.
ptupitsyn pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ignite-3.git
The following commit(s) were added to refs/heads/main by this push:
new 54b4317d73 IGNITE-19143 Fix memory leak in ClientInboundMessageHandler
(#1852)
54b4317d73 is described below
commit 54b4317d738a1ee7c91b2f128a38d3fdd90ddb14
Author: Pavel Tupitsyn <[email protected]>
AuthorDate: Wed Mar 29 07:31:25 2023 +0300
IGNITE-19143 Fix memory leak in ClientInboundMessageHandler (#1852)
`this::onPartitionAssignmentChanged` allocates a new delegate object, so
`removeAssignmentsChangeListener` did not work. Store the delegate in a field
and use the same object to unsubscribe.
---
.../ignite/client/handler/ClientInboundMessageHandler.java | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git
a/modules/client-handler/src/main/java/org/apache/ignite/client/handler/ClientInboundMessageHandler.java
b/modules/client-handler/src/main/java/org/apache/ignite/client/handler/ClientInboundMessageHandler.java
index 392e8f6215..76c59e5178 100644
---
a/modules/client-handler/src/main/java/org/apache/ignite/client/handler/ClientInboundMessageHandler.java
+++
b/modules/client-handler/src/main/java/org/apache/ignite/client/handler/ClientInboundMessageHandler.java
@@ -32,6 +32,7 @@ import java.util.BitSet;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.function.Consumer;
import javax.net.ssl.SSLException;
import org.apache.ignite.client.handler.configuration.ClientConnectorView;
import
org.apache.ignite.client.handler.requests.cluster.ClientClusterGetNodesRequest;
@@ -145,6 +146,9 @@ public class ClientInboundMessageHandler extends
ChannelInboundHandlerAdapter {
/** Whether the partition assignment has changed since the last server
response. */
private final AtomicBoolean partitionAssignmentChanged = new
AtomicBoolean();
+ /** Partition assignment change listener. */
+ private final Consumer<IgniteTablesInternal>
partitionAssignmentsChangeListener;
+
/**
* Constructor.
*
@@ -190,7 +194,8 @@ public class ClientInboundMessageHandler extends
ChannelInboundHandlerAdapter {
jdbcQueryEventHandler = new JdbcQueryEventHandlerImpl(processor, new
JdbcMetadataCatalog(igniteTables), resources);
jdbcQueryCursorHandler = new JdbcQueryCursorHandlerImpl(resources);
-
igniteTables.addAssignmentsChangeListener(this::onPartitionAssignmentChanged);
+ this.partitionAssignmentsChangeListener =
this::onPartitionAssignmentChanged;
+
igniteTables.addAssignmentsChangeListener(partitionAssignmentsChangeListener);
}
/** {@inheritDoc} */
@@ -218,7 +223,7 @@ public class ClientInboundMessageHandler extends
ChannelInboundHandlerAdapter {
@Override
public void channelInactive(ChannelHandlerContext ctx) throws Exception {
resources.close();
-
igniteTables.removeAssignmentsChangeListener(this::onPartitionAssignmentChanged);
+
igniteTables.removeAssignmentsChangeListener(partitionAssignmentsChangeListener);
super.channelInactive(ctx);
}