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:
parent
a14887e20b
commit
b71da59f8a
@ -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,
|
||||
|
@ -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 {
|
||||
|
Loading…
Reference in New Issue
Block a user