fixed logic for tickets in db?

This commit is contained in:
mdipierro
2013-08-09 15:57:27 -05:00
parent b618811d2a
commit 5b94e8f4aa
3 changed files with 24 additions and 15 deletions
+1 -1
View File
@@ -1 +1 @@
Version 2.6.0-development+timestamp.2013.08.09.15.15.41
Version 2.6.0-development+timestamp.2013.08.09.15.56.36
+7 -1
View File
@@ -514,11 +514,17 @@ def wsgibase(environ, responder):
# on application error, rollback database
# ##################################################
ticket = e.log(request) or 'unknown'
# log tickets before rollback if not in DB
if not request.tickets_db:
ticket = e.log(request) or 'unknown'
# rollback
if response._custom_rollback:
response._custom_rollback()
else:
BaseAdapter.close_all_instances('rollback')
# if tickets in db, reconnect and store it in db
if request.tickets_db:
ticket = e.log(request) or 'unknown'
http_response = \
HTTP(500, rwthread.routes.error_message_ticket %
+16 -13
View File
@@ -48,13 +48,19 @@ class TicketStorage(Storage):
self._store_on_disk(request, ticket_id, ticket_data)
def _store_in_db(self, request, ticket_id, ticket_data):
table = self._get_table(self.db, self.tablename, request.application)
table._db.rollback()
table.insert(ticket_id=ticket_id,
ticket_data=cPickle.dumps(ticket_data),
created_datetime=request.now)
table._db.commit()
logger.error('In FILE: %(layer)s\n\n%(traceback)s\n' % ticket_data)
self.db._adapter.reconnect()
try:
table = self._get_table(self.db, self.tablename, request.application)
id = table.insert(ticket_id=ticket_id,
ticket_data=cPickle.dumps(ticket_data),
created_datetime=request.now)
self.db.commit()
message = 'In FILE: %(layer)s\n\n%(traceback)s\n'
except Exception, e:
self.db.rollback()
message =' Unable to store in FILE: %(layer)s\n\n%(traceback)s\n'
self.db.close()
logger.error(message % ticket_data)
def _store_on_disk(self, request, ticket_id, ticket_data):
ef = self._error_file(request, ticket_id, 'wb')
@@ -73,16 +79,13 @@ class TicketStorage(Storage):
def _get_table(self, db, tablename, app):
tablename = tablename + '_' + app
table = db.get(tablename, None)
if table is None:
db.rollback() # not necessary but one day
# any app may store tickets on DB
table = db.get(tablename)
if not table:
table = db.define_table(
tablename,
db.Field('ticket_id', length=100),
db.Field('ticket_data', 'text'),
db.Field('created_datetime', 'datetime'),
)
db.Field('created_datetime', 'datetime'))
return table
def load(