Merge pull request #972 from stevvooe/namespace-containers-storage

metadata: properly namespace containers storage
This commit is contained in:
Kenfe-Mickaël Laventure 2017-06-08 09:54:32 -04:00 committed by GitHub
commit 18d53c2e6e
2 changed files with 38 additions and 13 deletions

View File

@ -108,18 +108,18 @@ func getImagesBucket(tx *bolt.Tx, namespace string) *bolt.Bucket {
return getBucket(tx, imagesBucketPath(namespace)...) return getBucket(tx, imagesBucketPath(namespace)...)
} }
func createContainersBucket(tx *bolt.Tx) (*bolt.Bucket, error) { func createContainersBucket(tx *bolt.Tx, namespace string) (*bolt.Bucket, error) {
bkt, err := createBucketIfNotExists(tx, bucketKeyVersion, bucketKeyObjectContainers) bkt, err := createBucketIfNotExists(tx, bucketKeyVersion, []byte(namespace), bucketKeyObjectContainers)
if err != nil { if err != nil {
return nil, err return nil, err
} }
return bkt, nil return bkt, nil
} }
func getContainersBucket(tx *bolt.Tx) *bolt.Bucket { func getContainersBucket(tx *bolt.Tx, namespace string) *bolt.Bucket {
return getBucket(tx, bucketKeyVersion, bucketKeyObjectContainers) return getBucket(tx, bucketKeyVersion, []byte(namespace), bucketKeyObjectContainers)
} }
func getContainerBucket(tx *bolt.Tx, id string) *bolt.Bucket { func getContainerBucket(tx *bolt.Tx, namespace, id string) *bolt.Bucket {
return getBucket(tx, bucketKeyVersion, bucketKeyObjectContainers, []byte(id)) return getBucket(tx, bucketKeyVersion, []byte(namespace), bucketKeyObjectContainers, []byte(id))
} }

View File

@ -6,6 +6,7 @@ import (
"github.com/boltdb/bolt" "github.com/boltdb/bolt"
"github.com/containerd/containerd/containers" "github.com/containerd/containerd/containers"
"github.com/containerd/containerd/namespaces"
"github.com/pkg/errors" "github.com/pkg/errors"
) )
@ -20,7 +21,12 @@ func NewContainerStore(tx *bolt.Tx) containers.Store {
} }
func (s *containerStore) Get(ctx context.Context, id string) (containers.Container, error) { func (s *containerStore) Get(ctx context.Context, id string) (containers.Container, error) {
bkt := getContainerBucket(s.tx, id) namespace, err := namespaces.NamespaceRequired(ctx)
if err != nil {
return containers.Container{}, err
}
bkt := getContainerBucket(s.tx, namespace, id)
if bkt == nil { if bkt == nil {
return containers.Container{}, errors.Wrap(ErrNotFound, "bucket does not exist") return containers.Container{}, errors.Wrap(ErrNotFound, "bucket does not exist")
} }
@ -34,9 +40,14 @@ func (s *containerStore) Get(ctx context.Context, id string) (containers.Contain
} }
func (s *containerStore) List(ctx context.Context, filter string) ([]containers.Container, error) { func (s *containerStore) List(ctx context.Context, filter string) ([]containers.Container, error) {
namespace, err := namespaces.NamespaceRequired(ctx)
if err != nil {
return nil, err
}
var ( var (
m []containers.Container m []containers.Container
bkt = getContainersBucket(s.tx) bkt = getContainersBucket(s.tx, namespace)
) )
if bkt == nil { if bkt == nil {
return m, nil return m, nil
@ -61,7 +72,12 @@ func (s *containerStore) List(ctx context.Context, filter string) ([]containers.
} }
func (s *containerStore) Create(ctx context.Context, container containers.Container) (containers.Container, error) { func (s *containerStore) Create(ctx context.Context, container containers.Container) (containers.Container, error) {
bkt, err := createContainersBucket(s.tx) namespace, err := namespaces.NamespaceRequired(ctx)
if err != nil {
return containers.Container{}, err
}
bkt, err := createContainersBucket(s.tx, namespace)
if err != nil { if err != nil {
return containers.Container{}, err return containers.Container{}, err
} }
@ -84,7 +100,12 @@ func (s *containerStore) Create(ctx context.Context, container containers.Contai
} }
func (s *containerStore) Update(ctx context.Context, container containers.Container) (containers.Container, error) { func (s *containerStore) Update(ctx context.Context, container containers.Container) (containers.Container, error) {
bkt := getContainersBucket(s.tx) namespace, err := namespaces.NamespaceRequired(ctx)
if err != nil {
return containers.Container{}, err
}
bkt := getContainersBucket(s.tx, namespace)
if bkt == nil { if bkt == nil {
return containers.Container{}, errors.Wrap(ErrNotFound, "no containers") return containers.Container{}, errors.Wrap(ErrNotFound, "no containers")
} }
@ -103,13 +124,17 @@ func (s *containerStore) Update(ctx context.Context, container containers.Contai
} }
func (s *containerStore) Delete(ctx context.Context, id string) error { func (s *containerStore) Delete(ctx context.Context, id string) error {
bkt := getContainersBucket(s.tx) namespace, err := namespaces.NamespaceRequired(ctx)
if err != nil {
return err
}
bkt := getContainersBucket(s.tx, namespace)
if bkt == nil { if bkt == nil {
return errors.Wrap(ErrNotFound, "no containers") return errors.Wrap(ErrNotFound, "no containers")
} }
err := bkt.DeleteBucket([]byte(id)) if err := bkt.DeleteBucket([]byte(id)); err == bolt.ErrBucketNotFound {
if err == bolt.ErrBucketNotFound {
return errors.Wrap(ErrNotFound, "no content for id") return errors.Wrap(ErrNotFound, "no content for id")
} }
return err return err