From 866d563f4f1637463f553cefc4360517800b2a04 Mon Sep 17 00:00:00 2001 From: Danny Rehelis Date: Sat, 30 Nov 2024 19:12:22 +0000 Subject: [PATCH 1/3] feat: Add to delete all data --- fakestorage/server.go | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/fakestorage/server.go b/fakestorage/server.go index 4283ccf030..4a247a17c3 100644 --- a/fakestorage/server.go +++ b/fakestorage/server.go @@ -285,6 +285,7 @@ func (s *Server) buildMuxer() { handler.Path("/_internal/config").Methods(http.MethodPut).HandlerFunc(jsonToHTTPHandler(s.updateServerConfig)) handler.MatcherFunc(s.publicHostMatcher).Path("/_internal/config").Methods(http.MethodPut).HandlerFunc(jsonToHTTPHandler(s.updateServerConfig)) handler.Path("/_internal/reseed").Methods(http.MethodPut, http.MethodPost).HandlerFunc(jsonToHTTPHandler(s.reseedServer)) + handler.Path("/_internal/delete_all").Methods(http.MethodPost).HandlerFunc(jsonToHTTPHandler(s.deleteAllFiles)) // Internal - end // XML API @@ -361,6 +362,35 @@ func (s *Server) reseedServer(r *http.Request) jsonResponse { return jsonResponse{data: fromBackendObjects(backendObjects)} } +func (s *Server) deleteAllFiles(r *http.Request) jsonResponse { + storageRoot := s.options.StorageRoot + storageType := "filesystem" + + if storageRoot != "" { + if err := os.RemoveAll(storageRoot); err != nil { + return jsonResponse{ + status: http.StatusInternalServerError, + errorMessage: err.Error(), + } + } + + if err := os.MkdirAll(filepath.Join(storageRoot), 0o700); err != nil { + return jsonResponse{ + status: http.StatusInternalServerError, + errorMessage: err.Error(), + } + } + } else { + storageType = "memory" + s.backend, _ = backend.NewStorageMemory(nil) + } + + return jsonResponse{ + status: http.StatusOK, + data: map[string]string{"message": fmt.Sprintf("All files deleted successfully from %s", storageType)}, + } +} + func generateObjectsFromFiles(folder string) ([]Object, []string) { var objects []Object var emptyBuckets []string From 259c53f0733254fa1e8bae1c65b8bd8077742d47 Mon Sep 17 00:00:00 2001 From: Danny Rehelis Date: Sun, 1 Dec 2024 20:03:47 +0000 Subject: [PATCH 2/3] fix: lint --- fakestorage/server.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fakestorage/server.go b/fakestorage/server.go index 4a247a17c3..65f8ae433c 100644 --- a/fakestorage/server.go +++ b/fakestorage/server.go @@ -386,9 +386,9 @@ func (s *Server) deleteAllFiles(r *http.Request) jsonResponse { } return jsonResponse{ - status: http.StatusOK, - data: map[string]string{"message": fmt.Sprintf("All files deleted successfully from %s", storageType)}, - } + status: http.StatusOK, + data: map[string]string{"message": fmt.Sprintf("All files deleted successfully from %s", storageType)}, + } } func generateObjectsFromFiles(folder string) ([]Object, []string) { From 9e09a183088cea7a117325d079b8ad081b8fc472 Mon Sep 17 00:00:00 2001 From: Danny Rehelis Date: Sat, 4 Jan 2025 06:47:28 +0000 Subject: [PATCH 3/3] cr: move DeleteAllFiles to be part of the backend interface --- fakestorage/server.go | 25 +++++-------------------- internal/backend/fs.go | 9 +++++++++ internal/backend/memory.go | 7 +++++++ internal/backend/storage.go | 1 + 4 files changed, 22 insertions(+), 20 deletions(-) diff --git a/fakestorage/server.go b/fakestorage/server.go index 65f8ae433c..7c904f88d5 100644 --- a/fakestorage/server.go +++ b/fakestorage/server.go @@ -363,31 +363,16 @@ func (s *Server) reseedServer(r *http.Request) jsonResponse { } func (s *Server) deleteAllFiles(r *http.Request) jsonResponse { - storageRoot := s.options.StorageRoot - storageType := "filesystem" - - if storageRoot != "" { - if err := os.RemoveAll(storageRoot); err != nil { - return jsonResponse{ - status: http.StatusInternalServerError, - errorMessage: err.Error(), - } + if err := s.backend.DeleteAllFiles(); err != nil { + return jsonResponse{ + status: http.StatusInternalServerError, + errorMessage: err.Error(), } - - if err := os.MkdirAll(filepath.Join(storageRoot), 0o700); err != nil { - return jsonResponse{ - status: http.StatusInternalServerError, - errorMessage: err.Error(), - } - } - } else { - storageType = "memory" - s.backend, _ = backend.NewStorageMemory(nil) } return jsonResponse{ status: http.StatusOK, - data: map[string]string{"message": fmt.Sprintf("All files deleted successfully from %s", storageType)}, + data: map[string]string{"message": "All files deleted successfully"}, } } diff --git a/internal/backend/fs.go b/internal/backend/fs.go index c96867d802..f0d1002b79 100644 --- a/internal/backend/fs.go +++ b/internal/backend/fs.go @@ -467,3 +467,12 @@ func (s *storageFS) ComposeObject(bucketName string, objectNames []string, desti return result, nil } + +func (s *storageFS) DeleteAllFiles() error { + s.mtx.Lock() + defer s.mtx.Unlock() + if err := os.RemoveAll(s.rootDir); err != nil { + return err + } + return os.MkdirAll(s.rootDir, 0o700) +} diff --git a/internal/backend/memory.go b/internal/backend/memory.go index c32f06abf2..9da4b4a096 100644 --- a/internal/backend/memory.go +++ b/internal/backend/memory.go @@ -390,3 +390,10 @@ func (s *storageMemory) ComposeObject(bucketName string, objectNames []string, d return result, nil } + +func (s *storageMemory) DeleteAllFiles() error { + s.mtx.Lock() + defer s.mtx.Unlock() + s.buckets = make(map[string]bucketInMemory) + return nil +} diff --git a/internal/backend/storage.go b/internal/backend/storage.go index da8e8e51e2..fd382ae983 100644 --- a/internal/backend/storage.go +++ b/internal/backend/storage.go @@ -31,6 +31,7 @@ type Storage interface { PatchObject(bucketName, objectName string, attrsToUpdate ObjectAttrs) (StreamingObject, error) UpdateObject(bucketName, objectName string, attrsToUpdate ObjectAttrs) (StreamingObject, error) ComposeObject(bucketName string, objectNames []string, destinationName string, metadata map[string]string, contentType string) (StreamingObject, error) + DeleteAllFiles() error } type Error string