package host import ( "context" "errors" "github.com/carlosframework/platform/internal/activator" "github.com/carlosframework/platform/internal/hostbox" "github.com/carlosframework/platform/internal/hostclaim" "github.com/carlosframework/platform/internal/hostfiles" "github.com/carlosframework/platform/internal/registry" ) func settleFilesSeedRerun(ctx context.Context, rt registry.Route, files *movesFiles, retries activator.ServingRetries, expected hostclaim.Observed, exclusion *activator.SeedExclusion) (hostclaim.Observed, error) { if err := exclusion.Check(rt.Host); err != nil { return hostclaim.Observed{}, err } if expected.Host != rt.Host || expected.Claim == nil || expected.Claim.Holder == nil { return hostclaim.Observed{}, hostbox.ErrChanged } if _, err := checkFilesSeedLayout(files, rt, claimEmptyBootstrap(expected.Claim.Holder)); err != nil { return hostclaim.Observed{}, err } fresh, err := retries.SettleAbandoned(ctx, expected) if err != nil { return hostclaim.Observed{}, err } if err := exclusion.Check(rt.Host); err != nil { return hostclaim.Observed{}, err } return fresh, nil } func (s *filesSeedOperation) prerequisites(exclusion *activator.SeedExclusion) func(context.Context, registry.Route, hostclaim.Observed) error { return func(ctx context.Context, rt registry.Route, o hostclaim.Observed) error { if err := exclusion.Check(rt.Host); err != nil { return err } if s == nil || s.ctx == nil || s.ctx.Err() != nil || s.selected.State != "eligible" || o.Host != s.selected.Observation.Host || o.ETag != s.selected.Observation.ETag || s.bound != (servingArtifactIdentity{}) { return hostbox.ErrChanged } if err := s.files.checkServingFilesEvidence(ctx, o, rt); !errors.Is(err, hostfiles.ErrNoEvidence) { if err == nil { return hostfiles.ErrManifestExists } return err } selected, err := inspectFilesSeed(ctx, s.claims, s.files, o, s.actor, &rt) if err != nil { return err } if selected.State != "eligible" { return hostbox.ErrChanged } return nil } }