perfkitbenchmarker/errors.py (131 lines of code) (raw):

# Copyright 2014 PerfKitBenchmarker Authors. All rights reserved. # # 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. """A common location for all perfkitbenchmarker-defined exceptions.""" import pprint class Error(Exception): pass class Setup: """Errors raised in setting up PKB.""" class PythonPackageRequirementUnfulfilled(Error): """Error raised when a Python package requirement is unfulfilled.""" pass class MissingExecutableError(Error): """Error raised when we cannot find an executable we need.""" pass class NoRunURIError(Error): """Error raised when we were not given a run_uri and cannot infer it.""" pass class BadRunURIError(Error): """Error raised when the given run_uri is invalid.""" pass class BadPreprovisionedDataError(Error): """Error raised when the pre-provisioned data is invalid.""" pass class InvalidSetupError(Error): """Error raised when SetUpPKB was not called correctly.""" pass class InvalidFlagConfigurationError(Error): """Error raised when the set of command line flags is invalid.""" pass class InvalidConfigurationError(Error): """Error raised when configuration is invalid.""" pass class VirtualMachine: """Errors raised by virtual_machine.py.""" class RemoteCommandError(Error): """Error raised when a Remote Command or Remote Copy fails.""" pass class RemoteExceptionError(Error): pass class AuthError(Error): """Error raised when one VM cannot access another VM.""" pass class VirtualMachineError(Error): """An error raised when VM is having an issue.""" @classmethod def FromDebugInfo(cls, info, error_message): """Create VirtualMachineError class from debug information. Args: info: A dictionary containing debug information (such as traceroute info). error_message: the error message from the originating code. Returns: a cls exception class Raises: TypeError: if info is not an instance of dictionary. """ if isinstance(info, dict): info = VirtualMachine.VirtualMachineError.FormatDebugInfo( info, error_message ) return cls(info) raise TypeError( 'The argument of FromDebugInfo should be an instance of dictionary.' ) @staticmethod def FormatDebugInfo(info, error_message): """A function to return a string in human readable format. Args: info: A dictionary containing debug information (such as traceroute info). error_message: the error message from the originating code. Returns: A human readable string of debug information. """ sep = '\n%s\n' % ('-' * 65) def AddHeader(error, header, message): error += '{sep}{header}\n{message}\n'.format( sep=sep, header=header, message=message ) return error def AddKeyIfExists(result, header, key): if key in info: result = AddHeader(result, header, info[key]) del info[key] return result result = ( AddHeader('', 'error_message:', error_message) if error_message else '' ) result = AddKeyIfExists(result, 'traceroute:', 'traceroute') return AddHeader(result, 'Debug Info:', pprint.pformat(info)) class VmStateError(VirtualMachineError): pass class VmUtil: """Errors raised by vm_util.py.""" class RestConnectionError(Error): pass class IpParsingError(Error): pass class UserSetupError(Error): pass class ThreadException(Error): pass class CalledProcessException(Error): pass class IssueCommandError(Error): pass class IssueCommandTimeoutError(Error): pass class Benchmarks: """Errors raised by individual benchmark.""" class BucketCreationError(Error): pass class PrepareException(Error): pass class MissingObjectCredentialException(Error): pass class RunError(Error): pass class InsufficientCapacityCloudFailure(Error): pass class QuotaFailure(Error): """Errors that are related to insufficient quota on cloud provider.""" class RateLimitExceededError(Error): pass class KnownIntermittentError(Error): """Known intermittent failures of the benchmark. These are non-retryable, known failure modes of the benchmark. It is recommended that the benchmark be completely re-run. """ class UnsupportedConfigError(Error): """Errors due to an unsupported configuration running. This is a retryable error when --zone=any. """ pass class Resource: """Errors related to resource creation and deletion.""" class CreationError(Error): """An error on creation which is not retryable.""" pass class CreationInternalError(Error): """An error on creation internal to the resource (cloud). These errors should not be retried, but instead cleanly retry creating the resource (probably by rerunning the benchmark). """ pass class CleanupError(Error): pass class RetryableCreationError(Error): pass class RetryableDeletionError(Error): pass class GetError(Error): """An error on get which is not retryable.""" pass class RetryableGetError(Error): pass class UpdateError(Error): """An error on update.""" pass class SubclassNotFoundError(Error): pass class RestoreError(Error): """Errors while restoring a resource.""" pass class FreezeError(Error): """Errors while freezing a resource.""" pass class ProvisionTimeoutError(Error): """Timeout errors while provisioning a resource.""" pass class Config: """Errors related to configs.""" class InvalidValue(Error): """User provided an invalid value for a config option.""" pass class MissingOption(Error): """User did not provide a value for a required config option.""" pass class ParseError(Error): """Error raised when a config can't be loaded properly.""" pass class UnrecognizedOption(Error): """User provided a value for an unrecognized config option.""" pass class Juju: """Errors related to the Juju OS_TYPE.""" class TimeoutException(Error): pass class UnitErrorException(Error): pass