fix: save deleteMarker properly, precision upto UnixNano() (#9843)

master
Harshavardhana 4 years ago committed by GitHub
parent cbb7a09376
commit 087aaaf894
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 10
      cmd/encryption-v1.go
  2. 2
      cmd/object-handlers.go
  3. 12
      cmd/xl-storage-format-v2.go

@ -950,6 +950,16 @@ func getOpts(ctx context.Context, r *http.Request, bucket, object string) (Objec
return opts, nil 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 // 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) { func putOpts(ctx context.Context, r *http.Request, bucket, object string, metadata map[string]string) (opts ObjectOptions, err error) {
versioned := globalBucketVersioningSys.Enabled(bucket) versioned := globalBucketVersioningSys.Enabled(bucket)

@ -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 { if err != nil {
writeErrorResponse(ctx, w, toAPIError(ctx, err), r.URL, guessIsBrowserReq(r)) writeErrorResponse(ctx, w, toAPIError(ctx, err), r.URL, guessIsBrowserReq(r))
return return

@ -231,7 +231,7 @@ func (z *xlMetaV2) AddVersion(fi FileInfo) error {
Type: DeleteType, Type: DeleteType,
DeleteMarker: &xlMetaV2DeleteMarker{ DeleteMarker: &xlMetaV2DeleteMarker{
VersionID: uv, VersionID: uv,
ModTime: fi.ModTime.Unix(), ModTime: fi.ModTime.UnixNano(),
}, },
}) })
return nil return nil
@ -262,7 +262,7 @@ func (z *xlMetaV2) AddVersion(fi FileInfo) error {
VersionID: uv, VersionID: uv,
DataDir: dd, DataDir: dd,
StatSize: fi.Size, StatSize: fi.Size,
StatModTime: fi.ModTime.Unix(), StatModTime: fi.ModTime.UnixNano(),
ErasureAlgorithm: ReedSolomon, ErasureAlgorithm: ReedSolomon,
ErasureM: fi.Erasure.DataBlocks, ErasureM: fi.Erasure.DataBlocks,
ErasureN: fi.Erasure.ParityBlocks, ErasureN: fi.Erasure.ParityBlocks,
@ -342,7 +342,7 @@ func (j xlMetaV2DeleteMarker) ToFileInfo(volume, path string) (FileInfo, error)
fi := FileInfo{ fi := FileInfo{
Volume: volume, Volume: volume,
Name: path, Name: path,
ModTime: time.Unix(j.ModTime, 0).UTC(), ModTime: time.Unix(0, j.ModTime).UTC(),
VersionID: uuid.UUID(j.VersionID).String(), VersionID: uuid.UUID(j.VersionID).String(),
Deleted: true, Deleted: true,
} }
@ -360,7 +360,7 @@ func (j xlMetaV2Object) ToFileInfo(volume, path string) (FileInfo, error) {
Volume: volume, Volume: volume,
Name: path, Name: path,
Size: j.StatSize, Size: j.StatSize,
ModTime: time.Unix(j.StatModTime, 0).UTC(), ModTime: time.Unix(0, j.StatModTime).UTC(),
VersionID: versionID, VersionID: versionID,
} }
fi.Parts = make([]ObjectPartInfo, len(j.PartNumbers)) 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 var modTime time.Time
switch version.Type { switch version.Type {
case ObjectType: case ObjectType:
modTime = time.Unix(version.ObjectV2.StatModTime, 0) modTime = time.Unix(0, version.ObjectV2.StatModTime)
case DeleteType: case DeleteType:
modTime = time.Unix(version.DeleteMarker.ModTime, 0) modTime = time.Unix(0, version.DeleteMarker.ModTime)
case LegacyType: case LegacyType:
modTime = version.ObjectV1.Stat.ModTime modTime = version.ObjectV1.Stat.ModTime
default: default:

Loading…
Cancel
Save