@@ -3,10 +3,14 @@ package app
33import (
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
1216func 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