mirror of https://github.com/minio/minio.git
fix: ensure buckets are preserved if one set returns error (#9468)
the bucket should be deleted if it can be successfully deleted on all sets, if not we should ensure to restore those buckets properly.
This commit is contained in:
parent
073aac3d92
commit
97d952e61c
|
@ -514,12 +514,11 @@ func (s *xlSets) MakeBucketWithLocation(ctx context.Context, bucket, location st
|
||||||
}
|
}
|
||||||
|
|
||||||
errs := g.Wait()
|
errs := g.Wait()
|
||||||
// Upon even a single write quorum error we undo all previously created buckets.
|
// Upon any error we try to undo the make bucket operation if possible
|
||||||
|
// on all sets where it succeeded.
|
||||||
for _, err := range errs {
|
for _, err := range errs {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if _, ok := err.(InsufficientWriteQuorum); ok {
|
undoMakeBucketSets(bucket, s.sets, errs)
|
||||||
undoMakeBucketSets(bucket, s.sets, errs)
|
|
||||||
}
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -686,13 +685,11 @@ func (s *xlSets) DeleteBucket(ctx context.Context, bucket string, forceDelete bo
|
||||||
}
|
}
|
||||||
|
|
||||||
errs := g.Wait()
|
errs := g.Wait()
|
||||||
// For any write quorum failure, we undo all the delete buckets operation
|
// For any failure, we attempt undo all the delete buckets operation
|
||||||
// by creating all the buckets again.
|
// by creating buckets again on all sets which were successfully deleted.
|
||||||
for _, err := range errs {
|
for _, err := range errs {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if _, ok := err.(InsufficientWriteQuorum); ok {
|
undoDeleteBucketSets(bucket, s.sets, errs)
|
||||||
undoDeleteBucketSets(bucket, s.sets, errs)
|
|
||||||
}
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -87,11 +87,9 @@ func newXLZones(ctx context.Context, endpointZones EndpointZones) (ObjectLayer,
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if !z.SingleZone() {
|
|
||||||
z.quickHealBuckets(ctx)
|
|
||||||
}
|
|
||||||
go intDataUpdateTracker.start(GlobalContext, localDrives...)
|
|
||||||
|
|
||||||
|
z.quickHealBuckets(ctx)
|
||||||
|
go intDataUpdateTracker.start(GlobalContext, localDrives...)
|
||||||
return z, nil
|
return z, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue