Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Updates for force delete and prefix and delim bug #100

Merged
merged 9 commits into from
Jan 6, 2025
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions backend/s3mem/backend.go
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,19 @@
return nil
}

func (db *Backend) ForceDeleteBucket(name string) error {
db.lock.Lock()
defer db.lock.Unlock()

Check warning on line 170 in backend/s3mem/backend.go

View check run for this annotation

Codecov / codecov/patch

backend/s3mem/backend.go#L168-L170

Added lines #L168 - L170 were not covered by tests

if db.buckets[name] == nil {
return gofakes3.ErrNoSuchBucket

Check warning on line 173 in backend/s3mem/backend.go

View check run for this annotation

Codecov / codecov/patch

backend/s3mem/backend.go#L172-L173

Added lines #L172 - L173 were not covered by tests
}

delete(db.buckets, name)

Check warning on line 176 in backend/s3mem/backend.go

View check run for this annotation

Codecov / codecov/patch

backend/s3mem/backend.go#L176

Added line #L176 was not covered by tests

return nil

Check warning on line 178 in backend/s3mem/backend.go

View check run for this annotation

Codecov / codecov/patch

backend/s3mem/backend.go#L178

Added line #L178 was not covered by tests
}

func (db *Backend) BucketExists(name string) (exists bool, err error) {
db.lock.RLock()
defer db.lock.RUnlock()
Expand Down
28 changes: 25 additions & 3 deletions gofakes3.go
Original file line number Diff line number Diff line change
Expand Up @@ -230,7 +230,7 @@

isVersion2 := q.Get("list-type") == "2"

g.log.Print(LogInfo, "bucketname:", bucketName, "prefix:", prefix, "page:", fmt.Sprintf("%+v", page))
g.log.Print(LogInfo, "bucketName:", bucketName, "prefix:", prefix, "page:", fmt.Sprintf("%+v", page))

objects, err := g.storage.ListBucket(bucketName, &prefix, page)
if err != nil {
Expand Down Expand Up @@ -400,6 +400,20 @@
if err := g.ensureBucketExists(bucket); err != nil {
return err
}

// Support for Minio's DeleteBucket with force-delete header.
forceDelete := r.Header.Get("x-minio-force-delete")
if forceDelete == "true" {
type forceDeleter interface {
ForceDeleteBucket(name string) error

Check warning on line 408 in gofakes3.go

View check run for this annotation

Codecov / codecov/patch

gofakes3.go#L407-L408

Added lines #L407 - L408 were not covered by tests
}
if f, ok := g.storage.(forceDeleter); ok {
if err := f.ForceDeleteBucket(bucket); err != nil {
return err

Check warning on line 412 in gofakes3.go

View check run for this annotation

Codecov / codecov/patch

gofakes3.go#L410-L412

Added lines #L410 - L412 were not covered by tests
}
}
}

if err := g.storage.DeleteBucket(bucket); err != nil {
return err
}
Expand All @@ -417,7 +431,10 @@
return err
}

w.Write([]byte{})
_, err := w.Write([]byte{})
if err != nil {
return err

Check warning on line 436 in gofakes3.go

View check run for this annotation

Codecov / codecov/patch

gofakes3.go#L436

Added line #L436 was not covered by tests
}
return nil
}

Expand Down Expand Up @@ -463,7 +480,12 @@
g.log.Print(LogErr, "unexpected nil object for key", bucket, object)
return ErrInternal
}
defer obj.Contents.Close()
defer func(Contents io.ReadCloser) {
err := Contents.Close()
if err != nil {
g.log.Print(LogErr, "contents close", err.Error())

Check warning on line 486 in gofakes3.go

View check run for this annotation

Codecov / codecov/patch

gofakes3.go#L486

Added line #L486 was not covered by tests
}
}(obj.Contents)

if err := g.writeGetOrHeadObjectResponse(obj, w, r); err != nil {
return err
Expand Down
7 changes: 4 additions & 3 deletions log.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,10 @@ import "log"
type LogLevel string

const (
LogErr LogLevel = "ERR"
LogWarn LogLevel = "WARN"
LogInfo LogLevel = "INFO"
LogErr LogLevel = "ERR"
LogWarn LogLevel = "WARN"
LogInfo LogLevel = "INFO"
LogDebug LogLevel = "DEBUG"
)

// Logger provides a very minimal target for logging implementations to hit to
Expand Down
3 changes: 3 additions & 0 deletions prefix.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,9 @@ func prefixFromQuery(query url.Values) Prefix {
}
_, prefix.HasPrefix = query["prefix"]
_, prefix.HasDelimiter = query["delimiter"]

prefix.HasPrefix = prefix.HasPrefix && prefix.Prefix != ""
prefix.HasDelimiter = prefix.HasDelimiter && prefix.Delimiter != ""
return prefix
}

Expand Down