Remove gogoproto.customtype

gogoproto.customtype is used to have go-digest.Digest instead of string.
While it is convinient, protoc-gen-go doesn't support the extension
and that blocks #6564.

Signed-off-by: Kazuyoshi Kato <katokazu@amazon.com>
This commit is contained in:
Kazuyoshi Kato
2022-03-18 21:20:58 +00:00
parent 0c701654a1
commit 3eeeb9429a
22 changed files with 296 additions and 335 deletions

View File

@@ -57,11 +57,12 @@ func (s *service) Register(server *grpc.Server) error {
}
func (s *service) Info(ctx context.Context, req *api.InfoRequest) (*api.InfoResponse, error) {
if err := req.Digest.Validate(); err != nil {
dg, err := digest.Parse(req.Digest)
if err != nil {
return nil, status.Errorf(codes.InvalidArgument, "%q failed validation", req.Digest)
}
bi, err := s.store.Info(ctx, req.Digest)
bi, err := s.store.Info(ctx, dg)
if err != nil {
return nil, errdefs.ToGRPC(err)
}
@@ -72,7 +73,8 @@ func (s *service) Info(ctx context.Context, req *api.InfoRequest) (*api.InfoResp
}
func (s *service) Update(ctx context.Context, req *api.UpdateRequest) (*api.UpdateResponse, error) {
if err := req.Info.Digest.Validate(); err != nil {
_, err := digest.Parse(req.Info.Digest)
if err != nil {
return nil, status.Errorf(codes.InvalidArgument, "%q failed validation", req.Info.Digest)
}
@@ -99,7 +101,7 @@ func (s *service) List(req *api.ListContentRequest, session api.Content_ListServ
if err := s.store.Walk(session.Context(), func(info content.Info) error {
buffer = append(buffer, api.Info{
Digest: info.Digest,
Digest: info.Digest.String(),
Size_: info.Size,
CreatedAt: info.CreatedAt,
Labels: info.Labels,
@@ -130,11 +132,12 @@ func (s *service) List(req *api.ListContentRequest, session api.Content_ListServ
func (s *service) Delete(ctx context.Context, req *api.DeleteContentRequest) (*ptypes.Empty, error) {
log.G(ctx).WithField("digest", req.Digest).Debugf("delete content")
if err := req.Digest.Validate(); err != nil {
dg, err := digest.Parse(req.Digest)
if err != nil {
return nil, status.Errorf(codes.InvalidArgument, err.Error())
}
if err := s.store.Delete(ctx, req.Digest); err != nil {
if err := s.store.Delete(ctx, dg); err != nil {
return nil, errdefs.ToGRPC(err)
}
@@ -142,16 +145,17 @@ func (s *service) Delete(ctx context.Context, req *api.DeleteContentRequest) (*p
}
func (s *service) Read(req *api.ReadContentRequest, session api.Content_ReadServer) error {
if err := req.Digest.Validate(); err != nil {
dg, err := digest.Parse(req.Digest)
if err != nil {
return status.Errorf(codes.InvalidArgument, "%v: %v", req.Digest, err)
}
oi, err := s.store.Info(session.Context(), req.Digest)
oi, err := s.store.Info(session.Context(), dg)
if err != nil {
return errdefs.ToGRPC(err)
}
ra, err := s.store.ReaderAt(session.Context(), ocispec.Descriptor{Digest: req.Digest})
ra, err := s.store.ReaderAt(session.Context(), ocispec.Descriptor{Digest: dg})
if err != nil {
return errdefs.ToGRPC(err)
}
@@ -221,7 +225,7 @@ func (s *service) Status(ctx context.Context, req *api.StatusRequest) (*api.Stat
Ref: status.Ref,
Offset: status.Offset,
Total: status.Total,
Expected: status.Expected,
Expected: status.Expected.String(),
}
return &resp, nil
@@ -241,7 +245,7 @@ func (s *service) ListStatuses(ctx context.Context, req *api.ListStatusesRequest
Ref: status.Ref,
Offset: status.Offset,
Total: status.Total,
Expected: status.Expected,
Expected: status.Expected.String(),
})
}
@@ -293,7 +297,7 @@ func (s *service) Write(session api.Content_WriteServer) (err error) {
"ref": ref,
}
total = req.Total
expected = req.Expected
expected = digest.Digest(req.Expected)
if total > 0 {
fields["total"] = total
}
@@ -341,12 +345,13 @@ func (s *service) Write(session api.Content_WriteServer) (err error) {
// Supporting these two paths is quite awkward but it lets both API
// users use the same writer style for each with a minimum of overhead.
if req.Expected != "" {
if expected != "" && expected != req.Expected {
log.G(ctx).Debugf("commit digest differs from writer digest: %v != %v", req.Expected, expected)
dg := digest.Digest(req.Expected)
if expected != "" && expected != dg {
log.G(ctx).Debugf("commit digest differs from writer digest: %v != %v", dg, expected)
}
expected = req.Expected
expected = dg
if _, err := s.store.Info(session.Context(), req.Expected); err == nil {
if _, err := s.store.Info(session.Context(), dg); err == nil {
if err := wr.Close(); err != nil {
log.G(ctx).WithError(err).Error("failed to close writer")
}
@@ -369,7 +374,7 @@ func (s *service) Write(session api.Content_WriteServer) (err error) {
switch req.Action {
case api.WriteActionStat:
msg.Digest = wr.Digest()
msg.Digest = wr.Digest().String()
msg.StartedAt = ws.StartedAt
msg.UpdatedAt = ws.UpdatedAt
msg.Total = total
@@ -416,7 +421,7 @@ func (s *service) Write(session api.Content_WriteServer) (err error) {
}
}
msg.Digest = wr.Digest()
msg.Digest = wr.Digest().String()
}
if err := session.Send(&msg); err != nil {
@@ -448,7 +453,7 @@ func (s *service) Abort(ctx context.Context, req *api.AbortRequest) (*ptypes.Emp
func infoToGRPC(info content.Info) api.Info {
return api.Info{
Digest: info.Digest,
Digest: info.Digest.String(),
Size_: info.Size,
CreatedAt: info.CreatedAt,
UpdatedAt: info.UpdatedAt,
@@ -458,7 +463,7 @@ func infoToGRPC(info content.Info) api.Info {
func infoFromGRPC(info api.Info) content.Info {
return content.Info{
Digest: info.Digest,
Digest: digest.Digest(info.Digest),
Size: info.Size_,
CreatedAt: info.CreatedAt,
UpdatedAt: info.UpdatedAt,

View File

@@ -71,6 +71,6 @@ func (s *store) Delete(ctx context.Context, dgst digest.Digest) error {
}
// TODO: Consider whether we should return error here.
return s.publisher.Publish(ctx, "/content/delete", &eventstypes.ContentDelete{
Digest: dgst,
Digest: dgst.String(),
})
}

View File

@@ -27,6 +27,7 @@ import (
"github.com/containerd/containerd/mount"
"github.com/containerd/containerd/plugin"
"github.com/containerd/containerd/services"
"github.com/opencontainers/go-digest"
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
"google.golang.org/grpc"
)
@@ -170,7 +171,7 @@ func toMounts(apim []*types.Mount) []mount.Mount {
func toDescriptor(d *types.Descriptor) ocispec.Descriptor {
return ocispec.Descriptor{
MediaType: d.MediaType,
Digest: d.Digest,
Digest: digest.Digest(d.Digest),
Size: d.Size_,
Annotations: d.Annotations,
}
@@ -179,7 +180,7 @@ func toDescriptor(d *types.Descriptor) ocispec.Descriptor {
func fromDescriptor(d ocispec.Descriptor) *types.Descriptor {
return &types.Descriptor{
MediaType: d.MediaType,
Digest: d.Digest,
Digest: d.Digest.String(),
Size_: d.Size,
Annotations: d.Annotations,
}

View File

@@ -20,6 +20,7 @@ import (
imagesapi "github.com/containerd/containerd/api/services/images/v1"
"github.com/containerd/containerd/api/types"
"github.com/containerd/containerd/images"
"github.com/opencontainers/go-digest"
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
)
@@ -58,7 +59,7 @@ func descFromProto(desc *types.Descriptor) ocispec.Descriptor {
return ocispec.Descriptor{
MediaType: desc.MediaType,
Size: desc.Size_,
Digest: desc.Digest,
Digest: digest.Digest(desc.Digest),
Annotations: desc.Annotations,
}
}
@@ -67,7 +68,7 @@ func descToProto(desc *ocispec.Descriptor) types.Descriptor {
return types.Descriptor{
MediaType: desc.MediaType,
Size_: desc.Size,
Digest: desc.Digest,
Digest: desc.Digest.String(),
Annotations: desc.Annotations,
}
}

View File

@@ -47,6 +47,7 @@ import (
"github.com/containerd/containerd/services"
"github.com/containerd/typeurl"
ptypes "github.com/gogo/protobuf/types"
"github.com/opencontainers/go-digest"
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
@@ -173,7 +174,7 @@ func (l *local) Create(ctx context.Context, r *api.CreateTaskRequest, _ ...grpc.
}
reader, err := l.store.ReaderAt(ctx, ocispec.Descriptor{
MediaType: r.Checkpoint.MediaType,
Digest: r.Checkpoint.Digest,
Digest: digest.Digest(r.Checkpoint.Digest),
Size: r.Checkpoint.Size_,
Annotations: r.Checkpoint.Annotations,
})
@@ -688,7 +689,7 @@ func (l *local) writeContent(ctx context.Context, mediaType, ref string, r io.Re
}
return &types.Descriptor{
MediaType: mediaType,
Digest: writer.Digest(),
Digest: writer.Digest().String(),
Size_: size,
Annotations: make(map[string]string),
}, nil