From 831392f017a0930837732c95d6468280410bb7b8 Mon Sep 17 00:00:00 2001 From: Matt Rasband <2184696+mattrasband@users.noreply.github.com> Date: Fri, 3 Jun 2022 08:43:38 -0600 Subject: [PATCH 1/2] Allow stores to fall back to global settings for dynamic sessions * Dynamic sessions are not added to the settings until after the session factory has created the sessions. In this scenario the filestore and sqlstore are unable to get the settings and fail to create the various message stores. Often these settings are set globally so we should try falling back before failing to create the message store. --- filestore.go | 10 +++++++++- sqlstore.go | 10 +++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/filestore.go b/filestore.go index 2a548cadb..e0766fd08 100644 --- a/filestore.go +++ b/filestore.go @@ -61,10 +61,18 @@ func NewFileStoreFactory(settings *Settings) MessageStoreFactory { // Create creates a new FileStore implementation of the MessageStore interface. func (f fileStoreFactory) Create(sessionID SessionID) (msgStore MessageStore, err error) { + globalSettings := f.settings.GlobalSettings() + dynamicSessions, _ := globalSettings.BoolSetting(config.DynamicSessions) + sessionSettings, ok := f.settings.SessionSettings()[sessionID] if !ok { - return nil, fmt.Errorf("unknown session: %v", sessionID) + if dynamicSessions { + sessionSettings = globalSettings + } else { + return nil, fmt.Errorf("unknown session: %v", sessionID) + } } + dirname, err := sessionSettings.Setting(config.FileStorePath) if err != nil { return nil, err diff --git a/sqlstore.go b/sqlstore.go index 6ff8ac225..5e492be2c 100644 --- a/sqlstore.go +++ b/sqlstore.go @@ -67,10 +67,18 @@ func NewSQLStoreFactory(settings *Settings) MessageStoreFactory { // Create creates a new SQLStore implementation of the MessageStore interface. func (f sqlStoreFactory) Create(sessionID SessionID) (msgStore MessageStore, err error) { + globalSettings := f.settings.GlobalSettings() + dynamicSessions, _ := globalSettings.BoolSetting(config.DynamicSessions) + sessionSettings, ok := f.settings.SessionSettings()[sessionID] if !ok { - return nil, fmt.Errorf("unknown session: %v", sessionID) + if dynamicSessions { + sessionSettings = globalSettings + } else { + return nil, fmt.Errorf("unknown session: %v", sessionID) + } } + sqlDriver, err := sessionSettings.Setting(config.SQLStoreDriver) if err != nil { return nil, err From 0dd076e88623a3a1b4a54266ada1412f3815437c Mon Sep 17 00:00:00 2001 From: Matt Rasband <2184696+mattrasband@users.noreply.github.com> Date: Fri, 3 Jun 2022 08:50:21 -0600 Subject: [PATCH 2/2] Include mongostore in fixes to #484 --- mongostore.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/mongostore.go b/mongostore.go index c9bc37ac2..290cdc236 100644 --- a/mongostore.go +++ b/mongostore.go @@ -61,9 +61,16 @@ func NewMongoStoreFactoryPrefixed(settings *Settings, collectionsPrefix string) // Create creates a new MongoStore implementation of the MessageStore interface. func (f mongoStoreFactory) Create(sessionID SessionID) (msgStore MessageStore, err error) { + globalSettings := f.settings.GlobalSettings() + dynamicSessions, _ := globalSettings.BoolSetting(config.DynamicSessions) + sessionSettings, ok := f.settings.SessionSettings()[sessionID] if !ok { - return nil, fmt.Errorf("unknown session: %v", sessionID) + if dynamicSessions { + sessionSettings = globalSettings + } else { + return nil, fmt.Errorf("unknown session: %v", sessionID) + } } mongoConnectionURL, err := sessionSettings.Setting(config.MongoStoreConnection) if err != nil {