summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris St. Pierre <chris.a.st.pierre@gmail.com>2014-02-28 11:25:40 -0500
committerChris St. Pierre <chris.a.st.pierre@gmail.com>2014-02-28 11:54:53 -0500
commite7d8c70958e80924408c0e31fa06f1ad06607f99 (patch)
treeee20a10e024ff7859de88de6cd5d63f5c4eb2171
parenta3635ff0a73b8aec6ec66eb964e9ae29151e4e78 (diff)
downloadbcfg2-e7d8c70958e80924408c0e31fa06f1ad06607f99.tar.gz
bcfg2-e7d8c70958e80924408c0e31fa06f1ad06607f99.tar.bz2
bcfg2-e7d8c70958e80924408c0e31fa06f1ad06607f99.zip
Reporting: properly close db connection
Close the db connection at the end of each DjangoORM import, not when the reporting collector shuts down. The collector may not have even opened a connection, in the case of a storage backend other than DjangoORM. Fixes #157
-rw-r--r--src/lib/Bcfg2/Reporting/Collector.py3
-rw-r--r--src/lib/Bcfg2/Reporting/Storage/DjangoORM.py7
2 files changed, 6 insertions, 4 deletions
diff --git a/src/lib/Bcfg2/Reporting/Collector.py b/src/lib/Bcfg2/Reporting/Collector.py
index 0493c907b..2859eca28 100644
--- a/src/lib/Bcfg2/Reporting/Collector.py
+++ b/src/lib/Bcfg2/Reporting/Collector.py
@@ -162,9 +162,6 @@ class ReportingCollector(object):
pass
if self.storage:
self.storage.shutdown()
- from django import db
- self.logger.info("%s: Closing database connection" % self.name)
- db.close_connection()
def reap_children(self):
"""Join any non-live threads"""
diff --git a/src/lib/Bcfg2/Reporting/Storage/DjangoORM.py b/src/lib/Bcfg2/Reporting/Storage/DjangoORM.py
index ef1e92103..e2e565b1d 100644
--- a/src/lib/Bcfg2/Reporting/Storage/DjangoORM.py
+++ b/src/lib/Bcfg2/Reporting/Storage/DjangoORM.py
@@ -18,6 +18,7 @@ from django.core import management
from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned
from django.db.models import FieldDoesNotExist
from django.core.cache import cache
+from django import db
#Used by GetCurrentEntry
import difflib
@@ -370,6 +371,11 @@ class DjangoORM(StorageBase):
except:
self.logger.error("Failed to import interaction: %s" %
traceback.format_exc().splitlines()[-1])
+ finally:
+ self.logger.info("%s: Closing database connection" %
+ self.__class__.__name__)
+ db.close_connection()
+
def validate(self):
"""Validate backend storage. Should be called once when loaded"""
@@ -451,4 +457,3 @@ class DjangoORM(StorageBase):
else:
ret.append(None)
return ret
-