Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitaly.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSami Hiltunen <shiltunen@gitlab.com>2023-10-24 14:19:16 +0300
committerSami Hiltunen <shiltunen@gitlab.com>2023-10-31 15:18:32 +0300
commit1a46729b8560f5092c4b46de9a1ed7d8b3baec8e (patch)
treeaf3656f5b0774e99a37f4981507631fe3b134744
parentd9990d37ed88507f9498d7472273c3e7d5c0da9e (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.go23
-rw-r--r--internal/gitaly/storage/storagemgr/partition_manager_test.go4
-rw-r--r--internal/testhelper/testserver/gitaly.go1
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)