/* * MinIO Cloud Storage, (C) 2015-2020 MinIO, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package cmd import "os" // errUnexpected - unexpected error, requires manual intervention. var errUnexpected = StorageErr("Unexpected error, please report this issue at https://github.com/minio/minio/issues") // errCorruptedFormat - corrupted backend format. var errCorruptedFormat = StorageErr("corrupted backend format, please join https://slack.min.io for assistance") // errUnformattedDisk - unformatted disk found. var errUnformattedDisk = StorageErr("unformatted disk found") // errUnsupporteDisk - when disk does not support O_DIRECT flag. var errUnsupportedDisk = StorageErr("disk does not support O_DIRECT") // errDiskFull - cannot create volume or files when disk is full. var errDiskFull = StorageErr("disk path full") // errDiskNotDir - cannot use storage disk if its not a directory var errDiskNotDir = StorageErr("disk is not directory or mountpoint") // errDiskNotFound - cannot find the underlying configured disk anymore. var errDiskNotFound = StorageErr("disk not found") // errFaultyRemoteDisk - remote disk is faulty. var errFaultyRemoteDisk = StorageErr("remote disk is faulty") // errFaultyDisk - disk is faulty. var errFaultyDisk = StorageErr("disk is faulty") // errDiskAccessDenied - we don't have write permissions on disk. var errDiskAccessDenied = StorageErr("disk access denied") // errFileNotFound - cannot find the file. var errFileNotFound = StorageErr("file not found") // errFileNotFound - cannot find requested file version. var errFileVersionNotFound = StorageErr("file version not found") // errTooManyOpenFiles - too many open files. var errTooManyOpenFiles = StorageErr("too many open files") // errFileNameTooLong - given file name is too long than supported length. var errFileNameTooLong = StorageErr("file name too long") // errVolumeExists - cannot create same volume again. var errVolumeExists = StorageErr("volume already exists") // errIsNotRegular - not of regular file type. var errIsNotRegular = StorageErr("not of regular file type") // errVolumeNotFound - cannot find the volume. var errVolumeNotFound = StorageErr("volume not found") // errVolumeNotEmpty - volume not empty. var errVolumeNotEmpty = StorageErr("volume is not empty") // errVolumeAccessDenied - cannot access volume, insufficient permissions. var errVolumeAccessDenied = StorageErr("volume access denied") // errFileAccessDenied - cannot access file, insufficient permissions. var errFileAccessDenied = StorageErr("file access denied") // errFileCorrupt - file has an unexpected size, or is not readable var errFileCorrupt = StorageErr("file is corrupted") // errFileParentIsFile - cannot have overlapping objects, parent is already a file. var errFileParentIsFile = StorageErr("parent is a file") // errBitrotHashAlgoInvalid - the algo for bit-rot hash // verification is empty or invalid. var errBitrotHashAlgoInvalid = StorageErr("bit-rot hash algorithm is invalid") // errCrossDeviceLink - rename across devices not allowed. var errCrossDeviceLink = StorageErr("Rename across devices not allowed, please fix your backend configuration") // errMinDiskSize - cannot create volume or files when disk size is less than threshold. var errMinDiskSize = StorageErr("The disk size is less than 900MiB threshold") // errLessData - returned when less data available than what was requested. var errLessData = StorageErr("less data available than what was requested") // errMoreData = returned when more data was sent by the caller than what it was supposed to. var errMoreData = StorageErr("more data was sent than what was advertised") // StorageErr represents error generated by xlStorage call. type StorageErr string func (h StorageErr) Error() string { return string(h) } // Collection of basic errors. var baseErrs = []error{ errDiskNotFound, errFaultyDisk, errFaultyRemoteDisk, } var baseIgnoredErrs = baseErrs // Is a one place function which converts all os.PathError // into a more FS object layer friendly form, converts // known errors into their typed form for top level // interpretation. func osErrToFileErr(err error) error { if err == nil { return nil } if os.IsNotExist(err) { return errFileNotFound } if os.IsPermission(err) { return errFileAccessDenied } if isSysErrNotDir(err) { return errFileNotFound } if isSysErrPathNotFound(err) { return errFileNotFound } if isSysErrTooManyFiles(err) { return errTooManyOpenFiles } if isSysErrHandleInvalid(err) { return errFileNotFound } return err }