mirror of https://github.com/minio/minio.git
Clean entire tmp-old on restart (#15979)
This commit is contained in:
parent
b57fbff7c1
commit
ecc932d5dd
|
@ -117,7 +117,7 @@ func (s *erasureSets) getDiskMap() map[Endpoint]StorageAPI {
|
||||||
// Initializes a new StorageAPI from the endpoint argument, returns
|
// Initializes a new StorageAPI from the endpoint argument, returns
|
||||||
// StorageAPI and also `format` which exists on the disk.
|
// StorageAPI and also `format` which exists on the disk.
|
||||||
func connectEndpoint(endpoint Endpoint) (StorageAPI, *formatErasureV3, error) {
|
func connectEndpoint(endpoint Endpoint) (StorageAPI, *formatErasureV3, error) {
|
||||||
disk, err := newStorageAPIWithoutHealthCheck(endpoint)
|
disk, err := newStorageAPI(endpoint, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
@ -251,7 +251,7 @@ func (s *erasureSets) connectDisks() {
|
||||||
s.erasureDisks[setIndex][diskIndex] = disk
|
s.erasureDisks[setIndex][diskIndex] = disk
|
||||||
} else {
|
} else {
|
||||||
// Enable healthcheck disk for remote endpoint.
|
// Enable healthcheck disk for remote endpoint.
|
||||||
disk, err = newStorageAPI(endpoint)
|
disk, err = newStorageAPI(endpoint, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
printEndpointError(endpoint, err, false)
|
printEndpointError(endpoint, err, false)
|
||||||
s.erasureDisksMu.Unlock()
|
s.erasureDisksMu.Unlock()
|
||||||
|
@ -1250,7 +1250,7 @@ func markRootDisksAsDown(storageDisks []StorageAPI, errs []error) {
|
||||||
|
|
||||||
// HealFormat - heals missing `format.json` on fresh unformatted disks.
|
// HealFormat - heals missing `format.json` on fresh unformatted disks.
|
||||||
func (s *erasureSets) HealFormat(ctx context.Context, dryRun bool) (res madmin.HealResultItem, err error) {
|
func (s *erasureSets) HealFormat(ctx context.Context, dryRun bool) (res madmin.HealResultItem, err error) {
|
||||||
storageDisks, _ := initStorageDisksWithErrorsWithoutHealthCheck(s.endpoints.Endpoints)
|
storageDisks, _ := initStorageDisksWithErrors(s.endpoints.Endpoints, false)
|
||||||
|
|
||||||
defer func(storageDisks []StorageAPI) {
|
defer func(storageDisks []StorageAPI) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -666,30 +666,16 @@ func closeStorageDisks(storageDisks ...StorageAPI) {
|
||||||
wg.Wait()
|
wg.Wait()
|
||||||
}
|
}
|
||||||
|
|
||||||
func initStorageDisksWithErrorsWithoutHealthCheck(endpoints Endpoints) ([]StorageAPI, []error) {
|
|
||||||
// Bootstrap disks.
|
|
||||||
storageDisks := make([]StorageAPI, len(endpoints))
|
|
||||||
g := errgroup.WithNErrs(len(endpoints))
|
|
||||||
for index := range endpoints {
|
|
||||||
index := index
|
|
||||||
g.Go(func() (err error) {
|
|
||||||
storageDisks[index], err = newStorageAPIWithoutHealthCheck(endpoints[index])
|
|
||||||
return err
|
|
||||||
}, index)
|
|
||||||
}
|
|
||||||
return storageDisks, g.Wait()
|
|
||||||
}
|
|
||||||
|
|
||||||
// Initialize storage disks for each endpoint.
|
// Initialize storage disks for each endpoint.
|
||||||
// Errors are returned for each endpoint with matching index.
|
// Errors are returned for each endpoint with matching index.
|
||||||
func initStorageDisksWithErrors(endpoints Endpoints) ([]StorageAPI, []error) {
|
func initStorageDisksWithErrors(endpoints Endpoints, healthCheck bool) ([]StorageAPI, []error) {
|
||||||
// Bootstrap disks.
|
// Bootstrap disks.
|
||||||
storageDisks := make([]StorageAPI, len(endpoints))
|
storageDisks := make([]StorageAPI, len(endpoints))
|
||||||
g := errgroup.WithNErrs(len(endpoints))
|
g := errgroup.WithNErrs(len(endpoints))
|
||||||
for index := range endpoints {
|
for index := range endpoints {
|
||||||
index := index
|
index := index
|
||||||
g.Go(func() (err error) {
|
g.Go(func() (err error) {
|
||||||
storageDisks[index], err = newStorageAPI(endpoints[index])
|
storageDisks[index], err = newStorageAPI(endpoints[index], healthCheck)
|
||||||
return err
|
return err
|
||||||
}, index)
|
}, index)
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,7 +38,7 @@ func TestFixFormatV3(t *testing.T) {
|
||||||
}
|
}
|
||||||
endpoints := mustGetNewEndpoints(erasureDirs...)
|
endpoints := mustGetNewEndpoints(erasureDirs...)
|
||||||
|
|
||||||
storageDisks, errs := initStorageDisksWithErrors(endpoints)
|
storageDisks, errs := initStorageDisksWithErrors(endpoints, true)
|
||||||
for _, err := range errs {
|
for _, err := range errs {
|
||||||
if err != nil && err != errDiskNotFound {
|
if err != nil && err != errDiskNotFound {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
|
@ -559,7 +559,7 @@ func benchmarkInitStorageDisksN(b *testing.B, nDisks int) {
|
||||||
b.RunParallel(func(pb *testing.PB) {
|
b.RunParallel(func(pb *testing.PB) {
|
||||||
endpoints := endpoints
|
endpoints := endpoints
|
||||||
for pb.Next() {
|
for pb.Next() {
|
||||||
initStorageDisksWithErrors(endpoints)
|
initStorageDisksWithErrors(endpoints, true)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,27 +55,15 @@ var globalObjectAPI ObjectLayer
|
||||||
// Global cacheObjects, only accessed by newCacheObjectsFn().
|
// Global cacheObjects, only accessed by newCacheObjectsFn().
|
||||||
var globalCacheObjectAPI CacheObjectLayer
|
var globalCacheObjectAPI CacheObjectLayer
|
||||||
|
|
||||||
func newStorageAPIWithoutHealthCheck(endpoint Endpoint) (storage StorageAPI, err error) {
|
|
||||||
if endpoint.IsLocal {
|
|
||||||
storage, err := newXLStorage(endpoint)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return newXLStorageDiskIDCheck(storage), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return newStorageRESTClient(endpoint, false), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Depending on the disk type network or local, initialize storage API.
|
// Depending on the disk type network or local, initialize storage API.
|
||||||
func newStorageAPI(endpoint Endpoint) (storage StorageAPI, err error) {
|
func newStorageAPI(endpoint Endpoint, healthCheck bool) (storage StorageAPI, err error) {
|
||||||
if endpoint.IsLocal {
|
if endpoint.IsLocal {
|
||||||
storage, err := newXLStorage(endpoint)
|
storage, err := newXLStorage(endpoint, healthCheck)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return newXLStorageDiskIDCheck(storage), nil
|
return newXLStorageDiskIDCheck(storage), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return newStorageRESTClient(endpoint, true), nil
|
return newStorageRESTClient(endpoint, healthCheck), nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -97,7 +97,8 @@ func bgFormatErasureCleanupTmp(diskPath string) {
|
||||||
err))
|
err))
|
||||||
}
|
}
|
||||||
|
|
||||||
go removeAll(tmpOld)
|
// Remove the entire folder in case there are leftovers that didn't get cleaned up before restart.
|
||||||
|
go removeAll(pathJoin(diskPath, minioMetaTmpBucket+"-old"))
|
||||||
// Renames and schedules for purging all bucket metacache.
|
// Renames and schedules for purging all bucket metacache.
|
||||||
go renameAllBucketMetacache(diskPath)
|
go renameAllBucketMetacache(diskPath)
|
||||||
}
|
}
|
||||||
|
@ -146,7 +147,7 @@ func isServerResolvable(endpoint Endpoint, timeout time.Duration) error {
|
||||||
// time. additionally make sure to close all the disks used in this attempt.
|
// time. additionally make sure to close all the disks used in this attempt.
|
||||||
func connectLoadInitFormats(verboseLogging bool, firstDisk bool, endpoints Endpoints, poolCount, setCount, setDriveCount int, deploymentID, distributionAlgo string) (storageDisks []StorageAPI, format *formatErasureV3, err error) {
|
func connectLoadInitFormats(verboseLogging bool, firstDisk bool, endpoints Endpoints, poolCount, setCount, setDriveCount int, deploymentID, distributionAlgo string) (storageDisks []StorageAPI, format *formatErasureV3, err error) {
|
||||||
// Initialize all storage disks
|
// Initialize all storage disks
|
||||||
storageDisks, errs := initStorageDisksWithErrors(endpoints)
|
storageDisks, errs := initStorageDisksWithErrors(endpoints, true)
|
||||||
|
|
||||||
defer func(storageDisks []StorageAPI) {
|
defer func(storageDisks []StorageAPI) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -1323,7 +1323,7 @@ func registerStorageRESTHandlers(router *mux.Router, endpointServerPools Endpoin
|
||||||
go func(poolIdx, setIdx int, endpoint Endpoint) {
|
go func(poolIdx, setIdx int, endpoint Endpoint) {
|
||||||
defer wg.Done()
|
defer wg.Done()
|
||||||
var err error
|
var err error
|
||||||
storageDisks[poolIdx][setIdx], err = newXLStorage(endpoint)
|
storageDisks[poolIdx][setIdx], err = newXLStorage(endpoint, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// if supported errors don't fail, we proceed to
|
// if supported errors don't fail, we proceed to
|
||||||
// printing message and moving forward.
|
// printing message and moving forward.
|
||||||
|
|
|
@ -206,11 +206,11 @@ func newLocalXLStorage(path string) (*xlStorage, error) {
|
||||||
return newXLStorage(Endpoint{
|
return newXLStorage(Endpoint{
|
||||||
URL: &u,
|
URL: &u,
|
||||||
IsLocal: true,
|
IsLocal: true,
|
||||||
})
|
}, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialize a new storage disk.
|
// Initialize a new storage disk.
|
||||||
func newXLStorage(ep Endpoint) (s *xlStorage, err error) {
|
func newXLStorage(ep Endpoint, cleanUp bool) (s *xlStorage, err error) {
|
||||||
path := ep.Path
|
path := ep.Path
|
||||||
if path, err = getValidPath(path); err != nil {
|
if path, err = getValidPath(path); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -247,7 +247,9 @@ func newXLStorage(ep Endpoint) (s *xlStorage, err error) {
|
||||||
diskIndex: -1,
|
diskIndex: -1,
|
||||||
}
|
}
|
||||||
|
|
||||||
bgFormatErasureCleanupTmp(s.diskPath) // cleanup any old data.
|
if cleanUp {
|
||||||
|
bgFormatErasureCleanupTmp(s.diskPath) // cleanup any old data.
|
||||||
|
}
|
||||||
|
|
||||||
formatData, formatFi, err := formatErasureMigrate(s.diskPath)
|
formatData, formatFi, err := formatErasureMigrate(s.diskPath)
|
||||||
if err != nil && !errors.Is(err, os.ErrNotExist) {
|
if err != nil && !errors.Is(err, os.ErrNotExist) {
|
||||||
|
|
Loading…
Reference in New Issue