From 087aaaf8946851f67fecf378ebde8770f710707e Mon Sep 17 00:00:00 2001 From: Harshavardhana Date: Tue, 16 Jun 2020 07:54:27 -0700 Subject: [PATCH] fix: save deleteMarker properly, precision upto UnixNano() (#9843) --- cmd/encryption-v1.go | 10 ++++++++++ cmd/object-handlers.go | 2 +- cmd/xl-storage-format-v2.go | 12 ++++++------ 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/cmd/encryption-v1.go b/cmd/encryption-v1.go index 5900736d7..da898fb49 100644 --- a/cmd/encryption-v1.go +++ b/cmd/encryption-v1.go @@ -950,6 +950,16 @@ func getOpts(ctx context.Context, r *http.Request, bucket, object string) (Objec return opts, nil } +func delOpts(ctx context.Context, r *http.Request, bucket, object string) (opts ObjectOptions, err error) { + versioned := globalBucketVersioningSys.Enabled(bucket) + opts, err = getOpts(ctx, r, bucket, object) + if err != nil { + return opts, err + } + opts.Versioned = versioned + return opts, nil +} + // get ObjectOptions for PUT calls from encryption headers and metadata func putOpts(ctx context.Context, r *http.Request, bucket, object string, metadata map[string]string) (opts ObjectOptions, err error) { versioned := globalBucketVersioningSys.Enabled(bucket) diff --git a/cmd/object-handlers.go b/cmd/object-handlers.go index c6a09bc4f..7fc6af3dc 100644 --- a/cmd/object-handlers.go +++ b/cmd/object-handlers.go @@ -2584,7 +2584,7 @@ func (api objectAPIHandlers) DeleteObjectHandler(w http.ResponseWriter, r *http. } } - opts, err := getOpts(ctx, r, bucket, object) + opts, err := delOpts(ctx, r, bucket, object) if err != nil { writeErrorResponse(ctx, w, toAPIError(ctx, err), r.URL, guessIsBrowserReq(r)) return diff --git a/cmd/xl-storage-format-v2.go b/cmd/xl-storage-format-v2.go index f8c09eec1..895f53694 100644 --- a/cmd/xl-storage-format-v2.go +++ b/cmd/xl-storage-format-v2.go @@ -231,7 +231,7 @@ func (z *xlMetaV2) AddVersion(fi FileInfo) error { Type: DeleteType, DeleteMarker: &xlMetaV2DeleteMarker{ VersionID: uv, - ModTime: fi.ModTime.Unix(), + ModTime: fi.ModTime.UnixNano(), }, }) return nil @@ -262,7 +262,7 @@ func (z *xlMetaV2) AddVersion(fi FileInfo) error { VersionID: uv, DataDir: dd, StatSize: fi.Size, - StatModTime: fi.ModTime.Unix(), + StatModTime: fi.ModTime.UnixNano(), ErasureAlgorithm: ReedSolomon, ErasureM: fi.Erasure.DataBlocks, ErasureN: fi.Erasure.ParityBlocks, @@ -342,7 +342,7 @@ func (j xlMetaV2DeleteMarker) ToFileInfo(volume, path string) (FileInfo, error) fi := FileInfo{ Volume: volume, Name: path, - ModTime: time.Unix(j.ModTime, 0).UTC(), + ModTime: time.Unix(0, j.ModTime).UTC(), VersionID: uuid.UUID(j.VersionID).String(), Deleted: true, } @@ -360,7 +360,7 @@ func (j xlMetaV2Object) ToFileInfo(volume, path string) (FileInfo, error) { Volume: volume, Name: path, Size: j.StatSize, - ModTime: time.Unix(j.StatModTime, 0).UTC(), + ModTime: time.Unix(0, j.StatModTime).UTC(), VersionID: versionID, } fi.Parts = make([]ObjectPartInfo, len(j.PartNumbers)) @@ -536,9 +536,9 @@ func (z xlMetaV2) ToFileInfo(volume, path, versionID string) (FileInfo, error) { var modTime time.Time switch version.Type { case ObjectType: - modTime = time.Unix(version.ObjectV2.StatModTime, 0) + modTime = time.Unix(0, version.ObjectV2.StatModTime) case DeleteType: - modTime = time.Unix(version.DeleteMarker.ModTime, 0) + modTime = time.Unix(0, version.DeleteMarker.ModTime) case LegacyType: modTime = version.ObjectV1.Stat.ModTime default: