|
- # Copyright 2019 Huawei Technologies Co., Ltd
- #
- # 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.
- # ==============================================================================
- """
- Define custom exception
-
- Error rule:
- EXCEPTIONS key: The error code key should be as same as the realized class name.
- exception No: common module error No is 1-99,
- unknown error No is 0,
- shard* api error No is 100-199
- file* api error No is 200-299
- error message: It is the base error message.
- You can recover error message in realized class __init__ function.
- """
- from .enums import LogRuntime, ErrorCodeType, ErrorLevel
- from .constant import SYS_ID
- EXCEPTIONS = dict(
- # the format of list is [exception No, base error message]
- UnknownError=[0, 'Unknown Error.'],
- ParamTypeError=[1, 'Param type is error.'],
- ParamValueError=[2, 'Param value is error.'],
- ParamMissError=[3, 'Param missing.'],
- PathNotExistsError=[4, 'Path does not exist.'],
- DbConnectionError=[5, 'Db connection is error.'],
-
- # MindRecord error 100-199 for shard*
- MRMOpenError=[100, 'MindRecord could not open.'],
- MRMOpenForAppendError=[101, 'MindRecord could not open for append.'],
- MRMInvalidPageSizeError=[102, 'Failed to set page size.'],
- MRMInvalidHeaderSizeError=[103, 'Failed to set header size.'],
- MRMSetHeaderError=[104, 'Failed to set header.'],
- MRMWriteDatasetError=[105, 'Failed to write dataset.'],
- MRMCommitError=[107, 'Failed to commit.'],
-
- MRMLaunchError=[108, 'Failed to launch.'],
- MRMFinishError=[109, 'Failed to finish.'],
- MRMCloseError=[110, 'Failed to close.'],
-
- MRMAddSchemaError=[111, 'Failed to add schema.'],
- MRMAddIndexError=[112, 'Failed to add index field.'],
- MRMBuildSchemaError=[113, 'Failed to build schema.'],
- MRMGetMetaError=[114, 'Failed to get meta info.'],
-
- MRMIndexGeneratorError=[115, 'Failed to create index generator.'],
- MRMGenerateIndexError=[116, 'Failed to generate index.'],
-
- MRMInitSegmentError=[117, 'Failed to initialize segment.'],
- MRMFetchCandidateFieldsError=[118, 'Failed to fetch candidate category fields.'],
- MRMReadCategoryInfoError=[119, 'Failed to read category information.'],
- MRMFetchDataError=[120, 'Failed to fetch data by category.'],
-
-
- # MindRecord error 200-299 for File* and MindPage
- MRMInvalidSchemaError=[200, 'Schema is error.'],
- MRMValidateDataError=[201, 'Raw data is valid.'],
- MRMDefineIndexError=[202, 'Index field is error.'],
- MRMDefineBlobError=[203, 'Blob field is error.'],
- MRMUnsupportedSchemaError=[204, 'Schema is not supported.'],
- MRMDefineCategoryError=[205, 'Category field is error.'],
-
- )
-
- class MindRecordException(Exception):
- """MindRecord base error class."""
-
- def __init__(self):
- """Initialize an error which may occurs in mindrecord."""
- super(MindRecordException, self).__init__()
- class_name = self.__class__.__name__
- error_item = EXCEPTIONS[class_name] if class_name in EXCEPTIONS \
- else EXCEPTIONS['UnknownError']
- self._error_msg = error_item[1]
- self._error_code = MindRecordException.transform_error_code(error_item[0])
-
- @property
- def error_msg(self):
- """return the description of this error."""
- return self._error_msg
-
- @error_msg.setter
- def error_msg(self, msg):
- self._error_msg = msg
-
- @property
- def error_code(self):
- """return the unique error number of this error."""
- return self._error_code
-
- def __str__(self):
- return "[{}]: error_code: {}, error_msg: {}".format(
- self.__class__.__name__, self._error_code, self._error_msg)
-
- @staticmethod
- def transform_error_code(exception_no):
- """
- Transform mindrecord exception no to GE error code.
-
- error_code = ((0xFF & runtime) << 30) \
- | ((0xFF & error_code_type) << 28) \
- | ((0xFF & error_level) << 25) \
- | ((0xFF & sys_id) << 17) \
- | ((0xFF & mod_id) << 12) \
- | (0x0FFF & exception_no)
- Args:
- exception_no: Integer. Exception number.
-
- Returns:
- Integer, error code.
-
- """
- runtime = LogRuntime.RT_HOST
- error_code_type = ErrorCodeType.ERROR_CODE
- error_level = ErrorLevel.COMMON_LEVEL
- exception_no_range_per_module = 100
- mod_id = int(exception_no / exception_no_range_per_module) + 1
- error_code = (((0xFF & runtime) << 30)
- | ((0xFF & error_code_type) << 28)
- | ((0xFF & error_level) << 25)
- | ((0xFF & SYS_ID) << 17)
- | ((0xFF & mod_id) << 12)
- | (0x0FFF & exception_no))
- return error_code
-
-
- class UnknownError(MindRecordException):
- """Raise an unknown error when an unknown error occurs."""
-
-
- class ParamValueError(MindRecordException):
- """
- Request param value error.
- """
-
- def __init__(self, error_detail):
- super(ParamValueError, self).__init__()
- self.error_msg = 'Invalid parameter value. {}'.format(error_detail)
-
-
- class ParamTypeError(MindRecordException):
- """
- Request param type error.
- """
-
- def __init__(self, param_name, expected_type):
- super(ParamTypeError, self).__init__()
- self.error_msg = "Invalid parameter type. '{}' expect {} type." \
- "".format(param_name, expected_type)
-
-
- class ParamMissError(MindRecordException):
- """
- missing param error.
- """
-
- def __init__(self, param_name):
- super(ParamMissError, self).__init__()
- self.error_msg = "Param missing. '{}' is required.".format(param_name)
-
- class PathNotExistsError(MindRecordException):
- """
- invalid path.
- """
- def __init__(self, error_path):
- super(PathNotExistsError, self).__init__()
- self.error_msg = 'Invalid path. {}'.format(error_path)
-
- class DbConnectionError(MindRecordException):
- """
- Database connection error.
- """
- def __init__(self, error_detail):
- super(DbConnectionError, self).__init__()
- self.error_msg = 'Db connection is error. Detail: {}'.format(error_detail)
- ##
- class MRMOpenError(MindRecordException):
- """
- Raised when could not open mind record file successfully.
- """
- def __init__(self):
- super(MRMOpenError, self).__init__()
- self.error_msg = 'MindRecord File could not open successfully.'
-
- class MRMOpenForAppendError(MindRecordException):
- """
- Raised when could not open mind record file successfully for append.
- """
- def __init__(self):
- super(MRMOpenForAppendError, self).__init__()
- self.error_msg = 'MindRecord File could not open successfully for append.'
-
- class MRMInvalidPageSizeError(MindRecordException):
- pass
-
- class MRMInvalidHeaderSizeError(MindRecordException):
- pass
-
- class MRMSetHeaderError(MindRecordException):
- pass
-
- class MRMWriteDatasetError(MindRecordException):
- pass
-
- class MRMCommitError(MindRecordException):
- pass
-
- class MRMLaunchError(MindRecordException):
- pass
-
- class MRMFinishError(MindRecordException):
- pass
-
- class MRMCloseError(MindRecordException):
- pass
-
- class MRMAddSchemaError(MindRecordException):
- pass
-
- class MRMAddIndexError(MindRecordException):
- pass
-
- class MRMBuildSchemaError(MindRecordException):
- pass
-
- class MRMGetMetaError(MindRecordException):
- pass
-
- class MRMIndexGeneratorError(MindRecordException):
- pass
-
- class MRMGenerateIndexError(MindRecordException):
- pass
-
- class MRMInitSegmentError(MindRecordException):
- pass
-
- class MRMFetchCandidateFieldsError(MindRecordException):
- pass
-
- class MRMReadCategoryInfoError(MindRecordException):
- pass
-
- class MRMFetchDataError(MindRecordException):
- pass
-
- class MRMInvalidSchemaError(MindRecordException):
- def __init__(self, error_detail):
- super(MRMInvalidSchemaError, self).__init__()
- self.error_msg = 'Schema format is error. Detail: {}'.format(error_detail)
-
- class MRMValidateDataError(MindRecordException):
- def __init__(self, error_detail):
- super(MRMValidateDataError, self).__init__()
- self.error_msg = 'Raw data do not match the schema. Detail: {}'.format(error_detail)
-
- class MRMDefineIndexError(MindRecordException):
- def __init__(self, error_detail):
- super(MRMDefineIndexError, self).__init__()
- self.error_msg = 'Failed to define index field. Detail: {}'.format(error_detail)
-
- class MRMDefineBlobError(MindRecordException):
- def __init__(self, error_detail):
- super(MRMDefineBlobError, self).__init__()
- self.error_msg = 'Failed to define blob field. Detail: {}'.format(error_detail)
-
- class MRMUnsupportedSchemaError(MindRecordException):
- def __init__(self, error_detail):
- super(MRMUnsupportedSchemaError, self).__init__()
- self.error_msg = 'Schema is not supported. Detail: {}'.format(error_detail)
-
- class MRMDefineCategoryError(MindRecordException):
- def __init__(self, error_detail):
- super(MRMDefineCategoryError, self).__init__()
- self.error_msg = 'Failed to define category field. Detail: {}'.format(error_detail)
|