summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorChris St. Pierre <chris.a.st.pierre@gmail.com>2012-08-15 17:04:29 -0400
committerChris St. Pierre <chris.a.st.pierre@gmail.com>2012-08-15 17:04:53 -0400
commit5e40a53cd81cc08bdc30f20ad7fb7f431b122f87 (patch)
treed5b9281003f6e9e12456b01e26db63ad38d69bf8 /src
parent58a697300d2863c5c2994b90b8a4f27a7db987fa (diff)
downloadbcfg2-5e40a53cd81cc08bdc30f20ad7fb7f431b122f87.tar.gz
bcfg2-5e40a53cd81cc08bdc30f20ad7fb7f431b122f87.tar.bz2
bcfg2-5e40a53cd81cc08bdc30f20ad7fb7f431b122f87.zip
SchemaUpdater: improved error handling
Diffstat (limited to 'src')
-rw-r--r--src/lib/Bcfg2/Server/Core.py3
-rw-r--r--src/lib/Bcfg2/Server/SchemaUpdater/__init__.py40
2 files changed, 27 insertions, 16 deletions
diff --git a/src/lib/Bcfg2/Server/Core.py b/src/lib/Bcfg2/Server/Core.py
index 49b5628a1..6eb26b919 100644
--- a/src/lib/Bcfg2/Server/Core.py
+++ b/src/lib/Bcfg2/Server/Core.py
@@ -110,7 +110,8 @@ class BaseCore(object):
update_database()
self._database_available = True
except UpdaterError:
- self.logger.error("Failed to update database schema")
+ err = sys.exc_info()[1]
+ self.logger.error("Failed to update database schema: %s" % err)
except ImportError:
# assume django is not installed
pass
diff --git a/src/lib/Bcfg2/Server/SchemaUpdater/__init__.py b/src/lib/Bcfg2/Server/SchemaUpdater/__init__.py
index d57175cd7..1ea41c880 100644
--- a/src/lib/Bcfg2/Server/SchemaUpdater/__init__.py
+++ b/src/lib/Bcfg2/Server/SchemaUpdater/__init__.py
@@ -59,12 +59,13 @@ class Updater(object):
try:
self._base_version = _release_to_version(release)
except:
- raise UpdaterError
+ err = "Invalid release string: %s" % release
+ logger.error(err)
+ raise UpdaterError(err)
self._fixes = []
self._version = -1
-
def __cmp__(self, other):
return self._base_version - other._base_version
@@ -79,7 +80,7 @@ class Updater(object):
iv = InternalDatabaseVersion.objects.latest()
self._version = iv.version
except InternalDatabaseVersion.DoesNotExist:
- raise UpdaterError
+ raise UpdaterError("No database version stored internally")
return self._version
@property
@@ -111,13 +112,16 @@ class Updater(object):
@staticmethod
def get_current_version():
- """Queries the db for the latest version. Returns 0 for a fresh install"""
+ """Queries the db for the latest version. Returns 0 for a
+ fresh install"""
if "call_command" in dir(django.core.management):
- django.core.management.call_command("syncdb", interactive=False, verbosity=0)
+ django.core.management.call_command("syncdb", interactive=False,
+ verbosity=0)
else:
- logger.warning("Unable to call syndb routine")
- raise UpdaterError
+ msg = "Unable to call syndb routine"
+ logger.warning(msg)
+ raise UpdaterError(msg)
try:
iv = InternalDatabaseVersion.objects.latest()
@@ -171,9 +175,11 @@ class Updater(object):
(self.version, fix))
logger.info("Applied schema changes for release %s" % self._release)
except:
- logger.error("Failed to perform db update %s (%s): %s" % \
- (self._version + 1, fix, traceback.format_exc().splitlines()[-1]))
- raise UpdaterError
+ msg = "Failed to perform db update %s (%s): %s" % \
+ (self._version + 1, fix,
+ traceback.format_exc().splitlines()[-1])
+ logger.error(msg)
+ raise UpdaterError(msg)
class UnsupportedUpdate(Updater):
@@ -215,17 +221,20 @@ def update_database():
except ImportError:
logger.error("Failed to import %s" % submodule)
except AttributeError:
- logger.warning("Module %s does not have an updates function" % submodule)
+ logger.warning("Module %s does not have an updates function" %
+ submodule)
except:
- logger.error("Failed to build updater for %s" % submodule, exc_info=1)
- raise UpdaterError
+ msg = "Failed to build updater for %s" % submodule
+ logger.error(msg, exc_info=1)
+ raise UpdaterError(msg)
current_version = Updater.get_current_version()
logger.debug("Database version at %s" % current_version)
if current_version > 0:
[u.apply() for u in sorted(updaters)]
- logger.debug("Database version at %s" % Updater.get_current_version())
+ logger.debug("Database version at %s" %
+ Updater.get_current_version())
else:
target = updaters[-1].target_version
InternalDatabaseVersion.objects.create(version=target)
@@ -234,7 +243,8 @@ def update_database():
except UpdaterError:
raise
except ImproperlyConfigured:
- logger.error("Django is not properly configured: %s" % traceback.format_exc().splitlines()[-1])
+ logger.error("Django is not properly configured: %s" %
+ traceback.format_exc().splitlines()[-1])
raise UpdaterError
except:
logger.error("Error while updating the database")