mirror of
https://github.com/minio/minio.git
synced 2024-12-24 22:25:54 -05:00
fix error checks when cache is offline/missing. (#5850)
This commit is contained in:
parent
9aace6d36d
commit
0dc3d7ac18
@ -289,13 +289,21 @@ func listDirCacheFactory(isLeaf isLeafFunc, treeWalkIgnoredErrs []error, disks [
|
||||
listCacheDirs := func(bucket, prefixDir, prefixEntry string) (dirs []string, err error) {
|
||||
var entries []string
|
||||
for _, disk := range disks {
|
||||
// ignore disk-caches that might be missing/offline
|
||||
if disk == nil {
|
||||
continue
|
||||
}
|
||||
fs := disk.FSObjects
|
||||
entries, err = readDir(pathJoin(fs.fsPath, bucket, prefixDir))
|
||||
if err != nil {
|
||||
|
||||
// For any reason disk was deleted or goes offline, continue
|
||||
// and list from other disks if possible.
|
||||
if err != nil {
|
||||
if IsErrIgnored(err, treeWalkIgnoredErrs...) {
|
||||
continue
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Filter entries that have the prefix prefixEntry.
|
||||
entries = filterMatchingPrefix(entries, prefixEntry)
|
||||
@ -377,16 +385,16 @@ func (c cacheObjects) listCacheObjects(ctx context.Context, bucket, prefix, mark
|
||||
var err error
|
||||
fs, err := c.cache.getCacheFS(ctx, bucket, entry)
|
||||
if err != nil {
|
||||
// Ignore errFileNotFound
|
||||
if err == errFileNotFound {
|
||||
// Ignore errDiskNotFound
|
||||
if err == errDiskNotFound {
|
||||
continue
|
||||
}
|
||||
return result, toObjectErr(err, bucket, prefix)
|
||||
}
|
||||
objInfo, err = fs.getObjectInfo(ctx, bucket, entry)
|
||||
if err != nil {
|
||||
// Ignore errFileNotFound
|
||||
if err == errFileNotFound {
|
||||
// Ignore ObjectNotFound error
|
||||
if _, ok := err.(ObjectNotFound); ok {
|
||||
continue
|
||||
}
|
||||
return result, toObjectErr(err, bucket, prefix)
|
||||
@ -469,6 +477,10 @@ func (c cacheObjects) ListObjectsV2(ctx context.Context, bucket, prefix, continu
|
||||
func (c cacheObjects) listBuckets(ctx context.Context) (buckets []BucketInfo, err error) {
|
||||
m := make(map[string]string)
|
||||
for _, cache := range c.cache.cfs {
|
||||
// ignore disk-caches that might be missing/offline
|
||||
if cache == nil {
|
||||
continue
|
||||
}
|
||||
entries, err := cache.ListBuckets(ctx)
|
||||
|
||||
if err != nil {
|
||||
@ -507,6 +519,10 @@ func (c cacheObjects) GetBucketInfo(ctx context.Context, bucket string) (bucketI
|
||||
bucketInfo, err = getBucketInfoFn(ctx, bucket)
|
||||
if backendDownError(err) {
|
||||
for _, cache := range c.cache.cfs {
|
||||
// ignore disk-caches that might be missing/offline
|
||||
if cache == nil {
|
||||
continue
|
||||
}
|
||||
if bucketInfo, err = cache.GetBucketInfo(ctx, bucket); err == nil {
|
||||
return
|
||||
}
|
||||
@ -772,6 +788,10 @@ func (c cacheObjects) DeleteBucket(ctx context.Context, bucket string) (err erro
|
||||
deleteBucketFn := c.DeleteBucketFn
|
||||
var toDel []*cacheFSObjects
|
||||
for _, cfs := range c.cache.cfs {
|
||||
// ignore disk-caches that might be missing/offline
|
||||
if cfs == nil {
|
||||
continue
|
||||
}
|
||||
if _, cerr := cfs.GetBucketInfo(ctx, bucket); cerr == nil {
|
||||
toDel = append(toDel, cfs)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user