package hostops import ( "context" "github.com/carlosframework/platform/internal/hostclaim" "github.com/carlosframework/platform/internal/park" ) type ParkScopeProvider func(context.Context, hostclaim.Observed, hostclaim.Obligation) (hostclaim.ParkScope, error) // RunOwnedRemote is called only by the appointed regional worker. It never // takes another region's chore or acknowledges local work on another box. func RunOwnedRemote(ctx context.Context, e *park.Engine, w park.Work, scope ParkScopeProvider) error { if e == nil || e.Claims == nil || e.Region == "" || scope == nil || e.Authorize == nil || e.View == nil || e.Leases == nil { return ErrContract } obs, err := hostclaim.Read(ctx, e.Claims, w.Host) if err != nil { return err } if obs.Absent { return ErrPending } for _, ob := range obs.Claim.Obligations { if ob.ID != w.ID || ob.Op != w.Op { continue } if !e.OwnsRegion(ob.Region) || ob.Owner != "region:"+ob.Region || (ob.Kind != "park-replica" && ob.Kind != "park-generation") { return ErrIdentity } if ob.Park == nil { p, err := scope(ctx, obs, ob) if err != nil { return err } if err := e.Bind(ctx, w, p); err != nil { return err } } return e.Run(ctx, w) } return ErrPending }