Skip to content

Commit 0cf0175

Browse files
authored
Merge pull request #185 from meshplus/perf/improve-pier-start
perf(internal/app): add error retry when getting cross-chain information to start the pier
2 parents 5ba6eb7 + 4d3b11a commit 0cf0175

File tree

1 file changed

+27
-9
lines changed

1 file changed

+27
-9
lines changed

internal/app/utils.go

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,14 @@ package app
33
import (
44
"encoding/json"
55
"fmt"
6+
"time"
67

8+
"github.com/Rican7/retry"
9+
"github.com/Rican7/retry/strategy"
710
"github.com/meshplus/bitxhub-model/constant"
811
"github.com/meshplus/bitxhub-model/pb"
912
rpcx "github.com/meshplus/go-bitxhub-client"
13+
"github.com/meshplus/pier/internal/loggers"
1014
)
1115

1216
func getInterchainMeta(client rpcx.Client) (*pb.Interchain, error) {
@@ -15,17 +19,31 @@ func getInterchainMeta(client rpcx.Client) (*pb.Interchain, error) {
1519
return nil, err
1620
}
1721
tx.Nonce = 1
18-
receipt, err := client.SendView(tx)
19-
if err != nil {
20-
return nil, err
21-
}
22-
if !receipt.IsSuccess() {
23-
return nil, fmt.Errorf("get interchain meta receipt: %s", receipt.Ret)
24-
}
2522

2623
ret := &pb.Interchain{}
27-
if err := ret.Unmarshal(receipt.Ret); err != nil {
28-
return nil, fmt.Errorf("unmarshal interchain meta from bitxhub: %w", err)
24+
logger := loggers.Logger(loggers.App)
25+
if err = retry.Retry(func(attempt uint) error {
26+
receipt, err := client.SendView(tx)
27+
if err != nil {
28+
logger.Errorf("Send view to get interchain meta error: %w ... retry later", err)
29+
return err
30+
} else {
31+
if !receipt.IsSuccess() {
32+
logger.Errorf("Get interchain meta receipt: %s ... retry later", string(receipt.Ret))
33+
return fmt.Errorf("get interchain meta receipt: %s", receipt.Ret)
34+
}
35+
36+
if err := ret.Unmarshal(receipt.Ret); err != nil {
37+
logger.Errorf("Unmarshal interchain meta from bitxhub: %s ... retry later", string(receipt.Ret))
38+
return fmt.Errorf("unmarshal interchain meta from bitxhub: %w", err)
39+
}
40+
41+
return nil
42+
}
43+
}, strategy.Wait(time.Second*5),
44+
); err != nil {
45+
logger.Errorf("Get interchain meta retry error: %w", err)
46+
return nil, fmt.Errorf("Get interchain meta retry error: %w", err)
2947
}
3048

3149
return ret, nil

0 commit comments

Comments
 (0)