diff --git a/server/public/pluginapi/store.go b/server/public/pluginapi/store.go index ab0adfc4d5..362bb04e85 100644 --- a/server/public/pluginapi/store.go +++ b/server/public/pluginapi/store.go @@ -55,6 +55,10 @@ func (s *StoreService) GetReplicaDB() (*sql.DB, error) { return s.replicaDB, nil } + if err := s.initializeMaster(); err != nil { + return nil, err + } + return s.masterDB, nil } diff --git a/server/public/pluginapi/store_test.go b/server/public/pluginapi/store_test.go index f76ad24c9a..149557f211 100644 --- a/server/public/pluginapi/store_test.go +++ b/server/public/pluginapi/store_test.go @@ -66,6 +66,39 @@ func TestStore(t *testing.T) { require.NoError(t, store.Close()) }) + t.Run("master db fallback without get master first", func(t *testing.T) { + config := &model.Config{ + SqlSettings: model.SqlSettings{ + DriverName: model.NewPointer("ramsql"), + DataSource: model.NewPointer("TestStore-master-db"), + ConnMaxLifetimeMilliseconds: model.NewPointer(2), + }, + } + + driver := &plugintest.Driver{} + defer driver.AssertExpectations(t) + driver.On("Conn", true).Return("test", nil) + driver.On("ConnPing", "test").Return(nil) + driver.On("ConnClose", "test").Return(nil) + + api := &plugintest.API{} + defer api.AssertExpectations(t) + store := pluginapi.NewClient(api, driver).Store + + api.On("GetUnsanitizedConfig").Return(config) + // No replica is set up, should fallback to master + replicaDB, err := store.GetReplicaDB() + require.NoError(t, err) + require.NotNil(t, replicaDB) + + masterDB, err := store.GetMasterDB() + require.NoError(t, err) + require.NotNil(t, masterDB) + require.Same(t, replicaDB, masterDB) + + require.NoError(t, store.Close()) + }) + t.Run("replica db singleton", func(t *testing.T) { config := &model.Config{ SqlSettings: model.SqlSettings{