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:
		| @@ -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{ | ||||
| 		Store: cs, | ||||
| 		db:    db, | ||||
| 	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) { | ||||
|   | ||||
| @@ -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 | ||||
| } | ||||
|   | ||||
| @@ -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{}, | ||||
| 	} | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -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{ | ||||
| 		Snapshotter: sn, | ||||
| 		name:        name, | ||||
| 		db:          db, | ||||
| 	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 { | ||||
|   | ||||
| @@ -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() | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Derek McGowan
					Derek McGowan