mirror of
https://github.com/minio/minio.git
synced 2025-04-06 21:00:40 -04:00
list: Hide objects/versions with pending/failed replicated deletion (#20047)
In regular listing, this commit will avoid showing an object when its latest version has a pending or failed deletion. In replicated setup. It will also prevent showing older versions in the same case.
This commit is contained in:
parent
f4230777b3
commit
e726d8ff0f
@ -532,6 +532,9 @@ func (m *metaCacheEntriesSorted) fileInfoVersions(bucket, prefix, delimiter, aft
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, version := range fiVersions {
|
for _, version := range fiVersions {
|
||||||
|
if !version.VersionPurgeStatus().Empty() {
|
||||||
|
continue
|
||||||
|
}
|
||||||
versioned := vcfg != nil && vcfg.Versioned(entry.name)
|
versioned := vcfg != nil && vcfg.Versioned(entry.name)
|
||||||
versions = append(versions, version.ToObjectInfo(bucket, entry.name, versioned))
|
versions = append(versions, version.ToObjectInfo(bucket, entry.name, versioned))
|
||||||
}
|
}
|
||||||
@ -593,7 +596,7 @@ func (m *metaCacheEntriesSorted) fileInfos(bucket, prefix, delimiter string) (ob
|
|||||||
}
|
}
|
||||||
|
|
||||||
fi, err := entry.fileInfo(bucket)
|
fi, err := entry.fileInfo(bucket)
|
||||||
if err == nil {
|
if err == nil && fi.VersionPurgeStatus().Empty() {
|
||||||
versioned := vcfg != nil && vcfg.Versioned(entry.name)
|
versioned := vcfg != nil && vcfg.Versioned(entry.name)
|
||||||
objects = append(objects, fi.ToObjectInfo(bucket, entry.name, versioned))
|
objects = append(objects, fi.ToObjectInfo(bucket, entry.name, versioned))
|
||||||
}
|
}
|
||||||
|
@ -52,7 +52,9 @@ export MINIO_ROOT_USER="minioadmin"
|
|||||||
export MINIO_ROOT_PASSWORD="minioadmin"
|
export MINIO_ROOT_PASSWORD="minioadmin"
|
||||||
|
|
||||||
./minio server --address ":9001" /tmp/xl/1/{1...4}/ 2>&1 >/tmp/dc1.log &
|
./minio server --address ":9001" /tmp/xl/1/{1...4}/ 2>&1 >/tmp/dc1.log &
|
||||||
|
pid1=$!
|
||||||
./minio server --address ":9002" /tmp/xl/2/{1...4}/ 2>&1 >/tmp/dc2.log &
|
./minio server --address ":9002" /tmp/xl/2/{1...4}/ 2>&1 >/tmp/dc2.log &
|
||||||
|
pid2=$!
|
||||||
|
|
||||||
sleep 3
|
sleep 3
|
||||||
|
|
||||||
@ -69,6 +71,8 @@ export MC_HOST_myminio2=http://minioadmin:minioadmin@localhost:9002
|
|||||||
|
|
||||||
./mc replicate add myminio1/testbucket --remote-bucket http://minioadmin:minioadmin@localhost:9002/testbucket/ --priority 1
|
./mc replicate add myminio1/testbucket --remote-bucket http://minioadmin:minioadmin@localhost:9002/testbucket/ --priority 1
|
||||||
|
|
||||||
|
# Test replication of delete markers and permanent deletes
|
||||||
|
|
||||||
./mc cp README.md myminio1/testbucket/dir/file
|
./mc cp README.md myminio1/testbucket/dir/file
|
||||||
./mc cp README.md myminio1/testbucket/dir/file
|
./mc cp README.md myminio1/testbucket/dir/file
|
||||||
|
|
||||||
@ -111,5 +115,33 @@ if [ $ret -ne 0 ]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Test listing of non replicated permanent deletes
|
||||||
|
|
||||||
|
set -x
|
||||||
|
|
||||||
|
./mc mb myminio1/foobucket/ myminio2/foobucket/ --with-versioning
|
||||||
|
./mc replicate add myminio1/foobucket --remote-bucket http://minioadmin:minioadmin@localhost:9002/foobucket/ --priority 1
|
||||||
|
./mc cp README.md myminio1/foobucket/dir/file
|
||||||
|
|
||||||
|
versionId="$(./mc ls --json --versions myminio1/foobucket/dir/ | jq -r .versionId)"
|
||||||
|
|
||||||
|
kill ${pid2} && wait ${pid2} || true
|
||||||
|
|
||||||
|
aws s3api --endpoint-url http://localhost:9001 --profile minioadmin delete-object --bucket foobucket --key dir/file --version-id "$versionId"
|
||||||
|
|
||||||
|
out="$(./mc ls myminio1/foobucket/dir/)"
|
||||||
|
if [ "$out" != "" ]; then
|
||||||
|
echo "BUG: non versioned listing should not show pending/failed replicated delete:"
|
||||||
|
echo "$out"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
out="$(./mc ls --versions myminio1/foobucket/dir/)"
|
||||||
|
if [ "$out" != "" ]; then
|
||||||
|
echo "BUG: versioned listing should not show pending/failed replicated deletes:"
|
||||||
|
echo "$out"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
echo "Success"
|
echo "Success"
|
||||||
catch
|
catch
|
||||||
|
Loading…
x
Reference in New Issue
Block a user