diff --git a/acb-relayer/r-core/pom.xml b/acb-relayer/r-core/pom.xml
index f1c55b60..addff55a 100644
--- a/acb-relayer/r-core/pom.xml
+++ b/acb-relayer/r-core/pom.xml
@@ -51,6 +51,11 @@
wsdl4j
1.6.3
+
+ junit
+ junit
+ test
+
@@ -128,4 +133,4 @@
-
\ No newline at end of file
+
diff --git a/acb-relayer/r-core/src/main/java/com/alipay/antchain/bridge/relayer/core/types/pluginserver/GRpcBBCServiceClient.java b/acb-relayer/r-core/src/main/java/com/alipay/antchain/bridge/relayer/core/types/pluginserver/GRpcBBCServiceClient.java
index 83f0d71f..c57888ed 100644
--- a/acb-relayer/r-core/src/main/java/com/alipay/antchain/bridge/relayer/core/types/pluginserver/GRpcBBCServiceClient.java
+++ b/acb-relayer/r-core/src/main/java/com/alipay/antchain/bridge/relayer/core/types/pluginserver/GRpcBBCServiceClient.java
@@ -25,6 +25,8 @@
public class GRpcBBCServiceClient implements IBBCServiceClient {
+ static final long RECEIPT_QUERY_DEADLINE_SECONDS = 30L;
+
private String psId;
private final String product;
@@ -108,7 +110,7 @@ public AbstractBBCContext getContext() {
@Override
public CrossChainMessageReceipt readCrossChainMessageReceipt(String txhash) {
- Response response = this.blockingStub.bbcCall(
+ Response response = withReceiptQueryDeadline(this.blockingStub).bbcCall(
CallBBCRequest.newBuilder()
.setProduct(this.getProduct())
.setDomain(this.getDomain())
@@ -127,6 +129,12 @@ public CrossChainMessageReceipt readCrossChainMessageReceipt(String txhash) {
);
}
+ static CrossChainServiceGrpc.CrossChainServiceBlockingStub withReceiptQueryDeadline(
+ CrossChainServiceGrpc.CrossChainServiceBlockingStub stub
+ ) {
+ return stub.withDeadlineAfter(RECEIPT_QUERY_DEADLINE_SECONDS, TimeUnit.SECONDS);
+ }
+
@Override
public List readCrossChainMessagesByHeight(long height) {
Response response = this.blockingStub.bbcCall(
diff --git a/acb-relayer/r-core/src/test/java/com/alipay/antchain/bridge/relayer/core/types/pluginserver/GRpcBBCServiceClientTest.java b/acb-relayer/r-core/src/test/java/com/alipay/antchain/bridge/relayer/core/types/pluginserver/GRpcBBCServiceClientTest.java
new file mode 100644
index 00000000..acb77711
--- /dev/null
+++ b/acb-relayer/r-core/src/test/java/com/alipay/antchain/bridge/relayer/core/types/pluginserver/GRpcBBCServiceClientTest.java
@@ -0,0 +1,34 @@
+package com.alipay.antchain.bridge.relayer.core.types.pluginserver;
+
+import java.util.concurrent.TimeUnit;
+
+import com.alipay.antchain.bridge.pluginserver.service.CrossChainServiceGrpc;
+import io.grpc.ManagedChannel;
+import io.grpc.ManagedChannelBuilder;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class GRpcBBCServiceClientTest {
+
+ @Test
+ public void receiptQueryStubHasFiniteDeadline() {
+ ManagedChannel channel = ManagedChannelBuilder
+ .forAddress("127.0.0.1", 1)
+ .usePlaintext()
+ .build();
+ try {
+ CrossChainServiceGrpc.CrossChainServiceBlockingStub stub =
+ CrossChainServiceGrpc.newBlockingStub(channel);
+ CrossChainServiceGrpc.CrossChainServiceBlockingStub deadlineStub =
+ GRpcBBCServiceClient.withReceiptQueryDeadline(stub);
+
+ Assert.assertNotNull(deadlineStub.getCallOptions().getDeadline());
+ long remainingSeconds = deadlineStub.getCallOptions().getDeadline()
+ .timeRemaining(TimeUnit.SECONDS);
+ Assert.assertTrue(remainingSeconds >= 0);
+ Assert.assertTrue(remainingSeconds <= GRpcBBCServiceClient.RECEIPT_QUERY_DEADLINE_SECONDS);
+ } finally {
+ channel.shutdownNow();
+ }
+ }
+}