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:
Diffstat (limited to 'internal/gitaly/database.go')
-rw-r--r--internal/gitaly/database.go59
1 files changed, 59 insertions, 0 deletions
diff --git a/internal/gitaly/database.go b/internal/gitaly/database.go
new file mode 100644
index 000000000..2015de710
--- /dev/null
+++ b/internal/gitaly/database.go
@@ -0,0 +1,59 @@
+package gitaly
+
+import (
+ "github.com/dgraph-io/badger/v3"
+)
+
+// OpenDatabase opens a new database handle to a database at the given path.
+func OpenDatabase(databasePath string) (*badger.DB, error) {
+ dbOptions := badger.DefaultOptions(databasePath)
+ // Enable SyncWrites to ensure all writes are persisted to disk before considering
+ // them committed.
+ dbOptions.SyncWrites = true
+ // Badger by default logs fairly verbose statistics when opening a database. Disable the
+ // logging for now.
+ dbOptions.Logger = nil
+
+ return badger.Open(dbOptions)
+}
+
+// databaseAdapter adapts a *badger.DB to the internal database interface used by the hooks in tests.
+type databaseAdapter struct{ *badger.DB }
+
+// newDatabaseAdapter adapts a *badger.DB to conform to the internal database interface used for
+// hooking into during testing.
+func newDatabaseAdapter(db *badger.DB) database {
+ return databaseAdapter{DB: db}
+}
+
+// NewWriteBatch calls badger.*DB.NewWriteBatch. Refer to Badger's documentation for details.
+func (db databaseAdapter) NewWriteBatch() writeBatch {
+ return db.DB.NewWriteBatch()
+}
+
+// NewWriteBatch calls badger.*DB.View. Refer to Badger's documentation for details.
+func (db databaseAdapter) View(handler func(databaseTransaction) error) error {
+ return db.DB.View(func(txn *badger.Txn) error { return handler(txn) })
+}
+
+// database is the Badger.DB interface used by TransactionManager. Refer to Badger's documentation
+// for details.
+type database interface {
+ NewWriteBatch() writeBatch
+ View(func(databaseTransaction) error) error
+}
+
+// writeBatch is the interface of Badger.WriteBatch used by TransactionManager. Refer to Badger's
+// documentation for details.
+type writeBatch interface {
+ Set([]byte, []byte) error
+ Flush() error
+ Cancel()
+}
+
+// databaseTransaction is the interface of *Badger.Txn used by TransactionManager. Refer to Badger's
+// documentation for details
+type databaseTransaction interface {
+ Get([]byte) (*badger.Item, error)
+ NewIterator(badger.IteratorOptions) *badger.Iterator
+}