[#673] Log deleted objects in multiple removing

Signed-off-by: Denis Kirillov <d.kirillov@yadro.com>
This commit is contained in:
Denis Kirillov 2025-04-01 14:50:13 +03:00
parent 7d6e20fdad
commit 7626b6a04a
2 changed files with 20 additions and 1 deletions

View file

@ -12,10 +12,12 @@ import (
"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/middleware"
"git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/logs"
apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/session"
"git.frostfs.info/TrueCloudLab/policy-engine/pkg/chain"
"github.com/pquerna/otp/totp"
"go.uber.org/zap"
)
// 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)
successObjects := make([]string, 0, len(toRemove))
var errorObjects []string
for _, obj := range deletedObjects {
if obj.Error != nil {
errorObjects = append(errorObjects, formObjNameToLog(obj))
code := "BadRequest"
if s3err, ok := obj.Error.(errors.Error); ok {
code = s3err.Code
@ -254,7 +260,8 @@ func (h *handler) DeleteMultipleObjectsHandler(w http.ResponseWriter, r *http.Re
Key: obj.Name,
VersionID: obj.VersionID,
})
} else if !requested.Quiet {
} else {
successObjects = append(successObjects, formObjNameToLog(obj))
deletedObj := DeletedObject{
ObjectIdentifier: ObjectIdentifier{
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 {
h.logAndSendError(ctx, w, "could not write response", reqInfo, err)
return
}
}
func formObjNameToLog(obj *layer.VersionedObject) string {
return obj.Name + "\x00" + obj.VersionID
}
func (h *handler) DeleteBucketHandler(w http.ResponseWriter, r *http.Request) {
ctx, span := tracing.StartSpanFromContext(r.Context(), "handler.DeleteBucket")
defer span.End()