mirror of
https://github.com/livekit/livekit.git
synced 2026-04-01 00:05:40 +00:00
* small refactor * extra line * fix room allocator test * selector fakes not used * keep decisions out of router * put nodeId logic back * fix room allocator test
41 lines
929 B
Go
41 lines
929 B
Go
package selector
|
|
|
|
import (
|
|
"errors"
|
|
|
|
livekit "github.com/livekit/protocol/proto"
|
|
|
|
"github.com/livekit/livekit-server/pkg/config"
|
|
)
|
|
|
|
var ErrUnsupportedSelector = errors.New("unsupported node selector")
|
|
|
|
// NodeSelector selects an appropriate node to run the current session
|
|
type NodeSelector interface {
|
|
SelectNode(nodes []*livekit.Node) (*livekit.Node, error)
|
|
}
|
|
|
|
func CreateNodeSelector(conf *config.Config) (NodeSelector, error) {
|
|
kind := conf.NodeSelector.Kind
|
|
if kind == "" {
|
|
kind = "random"
|
|
}
|
|
switch kind {
|
|
case "sysload":
|
|
return &SystemLoadSelector{
|
|
SysloadLimit: conf.NodeSelector.SysloadLimit,
|
|
}, nil
|
|
case "regionaware":
|
|
s, err := NewRegionAwareSelector(conf.Region, conf.NodeSelector.Regions)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
s.SysloadLimit = conf.NodeSelector.SysloadLimit
|
|
return s, nil
|
|
case "random":
|
|
return &RandomSelector{}, nil
|
|
default:
|
|
return nil, ErrUnsupportedSelector
|
|
}
|
|
}
|