Skip to content

Commit 0d314ac

Browse files
jtierijackzampolin
andauthored
Merge PR cosmos#574: rly start fix
* add retries in RelayPackets * get main StartRelayer loop running properly + small logging fixes Co-authored-by: Jack Zampolin <jack.zampolin@gmail.com>
1 parent 5bb5a67 commit 0d314ac

File tree

3 files changed

+67
-32
lines changed

3 files changed

+67
-32
lines changed

cmd/start.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ $ %s start demo-path2 --max-tx-size 10`, appName, appName)),
7373

7474
done, err := relayer.StartRelayer(c[src], c[dst], maxTxSize, maxMsgLength)
7575
if err != nil {
76-
return err
76+
c[src].Log(fmt.Sprintf("relayer start error. Err: %v", err))
7777
}
7878

7979
thresholdTime := viper.GetDuration(flagThresholdTime)
@@ -95,7 +95,7 @@ $ %s start demo-path2 --max-tx-size 10`, appName, appName)),
9595
}
9696
})
9797
if err = eg.Wait(); err != nil {
98-
return err
98+
c[src].Log(fmt.Sprintf("update clients error. Err: %v", err))
9999
}
100100

101101
trapSignal(done)

relayer/naive-strategy.go

+41-8
Original file line numberDiff line numberDiff line change
@@ -390,25 +390,58 @@ func RelayPackets(src, dst *Chain, sp *RelaySequences, maxTxSize, maxMsgLength u
390390

391391
// Prepend non-empty msg lists with UpdateClient
392392
if len(msgs.Dst) != 0 {
393-
srcHeader, err := src.ChainProvider.GetIBCUpdateHeader(srch, dst.ChainProvider, dst.PathEnd.ClientID)
394-
if err != nil {
393+
var (
394+
srcHeader ibcexported.Header
395+
updateMsg provider.RelayerMessage
396+
)
397+
398+
if err = retry.Do(func() error {
399+
srcHeader, err = src.ChainProvider.GetIBCUpdateHeader(srch, dst.ChainProvider, dst.PathEnd.ClientID)
400+
return err
401+
}, RtyAtt, RtyDel, RtyErr, retry.OnRetry(func(n uint, err error) {
402+
srch, _, _ = QueryLatestHeights(src, dst)
403+
})); err != nil {
395404
return err
396405
}
397-
updateMsg, err := dst.ChainProvider.UpdateClient(dst.PathEnd.ClientID, srcHeader)
398-
if err != nil {
406+
407+
if err = retry.Do(func() error {
408+
updateMsg, err = dst.ChainProvider.UpdateClient(dst.PathEnd.ClientID, srcHeader)
409+
return nil
410+
}, RtyAtt, RtyDel, RtyErr); err != nil {
399411
return err
400412
}
401413

402414
msgs.Dst = append([]provider.RelayerMessage{updateMsg}, msgs.Dst...)
403415
}
404416

405417
if len(msgs.Src) != 0 {
406-
dstHeader, err := dst.ChainProvider.GetIBCUpdateHeader(dsth, src.ChainProvider, src.PathEnd.ClientID)
407-
if err != nil {
418+
//dstHeader, err := dst.ChainProvider.GetIBCUpdateHeader(dsth, src.ChainProvider, src.PathEnd.ClientID)
419+
//if err != nil {
420+
// return err
421+
//}
422+
//updateMsg, err := src.ChainProvider.UpdateClient(src.PathEnd.ClientID, dstHeader)
423+
//if err != nil {
424+
// return err
425+
//}
426+
427+
var (
428+
dstHeader ibcexported.Header
429+
updateMsg provider.RelayerMessage
430+
)
431+
432+
if err = retry.Do(func() error {
433+
dstHeader, err = dst.ChainProvider.GetIBCUpdateHeader(dsth, src.ChainProvider, src.PathEnd.ClientID)
434+
return err
435+
}, RtyAtt, RtyDel, RtyErr, retry.OnRetry(func(n uint, err error) {
436+
_, dsth, _ = QueryLatestHeights(src, dst)
437+
})); err != nil {
408438
return err
409439
}
410-
updateMsg, err := src.ChainProvider.UpdateClient(src.PathEnd.ClientID, dstHeader)
411-
if err != nil {
440+
441+
if err = retry.Do(func() error {
442+
updateMsg, err = src.ChainProvider.UpdateClient(src.PathEnd.ClientID, dstHeader)
443+
return nil
444+
}, RtyAtt, RtyDel, RtyErr); err != nil {
412445
return err
413446
}
414447

relayer/strategies.go

+24-22
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package relayer
22

33
import (
44
"fmt"
5-
"time"
65
)
76

87
// StartRelayer starts the main relaying loop
@@ -18,36 +17,39 @@ func StartRelayer(src, dst *Chain, maxTxSize, maxMsgLength uint64) (func(), erro
1817
sp, err := UnrelayedSequences(src, dst)
1918
if err != nil {
2019
src.Log(fmt.Sprintf("unrelayed sequences error: %s", err))
21-
}
22-
if len(sp.Src) > 0 && src.debug {
23-
src.Log(fmt.Sprintf("[%s] unrelayed-packets-> %v", src.ChainID(), sp.Src))
24-
}
25-
if len(sp.Dst) > 0 && dst.debug {
26-
dst.Log(fmt.Sprintf("[%s] unrelayed-packets-> %v", dst.ChainID(), sp.Dst))
27-
}
28-
if !sp.Empty() {
29-
if err = RelayPackets(src, dst, sp, maxTxSize, maxMsgLength); err != nil {
30-
src.Log(fmt.Sprintf("relay packets error: %s", err))
20+
} else {
21+
if len(sp.Src) > 0 && src.debug {
22+
src.Log(fmt.Sprintf("[%s] unrelayed-packets-> %v", src.ChainID(), sp.Src))
23+
}
24+
if len(sp.Dst) > 0 && dst.debug {
25+
dst.Log(fmt.Sprintf("[%s] unrelayed-packets-> %v", dst.ChainID(), sp.Dst))
26+
}
27+
if !sp.Empty() {
28+
if err = RelayPackets(src, dst, sp, maxTxSize, maxMsgLength); err != nil {
29+
src.Log(fmt.Sprintf("relay packets error: %s", err))
30+
}
3131
}
3232
}
3333

3434
// Fetch any unrelayed acks depending on the channel order
3535
ap, err := UnrelayedAcknowledgements(src, dst)
3636
if err != nil {
3737
src.Log(fmt.Sprintf("unrelayed acks error: %s", err))
38-
}
39-
if len(ap.Src) > 0 && src.debug {
40-
src.Log(fmt.Sprintf("[%s] unrelayed-acks-> %v", src.ChainID(), ap.Src))
41-
}
42-
if len(ap.Dst) > 0 && dst.debug {
43-
dst.Log(fmt.Sprintf("[%s] unrelayed-acks-> %v", dst.ChainID(), ap.Dst))
44-
}
45-
if !ap.Empty() {
46-
if err = RelayAcknowledgements(src, dst, ap, maxTxSize, maxMsgLength); err != nil && src.debug {
47-
src.Log(fmt.Sprintf("relay acks error: %s", err))
38+
} else {
39+
if len(ap.Src) > 0 && src.debug {
40+
src.Log(fmt.Sprintf("[%s] unrelayed-acks-> %v", src.ChainID(), ap.Src))
41+
}
42+
if len(ap.Dst) > 0 && dst.debug {
43+
dst.Log(fmt.Sprintf("[%s] unrelayed-acks-> %v", dst.ChainID(), ap.Dst))
44+
}
45+
if !ap.Empty() {
46+
if err = RelayAcknowledgements(src, dst, ap, maxTxSize, maxMsgLength); err != nil && src.debug {
47+
src.Log(fmt.Sprintf("relay acks error: %s", err))
48+
}
4849
}
4950
}
50-
time.Sleep(100 * time.Millisecond)
51+
52+
//time.Sleep(100 * time.Millisecond)
5153
}
5254
}
5355
}()

0 commit comments

Comments
 (0)