Skip to content

Commit c87442a

Browse files
author
Daisuke Kanda
committed
improve code consistency
Signed-off-by: Daisuke Kanda <daisuke.kanda@datachain.jp>
1 parent 06a70fd commit c87442a

File tree

5 files changed

+31
-22
lines changed

5 files changed

+31
-22
lines changed

cmd/tx.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -457,7 +457,7 @@ func relayMsgsCmd(ctx *config.Context) *cobra.Command {
457457
return err
458458
}
459459

460-
sp, err = st.ProcessTimeoutPackets(cmd.Context(), c[src], c[dst], sh, sp)
460+
err = st.ProcessTimeoutPackets(cmd.Context(), c[src], c[dst], sh, sp) // update sp
461461
if err != nil {
462462
return err
463463
}

core/naive-strategy.go

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ func (st *NaiveStrategy) UnrelayedPackets(ctx context.Context, src, dst *Provabl
201201
}, nil
202202
}
203203

204-
func (st *NaiveStrategy) ProcessTimeoutPackets(ctx context.Context, src, dst *ProvableChain, sh SyncHeaders, rp *RelayPackets) (*RelayPackets, error) {
204+
func (st *NaiveStrategy) ProcessTimeoutPackets(ctx context.Context, src, dst *ProvableChain, sh SyncHeaders, rp *RelayPackets) error {
205205
logger := GetChannelPairLogger(src, dst)
206206
var (
207207
srcPackets PacketInfoList
@@ -219,44 +219,44 @@ func (st *NaiveStrategy) ProcessTimeoutPackets(ctx context.Context, src, dst *Pr
219219
if 0 < len(rp.Src) {
220220
if h, err := dst.LatestHeight(ctx); err != nil {
221221
logger.Error("fail to get dst.LatestHeight", err)
222-
return nil, err
222+
return err
223223
} else {
224224
dstLatestHeight = h
225225
}
226226

227227
if t, err := dst.Timestamp(ctx, dstLatestHeight); err != nil {
228228
logger.Error("fail to get dst.Timestamp of latestHeight", err)
229-
return nil, err
229+
return err
230230
} else {
231231
dstLatestTimestamp = uint64(t.UnixNano())
232232
}
233233

234234
dstLatestFinalizedHeight = sh.GetLatestFinalizedHeader(dst.ChainID()).GetHeight()
235235
if t, err := dst.Timestamp(ctx, dstLatestFinalizedHeight); err != nil {
236236
logger.Error("fail to get dst.Timestamp of latestFinalizedHeight", err)
237-
return nil, err
237+
return err
238238
} else {
239239
dstLatestFinalizedTimestamp = uint64(t.UnixNano())
240240
}
241241
}
242242
if 0 < len(rp.Dst) {
243243
if h, err := src.LatestHeight(ctx); err != nil {
244244
logger.Error("fail to get src.LatestHeight", err)
245-
return nil, err
245+
return err
246246
} else {
247247
srcLatestHeight = h
248248
}
249249
if t, err := src.Timestamp(ctx, srcLatestHeight); err != nil {
250250
logger.Error("fail to get src.Timestamp", err)
251-
return nil, err
251+
return err
252252
} else {
253253
srcLatestTimestamp = uint64(t.UnixNano())
254254
}
255255

256256
srcLatestFinalizedHeight = sh.GetLatestFinalizedHeader(src.ChainID()).GetHeight()
257257
if t, err := src.Timestamp(ctx, srcLatestFinalizedHeight); err != nil {
258258
logger.Error("fail to get src.Timestamp", err)
259-
return nil, err
259+
return err
260260
} else {
261261
srcLatestFinalizedTimestamp = uint64(t.UnixNano())
262262
}
@@ -267,16 +267,20 @@ func (st *NaiveStrategy) ProcessTimeoutPackets(ctx context.Context, src, dst *Pr
267267
(p.TimeoutTimestamp != 0 && p.TimeoutTimestamp <= timestamp)
268268
}
269269

270+
var srcTimeoutPacket, dstTimeoutPacket *PacketInfo
270271
for i, p := range rp.Src {
271272
if isTimeout(p, dstLatestFinalizedHeight, dstLatestFinalizedTimestamp) {
272273
p.TimedOut = true
273274
if src.Path().GetOrder() == chantypes.ORDERED {
275+
// For ordered channel, a timeout notification will cause the channel to be closed.
276+
// Packets proceeding the timeout packet is relayed first
277+
// so that they can be proceeded before the channel is closed.
274278
if i == 0 {
275-
dstPackets = append(dstPackets, p)
279+
srcTimeoutPacket = p
276280
}
277281
break
278282
} else {
279-
dstPackets = append(dstPackets, p)
283+
srcTimeoutPacket = p
280284
}
281285
} else if isTimeout(p, dstLatestHeight, dstLatestTimestamp) {
282286
break
@@ -290,11 +294,11 @@ func (st *NaiveStrategy) ProcessTimeoutPackets(ctx context.Context, src, dst *Pr
290294
p.TimedOut = true
291295
if dst.Path().GetOrder() == chantypes.ORDERED {
292296
if i == 0 {
293-
srcPackets = append(srcPackets, p)
297+
dstTimeoutPacket = p
294298
}
295299
break
296300
} else {
297-
srcPackets = append(srcPackets, p)
301+
dstTimeoutPacket = p
298302
}
299303
} else if (isTimeout(p, srcLatestHeight, srcLatestTimestamp)) {
300304
break
@@ -303,10 +307,15 @@ func (st *NaiveStrategy) ProcessTimeoutPackets(ctx context.Context, src, dst *Pr
303307
dstPackets = append(dstPackets, p)
304308
}
305309
}
306-
return &RelayPackets{
307-
Src: srcPackets,
308-
Dst: dstPackets,
309-
}, nil
310+
if srcTimeoutPacket != nil {
311+
dstPackets = append(dstPackets, srcTimeoutPacket)
312+
}
313+
if dstTimeoutPacket != nil {
314+
srcPackets = append(dstPackets, dstTimeoutPacket)
315+
}
316+
rp.Src = srcPackets
317+
rp.Dst = dstPackets
318+
return nil
310319
}
311320

312321
func (st *NaiveStrategy) RelayPackets(ctx context.Context, src, dst *ProvableChain, rp *RelayPackets, sh SyncHeaders, doExecuteRelaySrc, doExecuteRelayDst bool) (*RelayMsgs, error) {

core/service.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ func (srv *RelayService) Serve(ctx context.Context) error {
119119
return err
120120
}
121121

122-
pseqs, err = srv.st.ProcessTimeoutPackets(ctx, srv.src, srv.dst, srv.sh, pseqs)
122+
err = srv.st.ProcessTimeoutPackets(ctx, srv.src, srv.dst, srv.sh, pseqs) // update pseqs
123123
if err != nil {
124124
logger.Error("failed to process timeout packets", err)
125125
return err

core/service_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,10 @@ func (s *NaiveStrategyWrap) UnrelayedPackets(ctx context.Context, src, dst *core
4444
return ret, err
4545
}
4646

47-
func (s *NaiveStrategyWrap) ProcessTimeoutPackets(ctx context.Context, src, dst *core.ProvableChain, sh core.SyncHeaders, rp *core.RelayPackets) (*core.RelayPackets, error) {
48-
ret, err := s.Inner.ProcessTimeoutPackets(ctx, src, dst, sh, rp)
49-
s.ProcessTimeoutPacketsOut = ret
50-
return ret, err
47+
func (s *NaiveStrategyWrap) ProcessTimeoutPackets(ctx context.Context, src, dst *core.ProvableChain, sh core.SyncHeaders, rp *core.RelayPackets) error {
48+
err := s.Inner.ProcessTimeoutPackets(ctx, src, dst, sh, rp)
49+
s.ProcessTimeoutPacketsOut = rp
50+
return err
5151
}
5252

5353
func (s *NaiveStrategyWrap) RelayPackets(ctx context.Context, src, dst *core.ProvableChain, rp *core.RelayPackets, sh core.SyncHeaders, doExecuteRelaySrc, doExecuteRelayDst bool) (*core.RelayMsgs, error) {

core/strategies.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ type StrategyI interface {
2525
UnrelayedAcknowledgements(ctx context.Context, src, dst *ProvableChain, sh SyncHeaders, includeRelayedButUnfinalized bool) (*RelayPackets, error)
2626

2727
// ProcessTimeoutPackets processes timeout packets in given RelayPackets and returns sorted RelayPackets. Note that input Packet object may be modified.
28-
ProcessTimeoutPackets(ctx context.Context, src, dst *ProvableChain, sh SyncHeaders, rp *RelayPackets) (*RelayPackets, error)
28+
ProcessTimeoutPackets(ctx context.Context, src, dst *ProvableChain, sh SyncHeaders, rp *RelayPackets) error
2929

3030
// RelayAcknowledgements executes AcknowledgePacket to the packets contained in `rp` on both chains (`src` and `dst`).
3131
RelayAcknowledgements(ctx context.Context, src, dst *ProvableChain, rp *RelayPackets, sh SyncHeaders, doExecuteAckSrc, doExecuteAckDst bool) (*RelayMsgs, error)

0 commit comments

Comments
 (0)