mirror of
https://github.com/minio/minio.git
synced 2025-10-28 23:35:01 -04:00
send replication requests to correct pool (#1162)
Fixes incorrect application of ilm expiry rules on versioned objects when replication is enabled. Regression from https://github.com/minio/minio/pull/20441 which sends DeleteObject calls to all pools. This is a problem for replication + ilm scenario since replicated version can end up in a pool by itself instead of pool where remaining object versions reside. For example, if the delete marker is set on pool1 and object versions exist on pool2, the second rule below will cause the delete marker to be expired by ilm policy since it is the single version present in pool1 ``` { "Rules": [ { "ID": "cs6il1ri2hp48g71mdjg", "NoncurrentVersionExpiration": { "NoncurrentDays": 14 }, "Status": "Enabled" }, { "Expiration": { "ExpiredObjectDeleteMarker": true }, "ID": "cs6inj3i2hp4po19cil0", "Status": "Enabled" } ] } ```
This commit is contained in:
parent
83b2ad418b
commit
e909be6380
@ -1185,6 +1185,13 @@ func (z *erasureServerPools) DeleteObject(ctx context.Context, bucket string, ob
|
||||
return z.deleteObjectFromAllPools(ctx, bucket, object, opts, noReadQuorumPools)
|
||||
}
|
||||
|
||||
// All replication requests needs to go to pool with the object.
|
||||
if opts.ReplicationRequest {
|
||||
objInfo, err = z.serverPools[pinfo.Index].DeleteObject(ctx, bucket, object, opts)
|
||||
objInfo.Name = decodeDirObject(object)
|
||||
return objInfo, err
|
||||
}
|
||||
|
||||
for _, pool := range z.serverPools {
|
||||
objInfo, err := pool.DeleteObject(ctx, bucket, object, opts)
|
||||
if err != nil && !isErrObjectNotFound(err) && !isErrVersionNotFound(err) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user