s3: count stored versions as bucket contents on delete (#11775)

* s3: count stored versions as bucket contents

A <key>.versions directory holding version entries is user data; skipping
it let bucketHasUserObjects report an empty bucket while the recursive
delete dropped every stored version.

* test: rename stale reserved-folders case in bucket delete test

.versions directories are now descended into, so the case only holds
because the folder is empty.
This commit is contained in:
Chris Lu authored and GitHub committed 2026-10-17 15:25:56 -07:00
1 parent 44bb697495
commit 602ddb31f2
2 files changed
+22 -7

No files matched your search

+15 -2
View File
@@ -152,7 +152,7 @@ func TestBucketHasUserObjects_EmptyDirectories(t *testing.T) {
wantHasUser: true,
},
{
name: "bucket with only reserved folders (.uploads, *.versions)",
name: "empty *.versions folder and .uploads do not count",
entriesByDir: map[string][]*filer_pb.Entry{
"/buckets/b": {
{Name: s3_constants.MultipartUploadsFolder, IsDirectory: true},
@@ -162,7 +162,7 @@ func TestBucketHasUserObjects_EmptyDirectories(t *testing.T) {
wantHasUser: false,
},
{
name: "nested versions-named directories are internal",
name: "nested versions directory with stored versions counts",
entriesByDir: map[string][]*filer_pb.Entry{
"/buckets/b": {
{Name: "logs", IsDirectory: true},
@@ -174,6 +174,19 @@ func TestBucketHasUserObjects_EmptyDirectories(t *testing.T) {
{Name: "v1", IsDirectory: false},
},
},
wantHasUser: true,
},
{
name: "nested versions directory left empty does not count",
entriesByDir: map[string][]*filer_pb.Entry{
"/buckets/b": {
{Name: "logs", IsDirectory: true},
},
"/buckets/b/logs": {
{Name: "foo" + s3_constants.VersionsFolder, IsDirectory: true},
},
"/buckets/b/logs/foo" + s3_constants.VersionsFolder: {},
},
wantHasUser: false,
},
{