diff options
author | Sami Hiltunen <shiltunen@gitlab.com> | 2023-10-24 14:19:16 +0300 |
---|---|---|
committer | Sami Hiltunen <shiltunen@gitlab.com> | 2023-10-31 15:18:32 +0300 |
commit | 1a46729b8560f5092c4b46de9a1ed7d8b3baec8e (patch) | |
tree | af3656f5b0774e99a37f4981507631fe3b134744 | |
parent | d9990d37ed88507f9498d7472273c3e7d5c0da9e (diff) |
Inject database opener into PartitionManager
PartitionManager will soon gain a goroutine that runs garbage
collection on the Badger database. In order to test that change,
we need to be able to mock out badger in the test. This commit
injects a database opener into PartitionManager so we can mock out
the database in the tests.
-rw-r--r-- | internal/gitaly/storage/storagemgr/partition_manager.go | 23 | ||||
-rw-r--r-- | internal/gitaly/storage/storagemgr/partition_manager_test.go | 4 | ||||
-rw-r--r-- | internal/testhelper/testserver/gitaly.go | 1 |
3 files changed, 19 insertions, 9 deletions
diff --git a/internal/gitaly/storage/storagemgr/partition_manager.go b/internal/gitaly/storage/storagemgr/partition_manager.go index dc72f3074..d133a773b 100644 --- a/internal/gitaly/storage/storagemgr/partition_manager.go +++ b/internal/gitaly/storage/storagemgr/partition_manager.go @@ -56,6 +56,20 @@ type PartitionManager struct { transactionManagerFactory transactionManagerFactory } +// DatabaseOpener is responsible for opening a database handle. +type DatabaseOpener interface { + // OpenDatabase opens a database at the given path. + OpenDatabase(log.Logger, string) (Database, error) +} + +// DatabaseOpenerFunc is a function that implements DatabaseOpener. +type DatabaseOpenerFunc func(log.Logger, string) (Database, error) + +// OpenDatabase opens a handle to the database at the given path. +func (fn DatabaseOpenerFunc) OpenDatabase(logger log.Logger, path string) (Database, error) { + return fn(logger, path) +} + // storageManager represents a single storage. type storageManager struct { // mu synchronizes access to the fields of storageManager. @@ -192,12 +206,6 @@ func (ptn *partition) isClosing() bool { } } -// DatabaseOpener abstracts out the database opening for testing. -type DatabaseOpener interface { - // OpenDatabase opens a database at a given path. - OpenDatabase(logger log.Logger, path string) (Database, error) -} - // NewPartitionManager returns a new PartitionManager. func NewPartitionManager( configuredStorages []config.Storage, @@ -205,6 +213,7 @@ func NewPartitionManager( housekeepingManager housekeeping.Manager, localRepoFactory localrepo.Factory, logger log.Logger, + dbOpener DatabaseOpener, ) (*PartitionManager, error) { storages := make(map[string]*storageManager, len(configuredStorages)) for _, storage := range configuredStorages { @@ -234,7 +243,7 @@ func NewPartitionManager( } storageLogger := logger.WithField("storage", storage.Name) - db, err := OpenDatabase(storageLogger.WithField("component", "database"), databaseDir) + db, err := dbOpener.OpenDatabase(storageLogger.WithField("component", "database"), databaseDir) if err != nil { return nil, fmt.Errorf("create storage's database directory: %w", err) } diff --git a/internal/gitaly/storage/storagemgr/partition_manager_test.go b/internal/gitaly/storage/storagemgr/partition_manager_test.go index d13a7f703..48d5b5aa1 100644 --- a/internal/gitaly/storage/storagemgr/partition_manager_test.go +++ b/internal/gitaly/storage/storagemgr/partition_manager_test.go @@ -678,7 +678,7 @@ func TestPartitionManager(t *testing.T) { txManager := transaction.NewManager(cfg, logger, backchannel.NewRegistry()) housekeepingManager := housekeeping.NewManager(cfg.Prometheus, logger, txManager) - partitionManager, err := NewPartitionManager(cfg.Storages, cmdFactory, housekeepingManager, localRepoFactory, logger) + partitionManager, err := NewPartitionManager(cfg.Storages, cmdFactory, housekeepingManager, localRepoFactory, logger, DatabaseOpenerFunc(OpenDatabase)) require.NoError(t, err) if setup.transactionManagerFactory != nil { @@ -807,7 +807,7 @@ func TestPartitionManager_concurrentClose(t *testing.T) { txManager := transaction.NewManager(cfg, logger, backchannel.NewRegistry()) housekeepingManager := housekeeping.NewManager(cfg.Prometheus, logger, txManager) - partitionManager, err := NewPartitionManager(cfg.Storages, cmdFactory, housekeepingManager, localRepoFactory, logger) + partitionManager, err := NewPartitionManager(cfg.Storages, cmdFactory, housekeepingManager, localRepoFactory, logger, DatabaseOpenerFunc(OpenDatabase)) require.NoError(t, err) defer partitionManager.Close() diff --git a/internal/testhelper/testserver/gitaly.go b/internal/testhelper/testserver/gitaly.go index ecb83999a..342551331 100644 --- a/internal/testhelper/testserver/gitaly.go +++ b/internal/testhelper/testserver/gitaly.go @@ -376,6 +376,7 @@ func (gsd *gitalyServerDeps) createDependencies(tb testing.TB, cfg config.Cfg) * gsd.housekeepingManager, localrepo.NewFactory(gsd.logger, gsd.locator, gsd.gitCmdFactory, gsd.catfileCache), gsd.logger, + storagemgr.DatabaseOpenerFunc(storagemgr.OpenDatabase), ) require.NoError(tb, err) tb.Cleanup(partitionManager.Close) |