WitNote / internal /allocation /round_robin.go
AUXteam's picture
Upload folder using huggingface_hub
6a7089a verified
package allocation
import (
"sync/atomic"
"github.com/pinchtab/pinchtab/internal/bridge"
)
// RoundRobin cycles through candidates in order.
// Thread-safe via atomic counter.
type RoundRobin struct {
counter atomic.Uint64
}
// NewRoundRobin creates a new RoundRobin policy.
func NewRoundRobin() *RoundRobin {
return &RoundRobin{}
}
func (rr *RoundRobin) Name() string { return "round_robin" }
func (rr *RoundRobin) Select(candidates []bridge.Instance) (bridge.Instance, error) {
if len(candidates) == 0 {
return bridge.Instance{}, ErrNoCandidates
}
idx := rr.counter.Add(1) - 1
return candidates[idx%uint64(len(candidates))], nil
}