api/services/content: define delete method

Allow deletion of content over the GRPC interface. For now, we are going
with a model that conducts reference management outside of the content
store, in the metadata store but this design is valid either way.

Signed-off-by: Stephen J Day <stephen.day@docker.com>
This commit is contained in:
Stephen J Day 2017-02-27 20:06:29 -08:00
parent be20bb1eb8
commit 706c629354
No known key found for this signature in database
GPG key ID: 67B3DED84EDC823F
5 changed files with 269 additions and 62 deletions

28
cmd/dist/delete.go vendored
View file

@ -1,9 +1,12 @@
package main
import (
contextpkg "context"
"fmt"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
contentapi "github.com/docker/containerd/api/services/content"
"github.com/docker/containerd/log"
digest "github.com/opencontainers/go-digest"
"github.com/urfave/cli"
@ -11,7 +14,7 @@ import (
var deleteCommand = cli.Command{
Name: "delete",
Aliases: []string{"del"},
Aliases: []string{"delete", "del", "remove", "rm"},
Usage: "permanently delete one or more blobs.",
ArgsUsage: "[flags] [<digest>, ...]",
Description: `Delete one or more blobs permanently. Successfully deleted
@ -19,16 +22,18 @@ var deleteCommand = cli.Command{
Flags: []cli.Flag{},
Action: func(context *cli.Context) error {
var (
ctx = contextpkg.Background()
ctx = background
args = []string(context.Args())
exitError error
)
cs, err := resolveContentStore(context)
conn, err := connectGRPC(context)
if err != nil {
return err
}
client := contentapi.NewContentClient(conn)
for _, arg := range args {
dgst, err := digest.Parse(arg)
if err != nil {
@ -39,11 +44,18 @@ var deleteCommand = cli.Command{
continue
}
if err := cs.Delete(dgst); err != nil {
if exitError == nil {
exitError = err
if _, err := client.Delete(ctx, &contentapi.DeleteContentRequest{
Digest: dgst,
}); err != nil {
switch grpc.Code(err) {
case codes.NotFound:
// if it is already deleted, ignore!
default:
if exitError == nil {
exitError = err
}
log.G(ctx).WithError(err).Errorf("could not delete %v", dgst)
}
log.G(ctx).WithError(err).Errorf("could not delete %v", dgst)
continue
}