diff --git a/modules/distribution/cmd/distribution-tools/main.go b/modules/distribution/cmd/distribution-tools/main.go index de40893b..c63bff40 100644 --- a/modules/distribution/cmd/distribution-tools/main.go +++ b/modules/distribution/cmd/distribution-tools/main.go @@ -501,7 +501,7 @@ func main() { Transfers: parts.BusTransfers[holder.Opening](holder.TransfersState), Cap: parts.BusCap(holder.IncomingObjects), Idle: parts.BusArm(holder.IdleState)} v := &holder.Verbs{Holder: h, Catalog: store, Holds: kept[holder.Hold]{state: "holds", key: holder.Hold.Key}, Mirrors: mirrors{}} go followMirrors(v) - go parts.FollowIdle(holder.IdleState, h.Expired, func(id string, dropped bool, err error) { + go parts.FollowIdle(holder.IdleState, parts.IDs(h.Transfers), h.Expired, func(id string, dropped bool, err error) { if err != nil { logf("%v", err) return diff --git a/modules/gitea/cmd/package-registry/incoming.go b/modules/gitea/cmd/package-registry/incoming.go index 9ad5c3c7..945eaf1b 100644 --- a/modules/gitea/cmd/package-registry/incoming.go +++ b/modules/gitea/cmd/package-registry/incoming.go @@ -51,9 +51,17 @@ func incomingTool(typ, seat string, holder func() (*packageseats.Holder, error)) } } -// followIdle drops a transfer when its idle key ends (packageseats.Holder.Expired): the bus's marker is the event. +// followIdle drops a transfer when its idle key ends (packageseats.Holder.Expired): the bus's marker is the event; at the +// watch's start every open transfer is looked at too, so one that ended while the bundle was down is dropped. func followIdle(holder func() (*packageseats.Holder, error)) { - parts.FollowIdle(packageseats.IdleState, func(id string) (bool, error) { + open := func() ([]string, error) { + h, err := holder() + if err != nil { + return nil, fmt.Errorf("the holder cannot be made: %w", err) + } + return parts.IDs(h.Transfers)() + } + parts.FollowIdle(packageseats.IdleState, open, func(id string) (bool, error) { h, err := holder() if err != nil { return false, fmt.Errorf("transfer %s's idle bound ended, but the holder cannot be made: %w", id, err)