fix: delete-marker replication check properly (#15923)

This commit is contained in:
Poorna
2022-10-21 14:45:06 -07:00
committed by GitHub
parent 58d776daa0
commit e4e90b53c1
7 changed files with 36 additions and 12 deletions

View File

@@ -739,14 +739,15 @@ func (api objectAPIHandlers) headObjectHandler(ctx context.Context, objectAPI Ob
w.Header()[xhttp.AmzDeleteMarker] = []string{strconv.FormatBool(objInfo.DeleteMarker)}
}
QueueReplicationHeal(ctx, bucket, objInfo)
}
// do an additional verification whether object exists when opts.DeleteMarker is set by source
// cluster as part of delete marker replication
if opts.DeleteMarker && opts.ProxyHeaderSet {
opts.VersionID = ""
goi, gerr := getObjectInfo(ctx, bucket, object, opts)
if gerr == nil || goi.VersionID != "" { // object layer returned more info because object is deleted
w.Header().Set(xhttp.MinIOTargetReplicationReady, "true")
// do an additional verification whether object exists when object is deletemarker and request
// is from replication
if opts.CheckDMReplicationReady {
topts := opts
topts.VersionID = ""
goi, gerr := getObjectInfo(ctx, bucket, object, topts)
if gerr == nil || goi.VersionID != "" { // object layer returned more info because object is deleted
w.Header().Set(xhttp.MinIOTargetReplicationReady, "true")
}
}
}
writeErrorResponseHeadersOnly(w, toAPIError(ctx, err))