On 2014年03月29日 00:40, Rodrigo Trujillo wrote:
This patch changes __exit__ function of objectstore in order to log
the
error information. It also changes the return to make python raise the
exception again, which will be caught by the functions that are using
the objectstore.
Signed-off-by: Rodrigo Trujillo <rodrigo.trujillo(a)linux.vnet.ibm.com>
---
src/kimchi/objectstore.py | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/src/kimchi/objectstore.py b/src/kimchi/objectstore.py
index d960ca9..b1c1bdd 100644
--- a/src/kimchi/objectstore.py
+++ b/src/kimchi/objectstore.py
@@ -19,6 +19,7 @@
import json
import sqlite3
import threading
+import traceback
try:
@@ -29,6 +30,7 @@ except ImportError:
from kimchi import config
from kimchi.exception import NotFoundError
+from kimchi.utils import kimchi_log
class ObjectStoreSession(object):
@@ -116,3 +118,8 @@ class ObjectStore(object):
def __exit__(self, type, value, tb):
self._lock.release()
+ if type is not None and issubclass(type, sqlite3.DatabaseError):
+ # Logs the error and return False, which makes __exit__ raise
+ # exception again
+ kimchi_log.error(traceback.format_exc())
+ return False
I appreciate the idea of this patch.
Howerver, I wrote a demo and it seems if I don't explicitly return True,
it raises error as its default behavior
And as __exit__ accepted tb as its param, instead of format a traceback
for ourselves,
we need to use the passed in tb.
And I'm not sure why we just raise DBerror?