diff --git a/metadata/buckets.go b/metadata/buckets.go index 7eca8a2b8..ae0ae0642 100644 --- a/metadata/buckets.go +++ b/metadata/buckets.go @@ -108,18 +108,18 @@ func getImagesBucket(tx *bolt.Tx, namespace string) *bolt.Bucket { return getBucket(tx, imagesBucketPath(namespace)...) } -func createContainersBucket(tx *bolt.Tx) (*bolt.Bucket, error) { - bkt, err := createBucketIfNotExists(tx, bucketKeyVersion, bucketKeyObjectContainers) +func createContainersBucket(tx *bolt.Tx, namespace string) (*bolt.Bucket, error) { + bkt, err := createBucketIfNotExists(tx, bucketKeyVersion, []byte(namespace), bucketKeyObjectContainers) if err != nil { return nil, err } return bkt, nil } -func getContainersBucket(tx *bolt.Tx) *bolt.Bucket { - return getBucket(tx, bucketKeyVersion, bucketKeyObjectContainers) +func getContainersBucket(tx *bolt.Tx, namespace string) *bolt.Bucket { + return getBucket(tx, bucketKeyVersion, []byte(namespace), bucketKeyObjectContainers) } -func getContainerBucket(tx *bolt.Tx, id string) *bolt.Bucket { - return getBucket(tx, bucketKeyVersion, bucketKeyObjectContainers, []byte(id)) +func getContainerBucket(tx *bolt.Tx, namespace, id string) *bolt.Bucket { + return getBucket(tx, bucketKeyVersion, []byte(namespace), bucketKeyObjectContainers, []byte(id)) } diff --git a/metadata/containers.go b/metadata/containers.go index f1faaa0f3..40e5927d1 100644 --- a/metadata/containers.go +++ b/metadata/containers.go @@ -6,6 +6,7 @@ import ( "github.com/boltdb/bolt" "github.com/containerd/containerd/containers" + "github.com/containerd/containerd/namespaces" "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) { - 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 { 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) { + namespace, err := namespaces.NamespaceRequired(ctx) + if err != nil { + return nil, err + } + var ( m []containers.Container - bkt = getContainersBucket(s.tx) + bkt = getContainersBucket(s.tx, namespace) ) if bkt == 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) { - 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 { 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) { - bkt := getContainersBucket(s.tx) + namespace, err := namespaces.NamespaceRequired(ctx) + if err != nil { + return containers.Container{}, err + } + + bkt := getContainersBucket(s.tx, namespace) if bkt == nil { 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 { - bkt := getContainersBucket(s.tx) + namespace, err := namespaces.NamespaceRequired(ctx) + if err != nil { + return err + } + + bkt := getContainersBucket(s.tx, namespace) if bkt == nil { return errors.Wrap(ErrNotFound, "no containers") } - err := bkt.DeleteBucket([]byte(id)) - if err == bolt.ErrBucketNotFound { + if err := bkt.DeleteBucket([]byte(id)); err == bolt.ErrBucketNotFound { return errors.Wrap(ErrNotFound, "no content for id") } return err