satellite/metainfo: fix client context cancelation

We should still ignore client cancelation.
Also remove logger dependency on `Report`.

Change-Id: I59987c6b1aaa93202b07e5ef6e207d5191542b52
This commit is contained in:
Yingrong Zhao 2020-08-11 09:00:57 -04:00 committed by Yingrong Zhao
parent a14887e20b
commit b71da59f8a
2 changed files with 19 additions and 12 deletions

View File

@ -15,6 +15,7 @@ import (
"github.com/zeebo/errs"
"go.uber.org/zap"
"storj.io/common/context2"
"storj.io/common/encryption"
"storj.io/common/macaroon"
"storj.io/common/memory"
@ -979,7 +980,15 @@ func (endpoint *Endpoint) BeginDeleteObject(ctx context.Context, req *pb.ObjectB
var object *pb.Object
if canRead || canList {
// Info about deleted object is returned only if either Read, or List permission is granted
deletedObjects := report.DeletedObjects()
deletedObjects, err := report.DeletedObjects()
if err != nil {
endpoint.log.Error("failed to construct deleted object information",
zap.Stringer("Project ID", keyInfo.ProjectID),
zap.String("Bucket", string(req.Bucket)),
zap.String("Encrypted Path", string(req.EncryptedPath)),
zap.Error(err),
)
}
if len(deletedObjects) > 0 {
object = deletedObjects[0]
}
@ -1876,6 +1885,9 @@ func (endpoint *Endpoint) DeleteObjectPieces(
) (report objectdeletion.Report, err error) {
defer mon.Task()(&ctx, projectID.String(), bucket, encryptedPath)(&err)
// We should ignore client cancelling and always try to delete segments.
ctx = context2.WithoutCancellation(ctx)
req := &objectdeletion.ObjectIdentifier{
ProjectID: projectID,
Bucket: bucket,

View File

@ -6,6 +6,7 @@ package objectdeletion
import (
"context"
"github.com/zeebo/errs"
"go.uber.org/zap"
"storj.io/common/pb"
@ -13,8 +14,6 @@ import (
// Report represents the deleteion status report.
type Report struct {
log *zap.Logger
Deleted []*ObjectState
Failed []*ObjectState
}
@ -36,7 +35,8 @@ func (r Report) HasFailures() bool {
}
// DeletedObjects returns successfully deleted objects information.
func (r Report) DeletedObjects() []*pb.Object {
func (r Report) DeletedObjects() ([]*pb.Object, error) {
var errlist errs.Group
objects := make([]*pb.Object, 0, len(r.Deleted))
for _, d := range r.Deleted {
if d.LastSegment == nil {
@ -45,12 +45,7 @@ func (r Report) DeletedObjects() []*pb.Object {
streamMeta := &pb.StreamMeta{}
err := pb.Unmarshal(d.LastSegment.Metadata, streamMeta)
if err != nil {
r.log.Error("failed to unmarshal stream metadata",
zap.Stringer("Project ID", d.ProjectID),
zap.String("Bucket", string(d.Bucket)),
zap.String("Encrypted Path", string(d.EncryptedPath)),
zap.Error(err),
)
errlist.Add(err)
continue
}
object := &pb.Object{
@ -90,14 +85,14 @@ func (r Report) DeletedObjects() []*pb.Object {
objects = append(objects, object)
}
return objects
return objects, errlist.Err()
}
// GenerateReport returns the result of a delete, success, or failure.
func GenerateReport(ctx context.Context, log *zap.Logger, requests []*ObjectIdentifier, deletedPaths [][]byte, pointers []*pb.Pointer) Report {
defer mon.Task()(&ctx)(nil)
report := Report{log: log}
report := Report{}
deletedObjects := make(map[string]*ObjectState)
for i, path := range deletedPaths {
if path == nil {