tests: Fix sporadic failure of TestXLStorageDeleteFile (#14911)

The test expects from DeleteFile to return errDiskNotFound when the disk
is not available. It calls os.RemoveAll() to remove one disk after XL storage
initialization. However, this latter contains some goroutines which can
race with os.RemoveAll() and then the test fails sporadically with
returning random errors.

The commit will tweak the initialization routine of the XL storage to
only run deletion of temporary and metacache data in the  background,
so TestXLStorageDeleteFile won't fail anymore.
This commit is contained in:
Anis Elleuch 2022-05-12 23:24:58 +01:00 committed by GitHub
parent 4629abd5a2
commit ca69e54cb6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 14 additions and 11 deletions

View file

@ -70,7 +70,7 @@ var printEndpointError = func() func(Endpoint, error, bool) {
}()
// Cleans up tmp directory of the local disk.
func formatErasureCleanupTmp(diskPath string) {
func bgFormatErasureCleanupTmp(diskPath string) {
// Need to move temporary objects left behind from previous run of minio
// server to a unique directory under `minioMetaTmpBucket-old` to clean
// up `minioMetaTmpBucket` for the current run.
@ -98,9 +98,8 @@ func formatErasureCleanupTmp(diskPath string) {
}
go removeAll(tmpOld)
// Renames and schedules for purging all bucket metacache.
renameAllBucketMetacache(diskPath)
go renameAllBucketMetacache(diskPath)
}
// Following error message is added to fix a regression in release

View file

@ -244,7 +244,7 @@ func newXLStorage(ep Endpoint) (s *xlStorage, err error) {
diskIndex: -1,
}
go formatErasureCleanupTmp(s.diskPath) // cleanup any old data.
bgFormatErasureCleanupTmp(s.diskPath) // cleanup any old data.
formatData, formatFi, err := formatErasureMigrate(s.diskPath)
if err != nil && !errors.Is(err, os.ErrNotExist) {

View file

@ -959,13 +959,6 @@ func TestXLStorageDeleteFile(t *testing.T) {
}
defer os.RemoveAll(path)
// create xlStorage test setup
xlStorageDeletedStorage, diskPath, err := newXLStorageTestSetup()
if err != nil {
t.Fatalf("Unable to create xlStorage test setup, %s", err)
}
// removing the disk, used to recreate disk not found error.
os.RemoveAll(diskPath)
// Setup test environment.
if err = xlStorage.MakeVol(context.Background(), "success-vol"); err != nil {
t.Fatalf("Unable to create volume, %s", err)
@ -1066,6 +1059,17 @@ func TestXLStorageDeleteFile(t *testing.T) {
}
}
// create xlStorage test setup
xlStorageDeletedStorage, diskPath, err := newXLStorageTestSetup()
if err != nil {
t.Fatalf("Unable to create xlStorage test setup, %s", err)
}
// removing the disk, used to recreate disk not found error.
err = os.RemoveAll(diskPath)
if err != nil {
t.Fatalf("Unable to remoe xlStorage diskpath, %s", err)
}
// TestXLStorage for delete on an removed disk.
// should fail with disk not found.
err = xlStorageDeletedStorage.Delete(context.Background(), "del-vol", "my-file", false)