Run the catch-up at the controller's start and after each merge it hears (ADR 0457, issue 1336)
This commit is contained in:
@@ -208,6 +208,8 @@ func serve(ctx context.Context) (err error) {
|
|||||||
if err := server.Follows(following{open: open}); err != nil {
|
if err := server.Follows(following{open: open}); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
// And the merges it did not hear while it was away, caught up once it serves (novox/hq ADR 0457, issue 1336).
|
||||||
|
go catchUpAtStart(ctx, open)
|
||||||
// And the merges mesh-delivery made, kept a week with the ask each was made on: what registers a module that
|
// And the merges mesh-delivery made, kept a week with the ask each was made on: what registers a module that
|
||||||
// moved between repositories on the operator's Approve (novox/hq ADR 0420 §7, issue 1025).
|
// moved between repositories on the operator's Approve (novox/hq ADR 0420 §7, issue 1025).
|
||||||
if err := server.KeepsDeliveryMerges(keepingDeliveryMerges{js: server.JetStream, catalog: open.inventory.Catalogued,
|
if err := server.KeepsDeliveryMerges(keepingDeliveryMerges{js: server.JetStream, catalog: open.inventory.Catalogued,
|
||||||
|
|||||||
@@ -316,7 +316,16 @@ func unsaved(err error) error {
|
|||||||
// SourceMoved is the forge announcing a merge. It is put into the open batch (novox/hq ADR 0276), which
|
// SourceMoved is the forge announcing a merge. It is put into the open batch (novox/hq ADR 0276), which
|
||||||
// becomes one walk when its merge window closes: hearMerge, and cutBatchesHeld in batches.go.
|
// becomes one walk when its merge window closes: hearMerge, and cutBatchesHeld in batches.go.
|
||||||
func (f following) SourceMoved(ctx context.Context, m link.SourceMoved) error {
|
func (f following) SourceMoved(ctx context.Context, m link.SourceMoved) error {
|
||||||
return f.hearMerge(ctx, m, time.Now().UTC())
|
if err := f.hearMerge(ctx, m, time.Now().UTC()); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
// And the merges of that trunk it did not hear, in the trunk's order (novox/hq ADR 0457): a catch-up that leaves
|
||||||
|
// something for later is no failure of this merge's hearing, and is never a reason to hear it again.
|
||||||
|
if !f.oneShot {
|
||||||
|
trunk := &caughtTrunk{Owner: m.Owner, Repo: m.Repo, Branch: m.Base}
|
||||||
|
catchUpBeside(func() { f.catchUp(context.WithoutCancel(ctx), trunk) })
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// movesOfMerge is what one merge moves, acted on: every module recorded as built from that repository and
|
// movesOfMerge is what one merge moves, acted on: every module recorded as built from that repository and
|
||||||
|
|||||||
Reference in New Issue
Block a user