package hostbox import ( "context" "time" "github.com/carlosframework/platform/internal/hostclaim" "github.com/carlosframework/platform/internal/park" ) type Regional struct { Engine park.Engine // Owner checks complete deployment membership and this worker's assignment. Owner func(context.Context, hostclaim.Observed) error } func (r Regional) observe(ctx context.Context, host string) (hostclaim.Observed, error) { e := r.Engine if e.Claims == nil || e.Store == nil || e.Leases == nil || e.View == nil || e.Authorize == nil || e.Now == nil || e.NewID == nil || e.Bucket == "" || e.Region == "" || r.Owner == nil { return hostclaim.Observed{}, ErrUnsupported } obs, err := hostclaim.Read(ctx, e.Claims, host) if err != nil { return hostclaim.Observed{}, err } if obs.Absent || obs.Claim == nil { return hostclaim.Observed{}, ErrUnsupported } if err := r.Owner(ctx, obs); err != nil { return hostclaim.Observed{}, err } return obs, nil } func (r Regional) Run(ctx context.Context, work park.Work) error { obs, err := r.observe(ctx, work.Host) if err != nil { return err } for _, ob := range obs.Claim.Obligations { if ob.ID != work.ID || ob.Op != work.Op { continue } if !r.Engine.OwnsRegion(ob.Region) || ob.Owner != "region:"+ob.Region || (ob.Kind != "park-replica" && ob.Kind != "park-generation") { return ErrUnsupported } return r.Engine.Run(ctx, work) } return nil // Already acknowledged; no mutation. } func (r Regional) Sweep(ctx context.Context, host, legacyIncarnation string, evidenceAt time.Time, requestLimit time.Duration) (park.Decision, error) { if _, err := r.observe(ctx, host); err != nil { return park.Decision{}, err } if evidenceAt.IsZero() || requestLimit <= 0 { return park.Decision{}, ErrUnsupported } return r.Engine.Sweep(ctx, host, legacyIncarnation, evidenceAt, requestLimit) }