From 20ef5e7a6a05cc0d8edd3249d296dd90ad56666b Mon Sep 17 00:00:00 2001 From: Harshavardhana Date: Mon, 12 Dec 2022 01:40:04 -0800 Subject: [PATCH] avoid double deletes() when no more versions (#16206) --- cmd/xl-storage.go | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/cmd/xl-storage.go b/cmd/xl-storage.go index 8dadf51f2..d18f0210d 100644 --- a/cmd/xl-storage.go +++ b/cmd/xl-storage.go @@ -1118,6 +1118,7 @@ func (s *xlStorage) DeleteVersion(ctx context.Context, volume, path string, fi F } if len(xlMeta.versions) != 0 { + // xl.meta must still exist for other versions, dataDir is purged. buf, err = xlMeta.AppendTo(metaDataPoolGet()) defer metaDataPoolPut(buf) if err != nil { @@ -1127,17 +1128,13 @@ func (s *xlStorage) DeleteVersion(ctx context.Context, volume, path string, fi F return s.WriteAll(ctx, volume, pathJoin(path, xlStorageFormatFile), buf) } - // Move xl.meta to trash - filePath := pathJoin(volumeDir, path, xlStorageFormatFile) + // No more versions, this is the last version purge everything. + filePath := pathJoin(volumeDir, path) if err = checkPathLength(filePath); err != nil { return err } - err = s.moveToTrash(filePath, false, false) - if err == nil || err == errFileNotFound { - s.deleteFile(volumeDir, pathJoin(volumeDir, path), false, false) - } - return err + return s.deleteFile(volumeDir, filePath, true, false) } // Updates only metadata for a given version.