X-Git-Url: https://code.grnet.gr/git/ganeti-local/blobdiff_plain/5c983ee5a070cb474075a65277822c9b2770c9bb..cbfa4f0f4df293b3f774d4dd7d2160c130f45fb4:/lib/errors.py diff --git a/lib/errors.py b/lib/errors.py index 81fa565..364601f 100644 --- a/lib/errors.py +++ b/lib/errors.py @@ -1,7 +1,7 @@ # # -# Copyright (C) 2006, 2007 Google Inc. +# Copyright (C) 2006, 2007, 2008, 2009, 2010 Google Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -24,6 +24,8 @@ # OpPrereqError failure types +# resolver errors +ECODE_RESOLVER = "resolver_error" # not enough resources (iallocator failure, disk space, memory, etc.) ECODE_NORES = "insufficient_resources" # wrong arguments (at syntax level) @@ -41,6 +43,19 @@ ECODE_FAULT = "internal_error" # environment error (e.g. node disk error) ECODE_ENVIRON = "environment_error" +#: List of all failure types +ECODE_ALL = frozenset([ + ECODE_RESOLVER, + ECODE_NORES, + ECODE_INVAL, + ECODE_STATE, + ECODE_NOENT, + ECODE_EXISTS, + ECODE_NOTUNIQUE, + ECODE_FAULT, + ECODE_ENVIRON, + ]) + class GenericError(Exception): """Base exception for Ganeti. @@ -108,6 +123,22 @@ class ConfigurationError(GenericError): pass +class ConfigVersionMismatch(ConfigurationError): + """Version mismatch in the configuration file. + + The error has two arguments: the expected and the actual found + version. + + """ + pass + + +class ReservationError(GenericError): + """Errors reserving a resource. + + """ + + class RemoteError(GenericError): """Programming-related error on remote call. @@ -176,6 +207,12 @@ class JobLost(GenericError): """ +class JobFileCorrupted(GenericError): + """Job file could not be properly decoded/restored. + + """ + + class ResolverError(GenericError): """Host name cannot be resolved. @@ -214,6 +251,14 @@ class UnitParseError(GenericError): """ +class ParseError(GenericError): + """Generic parse error. + + Raised when unable to parse user input. + + """ + + class TypeEnforcementError(GenericError): """Unable to enforce data type. @@ -253,7 +298,7 @@ class InotifyError(GenericError): class QuitGanetiException(Exception): - """Signal that Ganeti that it must quit. + """Signal Ganeti that it must quit. This is not necessarily an error (and thus not a subclass of GenericError), but it's an exceptional circumstance and it is thus @@ -297,15 +342,6 @@ 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. @@ -337,6 +373,24 @@ class UdpDataSizeError(GenericError): """ +class NoCtypesError(GenericError): + """python ctypes module is not found in the system. + + """ + + +class IPAddressError(GenericError): + """Generic IP address error. + + """ + + +class LuxiError(GenericError): + """LUXI error. + + """ + + # errors should be added above @@ -375,17 +429,33 @@ def EncodeException(err): return (err.__class__.__name__, err.args) -def MaybeRaise(result): - """Is this looks like an encoded Ganeti exception, raise it. +def GetEncodedError(result): + """If this looks like an encoded Ganeti exception, return it. This function tries to parse the passed argument and if it looks - like an encoding done by EncodeException, it will re-raise it. + like an encoding done by EncodeException, it will return the class + object and arguments. """ 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]) + errcls = GetErrorClass(result[0]) + if errcls: + return (errcls, tuple(result[1])) + + return None + + +def MaybeRaise(result): + """If 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. + + """ + error = GetEncodedError(result) + if error: + (errcls, args) = error + raise errcls, args