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:
parent
be20bb1eb8
commit
706c629354
5 changed files with 269 additions and 62 deletions
28
cmd/dist/delete.go
vendored
28
cmd/dist/delete.go
vendored
|
@ -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
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue