forked from TrueCloudLab/frostfs-s3-gw
[#673] Log deleted objects in multiple removing
Signed-off-by: Denis Kirillov <d.kirillov@yadro.com>
This commit is contained in:
parent
7d6e20fdad
commit
7626b6a04a
2 changed files with 20 additions and 1 deletions
|
@ -12,10 +12,12 @@ import (
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/errors"
|
"git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/errors"
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer"
|
"git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer"
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/middleware"
|
"git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/middleware"
|
||||||
|
"git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/logs"
|
||||||
apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
|
apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/session"
|
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/session"
|
||||||
"git.frostfs.info/TrueCloudLab/policy-engine/pkg/chain"
|
"git.frostfs.info/TrueCloudLab/policy-engine/pkg/chain"
|
||||||
"github.com/pquerna/otp/totp"
|
"github.com/pquerna/otp/totp"
|
||||||
|
"go.uber.org/zap"
|
||||||
)
|
)
|
||||||
|
|
||||||
// limitation of AWS https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObjects.html
|
// limitation of AWS https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObjects.html
|
||||||
|
@ -242,8 +244,12 @@ func (h *handler) DeleteMultipleObjectsHandler(w http.ResponseWriter, r *http.Re
|
||||||
}
|
}
|
||||||
deletedObjects := h.obj.DeleteObjects(ctx, p)
|
deletedObjects := h.obj.DeleteObjects(ctx, p)
|
||||||
|
|
||||||
|
successObjects := make([]string, 0, len(toRemove))
|
||||||
|
var errorObjects []string
|
||||||
|
|
||||||
for _, obj := range deletedObjects {
|
for _, obj := range deletedObjects {
|
||||||
if obj.Error != nil {
|
if obj.Error != nil {
|
||||||
|
errorObjects = append(errorObjects, formObjNameToLog(obj))
|
||||||
code := "BadRequest"
|
code := "BadRequest"
|
||||||
if s3err, ok := obj.Error.(errors.Error); ok {
|
if s3err, ok := obj.Error.(errors.Error); ok {
|
||||||
code = s3err.Code
|
code = s3err.Code
|
||||||
|
@ -254,7 +260,8 @@ func (h *handler) DeleteMultipleObjectsHandler(w http.ResponseWriter, r *http.Re
|
||||||
Key: obj.Name,
|
Key: obj.Name,
|
||||||
VersionID: obj.VersionID,
|
VersionID: obj.VersionID,
|
||||||
})
|
})
|
||||||
} else if !requested.Quiet {
|
} else {
|
||||||
|
successObjects = append(successObjects, formObjNameToLog(obj))
|
||||||
deletedObj := DeletedObject{
|
deletedObj := DeletedObject{
|
||||||
ObjectIdentifier: ObjectIdentifier{
|
ObjectIdentifier: ObjectIdentifier{
|
||||||
ObjectName: obj.Name,
|
ObjectName: obj.Name,
|
||||||
|
@ -269,12 +276,23 @@ func (h *handler) DeleteMultipleObjectsHandler(w http.ResponseWriter, r *http.Re
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
h.reqLogger(ctx).Info(logs.DeleteObjects, zap.Strings("success", successObjects), zap.Strings("errors", errorObjects),
|
||||||
|
logs.TagField(logs.TagDatapath))
|
||||||
|
|
||||||
|
if requested.Quiet {
|
||||||
|
response.DeletedObjects = nil
|
||||||
|
}
|
||||||
|
|
||||||
if err = middleware.EncodeToResponse(w, response); err != nil {
|
if err = middleware.EncodeToResponse(w, response); err != nil {
|
||||||
h.logAndSendError(ctx, w, "could not write response", reqInfo, err)
|
h.logAndSendError(ctx, w, "could not write response", reqInfo, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func formObjNameToLog(obj *layer.VersionedObject) string {
|
||||||
|
return obj.Name + "\x00" + obj.VersionID
|
||||||
|
}
|
||||||
|
|
||||||
func (h *handler) DeleteBucketHandler(w http.ResponseWriter, r *http.Request) {
|
func (h *handler) DeleteBucketHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.DeleteBucket")
|
ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.DeleteBucket")
|
||||||
defer span.End()
|
defer span.End()
|
||||||
|
|
|
@ -164,6 +164,7 @@ const (
|
||||||
FailedToResolveCID = "failed to resolve CID"
|
FailedToResolveCID = "failed to resolve CID"
|
||||||
FailedToDiscardPutPayloadProbablyGoroutineLeaks = "failed to discard put payload, probably goroutine leaks"
|
FailedToDiscardPutPayloadProbablyGoroutineLeaks = "failed to discard put payload, probably goroutine leaks"
|
||||||
FailedToQueueOldUnversionedObjectToDelete = "failed to queue old unversioned object to delete, removal will be performed in lifecycler"
|
FailedToQueueOldUnversionedObjectToDelete = "failed to queue old unversioned object to delete, removal will be performed in lifecycler"
|
||||||
|
DeleteObjects = "delete objects"
|
||||||
)
|
)
|
||||||
|
|
||||||
// External storage.
|
// External storage.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue