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 # 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: if response._custom_rollback:
response._custom_rollback() response._custom_rollback()
else: else:
BaseAdapter.close_all_instances('rollback') 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_response = \
HTTP(500, rwthread.routes.error_message_ticket % 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) self._store_on_disk(request, ticket_id, ticket_data)
def _store_in_db(self, 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) self.db._adapter.reconnect()
table._db.rollback() try:
table.insert(ticket_id=ticket_id, table = self._get_table(self.db, self.tablename, request.application)
ticket_data=cPickle.dumps(ticket_data), id = table.insert(ticket_id=ticket_id,
created_datetime=request.now) ticket_data=cPickle.dumps(ticket_data),
table._db.commit() created_datetime=request.now)
logger.error('In FILE: %(layer)s\n\n%(traceback)s\n' % ticket_data) 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): def _store_on_disk(self, request, ticket_id, ticket_data):
ef = self._error_file(request, ticket_id, 'wb') ef = self._error_file(request, ticket_id, 'wb')
@@ -73,16 +79,13 @@ class TicketStorage(Storage):
def _get_table(self, db, tablename, app): def _get_table(self, db, tablename, app):
tablename = tablename + '_' + app tablename = tablename + '_' + app
table = db.get(tablename, None) table = db.get(tablename)
if table is None: if not table:
db.rollback() # not necessary but one day
# any app may store tickets on DB
table = db.define_table( table = db.define_table(
tablename, tablename,
db.Field('ticket_id', length=100), db.Field('ticket_id', length=100),
db.Field('ticket_data', 'text'), db.Field('ticket_data', 'text'),
db.Field('created_datetime', 'datetime'), db.Field('created_datetime', 'datetime'))
)
return table return table
def load( def load(