This is an automated email from the ASF dual-hosted git repository.

yuz10 pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/rocketmq.git


The following commit(s) were added to refs/heads/develop by this push:
     new 079038dafc [ISSUE #10247] Remove duplicate remove call in 
InvocationChannel (#10248)
079038dafc is described below

commit 079038dafc34fc75a46b5eef51593fce5d012786
Author: yx9o <[email protected]>
AuthorDate: Thu May 21 15:17:27 2026 +0800

    [ISSUE #10247] Remove duplicate remove call in InvocationChannel (#10248)
---
 .../proxy/service/channel/InvocationChannel.java   |  1 -
 .../service/channel/InvocationChannelTest.java     | 67 ++++++++++++++++++++++
 2 files changed, 67 insertions(+), 1 deletion(-)

diff --git 
a/proxy/src/main/java/org/apache/rocketmq/proxy/service/channel/InvocationChannel.java
 
b/proxy/src/main/java/org/apache/rocketmq/proxy/service/channel/InvocationChannel.java
index 00e8cea99c..bbaaddd293 100644
--- 
a/proxy/src/main/java/org/apache/rocketmq/proxy/service/channel/InvocationChannel.java
+++ 
b/proxy/src/main/java/org/apache/rocketmq/proxy/service/channel/InvocationChannel.java
@@ -41,7 +41,6 @@ public class InvocationChannel extends SimpleChannel {
             if (null != context) {
                 context.handle(responseCommand);
             }
-            inFlightRequestMap.remove(responseCommand.getOpaque());
         }
         return super.writeAndFlush(msg);
     }
diff --git 
a/proxy/src/test/java/org/apache/rocketmq/proxy/service/channel/InvocationChannelTest.java
 
b/proxy/src/test/java/org/apache/rocketmq/proxy/service/channel/InvocationChannelTest.java
new file mode 100644
index 0000000000..ddede4fbc8
--- /dev/null
+++ 
b/proxy/src/test/java/org/apache/rocketmq/proxy/service/channel/InvocationChannelTest.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.rocketmq.proxy.service.channel;
+
+import org.apache.rocketmq.remoting.protocol.RemotingCommand;
+import org.junit.Test;
+
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+public class InvocationChannelTest {
+
+    @Test
+    public void testWriteAndFlushShouldNotRemoveReRegisteredContext() {
+        InvocationChannel channel = new InvocationChannel("127.0.0.1:8080", 
"127.0.0.1:8081");
+        AtomicBoolean nextContextHandled = new AtomicBoolean(false);
+
+        channel.registerInvocationContext(1, new InvocationContextInterface() {
+            @Override
+            public void handle(RemotingCommand remotingCommand) {
+                channel.registerInvocationContext(remotingCommand.getOpaque(), 
new InvocationContextInterface() {
+                    @Override
+                    public void handle(RemotingCommand nextRemotingCommand) {
+                        nextContextHandled.set(true);
+                    }
+
+                    @Override
+                    public boolean expired(long expiredTimeSec) {
+                        return false;
+                    }
+                });
+            }
+
+            @Override
+            public boolean expired(long expiredTimeSec) {
+                return false;
+            }
+        });
+
+        RemotingCommand response = RemotingCommand.createResponseCommand(0, 
"OK");
+        response.setOpaque(1);
+
+        channel.writeAndFlush(response);
+        assertTrue(channel.isWritable());
+
+        channel.writeAndFlush(response);
+        assertTrue(nextContextHandled.get());
+        assertFalse(channel.isWritable());
+    }
+}

Reply via email to