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(); + } + } +}