mirror of
https://github.com/minio/minio.git
synced 2025-04-01 02:03:42 -04:00
fix: preserve modTime for DeleteMarker on remote disks (#9905)
This commit is contained in:
parent
b460b5967f
commit
dee3cf2d7f
@ -287,10 +287,12 @@ func (client *storageRESTClient) DeleteVersion(volume, path string, fi FileInfo)
|
|||||||
values := make(url.Values)
|
values := make(url.Values)
|
||||||
values.Set(storageRESTVolume, volume)
|
values.Set(storageRESTVolume, volume)
|
||||||
values.Set(storageRESTFilePath, path)
|
values.Set(storageRESTFilePath, path)
|
||||||
values.Set(storageRESTVersionID, fi.VersionID)
|
|
||||||
values.Set(storageRESTDeleteMarker, strconv.FormatBool(fi.Deleted))
|
|
||||||
|
|
||||||
respBody, err := client.call(storageRESTMethodDeleteVersion, values, nil, -1)
|
var buffer bytes.Buffer
|
||||||
|
encoder := gob.NewEncoder(&buffer)
|
||||||
|
encoder.Encode(&fi)
|
||||||
|
|
||||||
|
respBody, err := client.call(storageRESTMethodDeleteVersion, values, &buffer, -1)
|
||||||
defer http.DrainBody(respBody)
|
defer http.DrainBody(respBody)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -286,10 +286,15 @@ func (s *storageRESTServer) DeleteVersionHandler(w http.ResponseWriter, r *http.
|
|||||||
vars := mux.Vars(r)
|
vars := mux.Vars(r)
|
||||||
volume := vars[storageRESTVolume]
|
volume := vars[storageRESTVolume]
|
||||||
filePath := vars[storageRESTFilePath]
|
filePath := vars[storageRESTFilePath]
|
||||||
versionID := vars[storageRESTVersionID]
|
|
||||||
deleteMarker := vars[storageRESTDeleteMarker] == "true"
|
|
||||||
|
|
||||||
err := s.storage.DeleteVersion(volume, filePath, FileInfo{VersionID: versionID, Deleted: deleteMarker})
|
var fi FileInfo
|
||||||
|
decoder := gob.NewDecoder(r.Body)
|
||||||
|
if err := decoder.Decode(&fi); err != nil {
|
||||||
|
s.writeErrorResponse(w, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
err := s.storage.DeleteVersion(volume, filePath, fi)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.writeErrorResponse(w, err)
|
s.writeErrorResponse(w, err)
|
||||||
}
|
}
|
||||||
|
@ -18,6 +18,7 @@ package cmd
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
@ -230,13 +231,17 @@ func (z *xlMetaV2) AddVersion(fi FileInfo) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
z.Versions = append(z.Versions, xlMetaV2Version{
|
v := xlMetaV2Version{
|
||||||
Type: DeleteType,
|
Type: DeleteType,
|
||||||
DeleteMarker: &xlMetaV2DeleteMarker{
|
DeleteMarker: &xlMetaV2DeleteMarker{
|
||||||
VersionID: uv,
|
VersionID: uv,
|
||||||
ModTime: fi.ModTime.UnixNano(),
|
ModTime: fi.ModTime.UnixNano(),
|
||||||
},
|
},
|
||||||
})
|
}
|
||||||
|
if !v.Valid() {
|
||||||
|
return errors.New("internal error: invalid version entry generated")
|
||||||
|
}
|
||||||
|
z.Versions = append(z.Versions, v)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -305,6 +310,10 @@ func (z *xlMetaV2) AddVersion(fi FileInfo) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !ventry.Valid() {
|
||||||
|
return errors.New("internal error: invalid version entry generated")
|
||||||
|
}
|
||||||
|
|
||||||
for i, version := range z.Versions {
|
for i, version := range z.Versions {
|
||||||
if !version.Valid() {
|
if !version.Valid() {
|
||||||
return errFileCorrupt
|
return errFileCorrupt
|
||||||
|
Loading…
x
Reference in New Issue
Block a user