Integrate complete R3 encoding and safe-read repairs

Signed-off-by: Feng Ruohang <rh@vonng.com>
This commit is contained in:
Feng Ruohang
2026-11-03 22:46:04 +08:00
8 changed files with 488 additions and 16 deletions
+6 -1
View File
@@ -3953,6 +3953,8 @@ func (api objectAPIHandlers) PostRestoreObjectHandler(w http.ResponseWriter, r *
return
}
// Preserve a failed restore read even before the request body is parsed.
opts.Transition.RestoreRequest = &RestoreObjectRequest{}
objInfo, err := getObjectInfo(ctx, bucket, object, opts)
if err != nil {
writeErrorResponse(ctx, w, toAPIError(ctx, err), r.URL)
@@ -3978,6 +3980,7 @@ func (api objectAPIHandlers) PostRestoreObjectHandler(w http.ResponseWriter, r *
writeErrorResponse(ctx, w, apiErr, r.URL)
return
}
opts.Transition.RestoreRequest = rreq
statusCode := http.StatusOK
alreadyRestored := false
if err == nil {
@@ -4006,9 +4009,11 @@ func (api objectAPIHandlers) PostRestoreObjectHandler(w http.ResponseWriter, r *
}
objInfo.UserDefined = metadata
if _, err := objectAPI.CopyObject(GlobalContext, bucket, object, bucket, object, objInfo, ObjectOptions{
VersionID: objInfo.VersionID,
VersionID: objInfo.VersionID,
Transition: opts.Transition,
}, ObjectOptions{
VersionID: objInfo.VersionID,
Transition: opts.Transition,
MTime: objInfo.ModTime,
MetadataChg: true,
}); err != nil {