forked from TrueCloudLab/frostfs-node
[#791] writecache: Export OpenDB function
The function will be useful for the tool which works with write-cache parts. Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
This commit is contained in:
parent
ca4c9d4673
commit
8a1593fdcc
2 changed files with 29 additions and 12 deletions
|
@ -2,8 +2,8 @@ package writecache
|
|||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
"path"
|
||||
|
||||
lru "github.com/hashicorp/golang-lru"
|
||||
"github.com/hashicorp/golang-lru/simplelru"
|
||||
|
@ -28,16 +28,22 @@ const lruKeysCount = 256 * 1024 * 8
|
|||
const dbName = "small.bolt"
|
||||
|
||||
func (c *cache) openStore() error {
|
||||
if err := util.MkdirAllX(c.path, os.ModePerm); err != nil {
|
||||
err := util.MkdirAllX(c.path, os.ModePerm)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
db, err := bbolt.Open(path.Join(c.path, dbName), os.ModePerm, &bbolt.Options{
|
||||
NoFreelistSync: true,
|
||||
NoSync: true,
|
||||
c.db, err = OpenDB(c.path, false)
|
||||
if err != nil {
|
||||
return fmt.Errorf("could not open database: %w", err)
|
||||
}
|
||||
|
||||
err = c.db.Update(func(tx *bbolt.Tx) error {
|
||||
_, err := tx.CreateBucketIfNotExists(defaultBucket)
|
||||
return err
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
return fmt.Errorf("could not create default bucket: %w", err)
|
||||
}
|
||||
|
||||
c.fsTree = &fstree.FSTree{
|
||||
|
@ -49,12 +55,6 @@ func (c *cache) openStore() error {
|
|||
DirNameLen: 1,
|
||||
}
|
||||
|
||||
_ = db.Update(func(tx *bbolt.Tx) error {
|
||||
_, err := tx.CreateBucketIfNotExists(defaultBucket)
|
||||
return err
|
||||
})
|
||||
|
||||
c.db = db
|
||||
c.flushed, _ = lru.New(lruKeysCount)
|
||||
return nil
|
||||
}
|
||||
|
|
17
pkg/local_object_storage/writecache/util.go
Normal file
17
pkg/local_object_storage/writecache/util.go
Normal file
|
@ -0,0 +1,17 @@
|
|||
package writecache
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path"
|
||||
|
||||
"go.etcd.io/bbolt"
|
||||
)
|
||||
|
||||
// OpenDB opens BoltDB instance for write-cache. Opens in read-only mode if ro is true.
|
||||
func OpenDB(p string, ro bool) (*bbolt.DB, error) {
|
||||
return bbolt.Open(path.Join(p, dbName), os.ModePerm, &bbolt.Options{
|
||||
NoFreelistSync: true,
|
||||
NoSync: true,
|
||||
ReadOnly: ro,
|
||||
})
|
||||
}
|
Loading…
Reference in a new issue