You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by gu...@apache.org on 2021/11/04 01:44:04 UTC
[dubbo] branch 3.0 updated: [3.0-Triple] Fix bad state error when
method not found (#9198)
This is an automated email from the ASF dual-hosted git repository.
guohao pushed a commit to branch 3.0
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/3.0 by this push:
new eaf2b3d [3.0-Triple] Fix bad state error when method not found (#9198)
eaf2b3d is described below
commit eaf2b3d9fe44ad2966caad3dbe1dc5a3406700d7
Author: GuoHao <gu...@gmail.com>
AuthorDate: Thu Nov 4 09:42:48 2021 +0800
[3.0-Triple] Fix bad state error when method not found (#9198)
* Fix bad state error when method not found
* Fix ut
* Fix ut
* Fix ut
---
.../org/apache/dubbo/rpc/protocol/tri/OutboundTransportObserver.java | 3 +++
.../main/java/org/apache/dubbo/rpc/protocol/tri/TransportState.java | 3 +--
.../java/org/apache/dubbo/rpc/protocol/tri/TransportStateTest.java | 2 +-
3 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/OutboundTransportObserver.java b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/OutboundTransportObserver.java
index 0a99ab5..bd7a570 100644
--- a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/OutboundTransportObserver.java
+++ b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/OutboundTransportObserver.java
@@ -37,11 +37,14 @@ public abstract class OutboundTransportObserver implements TransportObserver {
protected void checkSendMeta(Object metadata, boolean endStream) {
if (endStream) {
+ // trailers-only or metadata + trailers
if (!state.allowSendEndStream()) {
throw new IllegalStateException("Metadata endStream already sent to peer, send " + metadata + " failed!");
}
+ state.setMetaSend();
state.setEndStreamSend();
} else {
+ // metadata
if (!state.allowSendMeta()) {
throw new IllegalStateException("Metadata already sent to peer, send " + metadata + " failed!");
}
diff --git a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/TransportState.java b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/TransportState.java
index 4f922d3..f4b9357 100644
--- a/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/TransportState.java
+++ b/dubbo-rpc/dubbo-rpc-triple/src/main/java/org/apache/dubbo/rpc/protocol/tri/TransportState.java
@@ -30,7 +30,6 @@ public class TransportState {
private static final int SERVER_SEND_STREAM_RECEIVED = 0b00000000000000000000000000001000;
private static final int ALLOW_META_SEND = 0b00000000000000000000000000000000;
private static final int ALLOW_DATA_SEND = META_SEND;
- private static final int ALLOW_END_STREAM_SEND = META_SEND;
private volatile int state = 0;
public void setMetaSend() {
@@ -66,7 +65,7 @@ public class TransportState {
}
public boolean allowSendEndStream() {
- return this.state == ALLOW_END_STREAM_SEND;
+ return allowSendReset() && (this.state & END_STREAM_SEND) != END_STREAM_SEND;
}
}
diff --git a/dubbo-rpc/dubbo-rpc-triple/src/test/java/org/apache/dubbo/rpc/protocol/tri/TransportStateTest.java b/dubbo-rpc/dubbo-rpc-triple/src/test/java/org/apache/dubbo/rpc/protocol/tri/TransportStateTest.java
index 78a0038..11baf77 100644
--- a/dubbo-rpc/dubbo-rpc-triple/src/test/java/org/apache/dubbo/rpc/protocol/tri/TransportStateTest.java
+++ b/dubbo-rpc/dubbo-rpc-triple/src/test/java/org/apache/dubbo/rpc/protocol/tri/TransportStateTest.java
@@ -76,7 +76,7 @@ class TransportStateTest {
@Test
void allowSendEndStream() {
TransportState transportState = new TransportState();
- Assertions.assertFalse(transportState.allowSendEndStream());
+ Assertions.assertTrue(transportState.allowSendEndStream());
transportState = new TransportState();
transportState.setResetSend();