WitNote / internal /allocation /policy.go
AUXteam's picture
Upload folder using huggingface_hub
6a7089a verified
// Package allocation defines the AllocationPolicy interface and built-in implementations.
// An AllocationPolicy decides which running instance should handle the next request.
// It is independent from Strategy (API style) — both are swappable independently.
package allocation
import (
"fmt"
"github.com/pinchtab/pinchtab/internal/bridge"
)
// Policy selects an instance from a list of running candidates.
// Implementations must be safe for concurrent use.
type Policy interface {
// Name returns the policy identifier (for config/logging).
Name() string
// Select picks the best instance from the given candidates.
// Returns an error if candidates is empty or no suitable instance exists.
Select(candidates []bridge.Instance) (bridge.Instance, error)
}
// ErrNoCandidates is returned when Select receives an empty slice.
var ErrNoCandidates = fmt.Errorf("no candidate instances available")
// New creates a Policy by name. Returns an error for unknown names.
func New(name string) (Policy, error) {
switch name {
case "fcfs", "":
return &FCFS{}, nil
case "round_robin":
return NewRoundRobin(), nil
case "random":
return &Random{}, nil
default:
return nil, fmt.Errorf("unknown allocation policy: %q (available: fcfs, round_robin, random)", name)
}
}