From a5faca00cd50ad1646dad5f01b06c031b5ed4734 Mon Sep 17 00:00:00 2001 From: Joachim Bauch Date: Fri, 23 Apr 2021 14:39:42 +0200 Subject: [PATCH] Pass backend when fetching room for managing virtual sessions. The internal room id is different depending on the backend. --- hub.go | 19 +++---------------- hub_test.go | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/hub.go b/hub.go index 8c6c331..5ff34cc 100644 --- a/hub.go +++ b/hub.go @@ -1074,19 +1074,6 @@ func (h *Hub) getRoomForBackend(id string, backend *Backend) *Room { return h.rooms[internalRoomId] } -func (h *Hub) getRoom(id string) *Room { - h.ru.RLock() - defer h.ru.RUnlock() - // TODO: The same room might exist on different backends. - for _, room := range h.rooms { - if room.Id() == id { - return room - } - } - - return nil -} - func (h *Hub) removeRoom(room *Room) { internalRoomId := getRoomIdForBackend(room.Id(), room.Backend()) h.ru.Lock() @@ -1463,7 +1450,7 @@ func (h *Hub) processInternalMsg(client *Client, message *ClientMessage) { switch msg.Type { case "addsession": msg := msg.AddSession - room := h.getRoom(msg.RoomId) + room := h.getRoomForBackend(msg.RoomId, session.Backend()) if room == nil { log.Printf("Ignore add session message %+v for invalid room %s from %s", *msg, msg.RoomId, session.PublicId()) return @@ -1528,7 +1515,7 @@ func (h *Hub) processInternalMsg(client *Client, message *ClientMessage) { room.AddSession(sess, nil) case "updatesession": msg := msg.UpdateSession - room := h.getRoom(msg.RoomId) + room := h.getRoomForBackend(msg.RoomId, session.Backend()) if room == nil { log.Printf("Ignore remove session message %+v for invalid room %s from %s", *msg, msg.RoomId, session.PublicId()) return @@ -1561,7 +1548,7 @@ func (h *Hub) processInternalMsg(client *Client, message *ClientMessage) { } case "removesession": msg := msg.RemoveSession - room := h.getRoom(msg.RoomId) + room := h.getRoomForBackend(msg.RoomId, session.Backend()) if room == nil { log.Printf("Ignore remove session message %+v for invalid room %s from %s", *msg, msg.RoomId, session.PublicId()) return diff --git a/hub_test.go b/hub_test.go index 9f2ebf4..a7569a5 100644 --- a/hub_test.go +++ b/hub_test.go @@ -47,6 +47,20 @@ const ( testTimeout = 10 * time.Second ) +// Only used for testing. +func (h *Hub) getRoom(id string) *Room { + h.ru.RLock() + defer h.ru.RUnlock() + // TODO: The same room might exist on different backends. + for _, room := range h.rooms { + if room.Id() == id { + return room + } + } + + return nil +} + func getTestConfig(server *httptest.Server) (*goconf.ConfigFile, error) { config := goconf.NewConfigFile() u, err := url.Parse(server.URL)