fix racy tests when editing xl.getDisks (#8879)

master
Harshavardhana 5 years ago committed by kannappanr
parent b9c48e0ab0
commit 1ffbb5c24c
  1. 2
      cmd/web-handlers_test.go
  2. 2
      cmd/xl-v1-healing_test.go
  3. 8
      cmd/xl-v1-object_test.go

@ -1590,12 +1590,14 @@ func TestWebObjectLayerFaultyDisks(t *testing.T) {
z := obj.(*xlZones) z := obj.(*xlZones)
xl := z.zones[0].sets[0] xl := z.zones[0].sets[0]
xlDisks := xl.getDisks() xlDisks := xl.getDisks()
z.zones[0].xlDisksMu.Lock()
xl.getDisks = func() []StorageAPI { xl.getDisks = func() []StorageAPI {
for i, d := range xlDisks { for i, d := range xlDisks {
xlDisks[i] = newNaughtyDisk(d, nil, errFaultyDisk) xlDisks[i] = newNaughtyDisk(d, nil, errFaultyDisk)
} }
return xlDisks return xlDisks
} }
z.zones[0].xlDisksMu.Unlock()
// Initialize web rpc endpoint. // Initialize web rpc endpoint.
apiRouter := initTestWebRPCEndPoint(obj) apiRouter := initTestWebRPCEndPoint(obj)

@ -270,6 +270,7 @@ func TestHealObjectXL(t *testing.T) {
} }
xlDisks := xl.getDisks() xlDisks := xl.getDisks()
z.zones[0].xlDisksMu.Lock()
xl.getDisks = func() []StorageAPI { xl.getDisks = func() []StorageAPI {
// Nil more than half the disks, to remove write quorum. // Nil more than half the disks, to remove write quorum.
for i := 0; i <= len(xlDisks)/2; i++ { for i := 0; i <= len(xlDisks)/2; i++ {
@ -277,6 +278,7 @@ func TestHealObjectXL(t *testing.T) {
} }
return xlDisks return xlDisks
} }
z.zones[0].xlDisksMu.Unlock()
// Try healing now, expect to receive errDiskNotFound. // Try healing now, expect to receive errDiskNotFound.
_, err = obj.HealObject(context.Background(), bucket, object, false, false, madmin.HealDeepScan) _, err = obj.HealObject(context.Background(), bucket, object, false, false, madmin.HealDeepScan)

@ -217,12 +217,14 @@ func TestXLDeleteObjectDiskNotFound(t *testing.T) {
// for a 16 disk setup, quorum is 9. To simulate disks not found yet // for a 16 disk setup, quorum is 9. To simulate disks not found yet
// quorum is available, we remove disks leaving quorum disks behind. // quorum is available, we remove disks leaving quorum disks behind.
xlDisks := xl.getDisks() xlDisks := xl.getDisks()
z.zones[0].xlDisksMu.Lock()
xl.getDisks = func() []StorageAPI { xl.getDisks = func() []StorageAPI {
for i := range xlDisks[:7] { for i := range xlDisks[:7] {
xlDisks[i] = newNaughtyDisk(xlDisks[i], nil, errFaultyDisk) xlDisks[i] = newNaughtyDisk(xlDisks[i], nil, errFaultyDisk)
} }
return xlDisks return xlDisks
} }
z.zones[0].xlDisksMu.Unlock()
err = obj.DeleteObject(context.Background(), bucket, object) err = obj.DeleteObject(context.Background(), bucket, object)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
@ -236,11 +238,13 @@ func TestXLDeleteObjectDiskNotFound(t *testing.T) {
// Remove one more disk to 'lose' quorum, by setting it to nil. // Remove one more disk to 'lose' quorum, by setting it to nil.
xlDisks = xl.getDisks() xlDisks = xl.getDisks()
z.zones[0].xlDisksMu.Lock()
xl.getDisks = func() []StorageAPI { xl.getDisks = func() []StorageAPI {
xlDisks[7] = nil xlDisks[7] = nil
xlDisks[8] = nil xlDisks[8] = nil
return xlDisks return xlDisks
} }
z.zones[0].xlDisksMu.Unlock()
err = obj.DeleteObject(context.Background(), bucket, object) err = obj.DeleteObject(context.Background(), bucket, object)
// since majority of disks are not available, metaquorum is not achieved and hence errXLReadQuorum error // since majority of disks are not available, metaquorum is not achieved and hence errXLReadQuorum error
if err != toObjectErr(errXLReadQuorum, bucket, object) { if err != toObjectErr(errXLReadQuorum, bucket, object) {
@ -293,9 +297,11 @@ func TestGetObjectNoQuorum(t *testing.T) {
xlDisks[i] = newNaughtyDisk(xlDisks[i], diskErrors, errFaultyDisk) xlDisks[i] = newNaughtyDisk(xlDisks[i], diskErrors, errFaultyDisk)
} }
} }
z.zones[0].xlDisksMu.Lock()
xl.getDisks = func() []StorageAPI { xl.getDisks = func() []StorageAPI {
return xlDisks return xlDisks
} }
z.zones[0].xlDisksMu.Unlock()
// Fetch object from store. // Fetch object from store.
err = xl.GetObject(context.Background(), bucket, object, 0, int64(len("abcd")), ioutil.Discard, "", opts) err = xl.GetObject(context.Background(), bucket, object, 0, int64(len("abcd")), ioutil.Discard, "", opts)
if err != toObjectErr(errXLReadQuorum, bucket, object) { if err != toObjectErr(errXLReadQuorum, bucket, object) {
@ -350,9 +356,11 @@ func TestPutObjectNoQuorum(t *testing.T) {
xlDisks[i] = newNaughtyDisk(xlDisks[i], diskErrors, errFaultyDisk) xlDisks[i] = newNaughtyDisk(xlDisks[i], diskErrors, errFaultyDisk)
} }
} }
z.zones[0].xlDisksMu.Lock()
xl.getDisks = func() []StorageAPI { xl.getDisks = func() []StorageAPI {
return xlDisks return xlDisks
} }
z.zones[0].xlDisksMu.Unlock()
// Upload new content to same object "object" // Upload new content to same object "object"
_, err = obj.PutObject(context.Background(), bucket, object, mustGetPutObjReader(t, bytes.NewReader([]byte("abcd")), int64(len("abcd")), "", ""), opts) _, err = obj.PutObject(context.Background(), bucket, object, mustGetPutObjReader(t, bytes.NewReader([]byte("abcd")), int64(len("abcd")), "", ""), opts)
if err != toObjectErr(errXLWriteQuorum, bucket, object) { if err != toObjectErr(errXLWriteQuorum, bucket, object) {

Loading…
Cancel
Save