libnet: boltdb: remove PersistConnection

This parameter was used to tell the boltdb kvstore not to open/close
the underlying boltdb db file before/after each get/put operation.

Since d21d0884ae, we've a single datastore instance shared by all
components that need it. That commit set `PersistConnection=true`.
We can now safely remove this param altogether, and remove all the
code that was opening and closing the db file before and after each
operation -- it's dead code!

Signed-off-by: Albin Kerouanton <albinker@gmail.com>
This commit is contained in:
Albin Kerouanton 2024-02-02 08:13:41 +01:00
parent 8070a9aa66
commit 4d7c11c208
3 changed files with 10 additions and 50 deletions

View file

@ -92,7 +92,6 @@ func DefaultScope(dataDir string) ScopeCfg {
Config: &store.Config{
Bucket: "libnetwork",
ConnectionTimeout: time.Minute,
PersistConnection: true,
},
},
}

View file

@ -29,12 +29,6 @@ type BoltDB struct {
dbIndex uint64
path string
timeout time.Duration
// By default libkv opens and closes the bolt DB connection for every
// get/put operation. This allows multiple apps to use a Bolt DB at the
// same time.
// PersistConnection flag provides an option to override ths behavior.
// ie: open the connection in New and use it till Close is called.
PersistConnection bool
}
const (
@ -53,15 +47,11 @@ func New(endpoint string, options *store.Config) (store.Store, error) {
return nil, err
}
var db *bolt.DB
if options.PersistConnection {
var err error
db, err = bolt.Open(endpoint, filePerm, &bolt.Options{
Timeout: options.ConnectionTimeout,
})
if err != nil {
return nil, err
}
db, err := bolt.Open(endpoint, filePerm, &bolt.Options{
Timeout: options.ConnectionTimeout,
})
if err != nil {
return nil, err
}
timeout := transientTimeout
@ -70,38 +60,19 @@ func New(endpoint string, options *store.Config) (store.Store, error) {
}
b := &BoltDB{
client: db,
path: endpoint,
boltBucket: []byte(options.Bucket),
timeout: timeout,
PersistConnection: options.PersistConnection,
client: db,
path: endpoint,
boltBucket: []byte(options.Bucket),
timeout: timeout,
}
return b, nil
}
func (b *BoltDB) reset() {
b.path = ""
b.boltBucket = []byte{}
}
func (b *BoltDB) getDBhandle() (*bolt.DB, error) {
if !b.PersistConnection {
db, err := bolt.Open(b.path, filePerm, &bolt.Options{Timeout: b.timeout})
if err != nil {
return nil, err
}
b.client = db
}
return b.client, nil
}
func (b *BoltDB) releaseDBhandle() {
if !b.PersistConnection {
b.client.Close()
}
}
// Put the key, value pair. index number metadata is prepended to the value
func (b *BoltDB) Put(key string, value []byte) error {
b.mu.Lock()
@ -111,7 +82,6 @@ func (b *BoltDB) Put(key string, value []byte) error {
if err != nil {
return err
}
defer b.releaseDBhandle()
return db.Update(func(tx *bolt.Tx) error {
bucket, err := tx.CreateBucketIfNotExists(b.boltBucket)
@ -137,7 +107,6 @@ func (b *BoltDB) Exists(key string) (bool, error) {
if err != nil {
return false, err
}
defer b.releaseDBhandle()
var exists bool
err = db.View(func(tx *bolt.Tx) error {
@ -167,7 +136,6 @@ func (b *BoltDB) List(keyPrefix string) ([]*store.KVPair, error) {
if err != nil {
return nil, err
}
defer b.releaseDBhandle()
var kv []*store.KVPair
err = db.View(func(tx *bolt.Tx) error {
@ -216,7 +184,6 @@ func (b *BoltDB) AtomicDelete(key string, previous *store.KVPair) error {
if err != nil {
return err
}
defer b.releaseDBhandle()
return db.Update(func(tx *bolt.Tx) error {
bucket := tx.Bucket(b.boltBucket)
@ -246,7 +213,6 @@ func (b *BoltDB) AtomicPut(key string, value []byte, previous *store.KVPair) (*s
if err != nil {
return nil, err
}
defer b.releaseDBhandle()
var dbIndex uint64
dbval := make([]byte, libkvmetadatalen)
@ -293,9 +259,5 @@ func (b *BoltDB) Close() {
b.mu.Lock()
defer b.mu.Unlock()
if !b.PersistConnection {
b.reset()
} else {
b.client.Close()
}
b.client.Close()
}

View file

@ -28,7 +28,6 @@ var (
type Config struct {
ConnectionTimeout time.Duration
Bucket string
PersistConnection bool
}
// Store represents the backend K/V storage