Add content and snapshot store references

Update database object to hold reference to the
data stores.

Signed-off-by: Derek McGowan <derek@mcgstyle.net>
This commit is contained in:
Derek McGowan 2017-08-18 15:16:33 -07:00
parent 447a0a9452
commit 2ab70f21ac
No known key found for this signature in database
GPG Key ID: F58C5D0A4405ACDB
5 changed files with 35 additions and 10 deletions

View File

@ -25,10 +25,17 @@ type contentStore struct {
// NewContentStore returns a namespaced content store using an existing
// content store interface.
func NewContentStore(db *DB, cs content.Store) content.Store {
return &contentStore{
db.storeL.Lock()
defer db.storeL.Unlock()
if db.cs == nil {
db.cs = &contentStore{
Store: cs,
db: db,
}
}
return db.cs
}
func (cs *contentStore) Info(ctx context.Context, dgst digest.Digest) (content.Info, error) {

View File

@ -23,7 +23,7 @@ func createContentStore(ctx context.Context, root string) (content.Store, func()
return nil, nil, err
}
return NewContentStore(db, cs), func() error {
return NewContentStore(NewDB(db), cs), func() error {
return db.Close()
}, nil
}

View File

@ -1,14 +1,23 @@
package metadata
import "github.com/boltdb/bolt"
import (
"sync"
"github.com/boltdb/bolt"
)
type DB struct {
db *bolt.DB
storeL sync.Mutex
ss map[string]*snapshotter
cs *contentStore
}
func NewDB(db *bolt.DB) *DB {
return &DB{
db: db,
ss: map[string]*snapshotter{},
}
}

View File

@ -25,11 +25,20 @@ type snapshotter struct {
// NewSnapshotter returns a new Snapshotter which namespaces the given snapshot
// using the provided name and metadata store.
func NewSnapshotter(db *DB, name string, sn snapshot.Snapshotter) snapshot.Snapshotter {
return &snapshotter{
db.storeL.Lock()
defer db.storeL.Unlock()
ss, ok := db.ss[name]
if !ok {
ss = &snapshotter{
Snapshotter: sn,
name: name,
db: db,
}
db.ss[name] = ss
}
return ss
}
func createKey(id uint64, namespace, key string) string {

View File

@ -28,7 +28,7 @@ func newSnapshotter(ctx context.Context, root string) (snapshot.Snapshotter, fun
return nil, nil, err
}
sn := NewSnapshotter(db, "naive", snapshotter)
sn := NewSnapshotter(NewDB(db), "naive", snapshotter)
return sn, func() error {
return db.Close()