From 575b99840aeb3e6be0aaeeb6e22ccd5eafc804e0 Mon Sep 17 00:00:00 2001 From: David Zhao Date: Sun, 10 Oct 2021 22:25:29 -0700 Subject: [PATCH] Fixed handling of multiple nodes in region-aware routing --- pkg/routing/selector/regionaware.go | 3 +-- pkg/routing/selector/regionaware_test.go | 18 ++++++++++++++++++ pkg/service/server.go | 3 +++ 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/pkg/routing/selector/regionaware.go b/pkg/routing/selector/regionaware.go index 664a2eb50..97680501a 100644 --- a/pkg/routing/selector/regionaware.go +++ b/pkg/routing/selector/regionaware.go @@ -64,12 +64,11 @@ func (s *RegionAwareSelector) SelectNode(nodes []*livekit.Node, room *livekit.Ro // find nodes nearest to current region var nearestNodes []*livekit.Node - nearestRegion := s.CurrentRegion + nearestRegion := "" minDist := math.MaxFloat64 for _, node := range nodes { if node.Region == nearestRegion { nearestNodes = append(nearestNodes, node) - minDist = 0 continue } if dist, ok := s.regionDistances[node.Region]; ok { diff --git a/pkg/routing/selector/regionaware_test.go b/pkg/routing/selector/regionaware_test.go index f5372dacb..29a92b476 100644 --- a/pkg/routing/selector/regionaware_test.go +++ b/pkg/routing/selector/regionaware_test.go @@ -97,6 +97,24 @@ func TestRegionAwareRouting(t *testing.T) { require.Equal(t, expectedNode, node) }) + t.Run("handles multiple nodes in same region", func(t *testing.T) { + expectedNode := newTestNodeInRegion(regionWest, true) + nodes := []*livekit.Node{ + newTestNodeInRegion(regionSeattle, false), + newTestNodeInRegion(regionEast, true), + newTestNodeInRegion(regionEast, true), + expectedNode, + expectedNode, + } + s, err := selector.NewRegionAwareSelector(regionSeattle, rc) + require.NoError(t, err) + s.SysloadLimit = loadLimit + + node, err := s.SelectNode(nodes, nil) + require.NoError(t, err) + require.Equal(t, expectedNode, node) + }) + t.Run("functions when current region is full", func(t *testing.T) { nodes := []*livekit.Node{ newTestNodeInRegion(regionWest, true), diff --git a/pkg/service/server.go b/pkg/service/server.go index 272338974..a7febb778 100644 --- a/pkg/service/server.go +++ b/pkg/service/server.go @@ -173,6 +173,9 @@ func (s *LivekitServer) Start() error { if s.config.PrometheusPort != 0 { values = append(values, "portPrometheus", s.config.PrometheusPort) } + if s.config.Region != "" { + values = append(values, "region", s.config.Region) + } logger.Infow("starting LiveKit server", values...) if err := s.httpServer.Serve(ln); err != http.ErrServerClosed { logger.Errorw("could not start server", err)