Преглед изворни кода

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>
Albin Kerouanton пре 1 година
родитељ
комит
4d7c11c208

+ 0 - 1
libnetwork/datastore/datastore.go

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

+ 10 - 48
libnetwork/internal/kvstore/boltdb/boltdb.go

@@ -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()
 }

+ 0 - 1
libnetwork/internal/kvstore/kvstore.go

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