X-Git-Url: https://code.grnet.gr/git/ganeti-local/blobdiff_plain/0623d351313854d09cc58ff8657e95d206dc958d..88cd08aaaba8ad68c59228551c75424fb86c1904:/lib/errors.py?ds=sidebyside diff --git a/lib/errors.py b/lib/errors.py index 04dc31b..9fd9868 100644 --- a/lib/errors.py +++ b/lib/errors.py @@ -98,18 +98,15 @@ class RemoteError(GenericError): pass -class InvalidOS(GenericError): - """Missing OS on node. +class SignatureError(GenericError): + """Error authenticating a remote message. - This is raised when an OS exists on the master (or is otherwise - requested to the code) but not on the target node. - - This exception has three arguments: - - the name of the os - - the source directory, if any - - the reason why we consider this an invalid OS (text of error message) + This is raised when the hmac signature on a message doesn't verify correctly + to the message itself. It can happen because of network unreliability or + because of spurious traffic. """ + pass class ParameterError(GenericError): @@ -198,11 +195,13 @@ class UnitParseError(GenericError): """ + class TypeEnforcementError(GenericError): """Unable to enforce data type. """ + class SshKeyError(GenericError): """Invalid SSH key. @@ -223,6 +222,18 @@ class CommandError(GenericError): """ +class StorageError(GenericError): + """Storage-related exception. + + """ + + +class InotifyError(GenericError): + """Error raised when there is a failure setting up an inotify watcher. + + """ + + class QuitGanetiException(Exception): """Signal that Ganeti that it must quit. @@ -268,6 +279,46 @@ class JobQueueFull(JobQueueError): """ +class ConfdFatalError(GenericError): + """A fatal failure in Ganeti confd. + + Events that compromise the ability of confd to proceed further. + (for example: inability to load the config file) + + """ + + +class ConfdRequestError(GenericError): + """A request error in Ganeti confd. + + Events that should make confd abort the current request and proceed serving + different ones. + + """ + + +class ConfdMagicError(GenericError): + """A magic fourcc error in Ganeti confd. + + Errors processing the fourcc in ganeti confd datagrams. + + """ + + +class ConfdClientError(GenericError): + """A magic fourcc error in Ganeti confd. + + Errors in the confd client library. + + """ + + +class UdpDataSizeError(GenericError): + """UDP payload too big. + + """ + + # errors should be added above @@ -288,3 +339,35 @@ def GetErrorClass(name): issubclass(item, GenericError)): item = None return item + + +def EncodeException(err): + """Encodes an exception into a format that L{MaybeRaise} will recognise. + + The passed L{err} argument will be formatted as a tuple (exception + name, arguments) that the MaybeRaise function will recognise. + + @type err: GenericError child + @param err: usually a child of GenericError (but any exception + will be accepted) + @rtype: tuple + @return: tuple of (exception name, exception arguments) + + """ + return (err.__class__.__name__, err.args) + + +def MaybeRaise(result): + """Is this looks like an encoded Ganeti exception, raise it. + + This function tries to parse the passed argument and if it looks + like an encoding done by EncodeException, it will re-raise it. + + """ + tlt = (tuple, list) + if (isinstance(result, tlt) and len(result) == 2 and + isinstance(result[1], tlt)): + # custom ganeti errors + err_class = GetErrorClass(result[0]) + if err_class is not None: + raise err_class, tuple(result[1])