Hi Tom,

I do not know if this issue is known already.

I got a deadlock in cmon.py, see code and traceback below:

snippet from cmon.py:
===========================================
def new_archive_record(self, event):
"""save data to database then prune old records as needed"""
now = int(time.time() + 0.5)
delta = now - event.record['dateTime']
if delta > event.record['interval'] * 60:
logdbg("Skipping record: time difference %s too big" % delta)
return
if self.last_ts is not None:
data = self.get_data(now, self.last_ts)
self.save_data(self.get_data(now, self.last_ts)) ### line 728
self.last_ts = now
if self.max_age is not None:
self.prune_data(now - self.max_age)

def save_data(self, record):
"""save data to database"""
self.dbm.addRecord(record) ### line 735
===========================================

Mar 25 10:25:18 pi36 tfrc[4503]: engine: Shutting down StdReport thread
Mar 25 10:25:38 pi36 tfrc[4503]: engine: Unable to shut down StdReport 
thread
Mar 25 10:25:38 pi36 tfrc[4503]: tfrc: MainThread: shutdown process 
/home/pi/tfrec/tfrec -D -T 1
Mar 25 10:25:38 pi36 tfrc[4503]: tfrc: MainThread: tfrec with pid 4525 
killed
Mar 25 10:25:38 pi36 tfrc[4503]: engine: Caught unrecoverable exception in 
engine:
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  (1213, 'Deadlock found when 
trying to get lock; try restarting transaction')
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  : Traceback (most recent call 
last):
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :   File 
"/home/weewx/bin/weewx/engine.py", line 196, in run
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :    
 self.dispatchEvent(weewx.Event(weewx.CHECK_LOOP, packet=packet))
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :   File 
"/home/weewx/bin/weewx/engine.py", line 225, in dispatchEvent
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :     callback(event)
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :   File 
"/home/weewx/bin/weewx/engine.py", line 565, in check_loop
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :     raise BreakLoop
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  : weewx.engine.BreakLoop
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  : During handling of the above 
exception, another exception occurred:
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  : Traceback (most recent call 
last):
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :   File 
"/home/weewx/bin/weewx/engine.py", line 581, in post_loop
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :    
 self._catchup(self.engine.console.genArchiveRecords)
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :   File 
"/home/weewx/bin/weewx/engine.py", line 633, in _catchup
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :     for record in 
generator(lastgood_ts):
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :   File 
"/home/weewx/bin/weewx/drivers/__init__.py", line 30, in genArchiveRecords
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :     raise 
NotImplementedError("Method 'genArchiveRecords' not implemented")
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  : NotImplementedError: Method 
'genArchiveRecords' not implemented
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  : During handling of the above 
exception, another exception occurred:
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  : Traceback (most recent call 
last):
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :   File 
"/home/weewx/bin/weedb/mysql.py", line 51, in guarded_fn
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :     return fn(*args, **kwargs)
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :   File 
"/home/weewx/bin/weedb/mysql.py", line 261, in execute
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :    
 self.cursor.execute(mysql_string, tuple(sql_tuple))
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :   File 
"/usr/lib/python3/dist-packages/MySQLdb/cursors.py", line 226, in execute
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :     self.errorhandler(self, 
exc, value)
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :   File 
"/usr/lib/python3/dist-packages/MySQLdb/connections.py", line 36, in 
defaulterrorhandler
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :     raise errorvalue
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :   File 
"/usr/lib/python3/dist-packages/MySQLdb/cursors.py", line 217, in execute
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :     res = self._query(query)
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :   File 
"/usr/lib/python3/dist-packages/MySQLdb/cursors.py", line 378, in _query
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :     rowcount = 
self._do_query(q)
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :   File 
"/usr/lib/python3/dist-packages/MySQLdb/cursors.py", line 341, in _do_query
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :     db.query(q)
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :   File 
"/usr/lib/python3/dist-packages/MySQLdb/connections.py", line 280, in query
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :    
 _mysql.connection.query(self, query)
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  : 
_mysql_exceptions.OperationalError: (1213, 'Deadlock found when trying to 
get lock; try restarting transaction')
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  : During handling of the above 
exception, another exception occurred:
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  : Traceback (most recent call 
last):
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :   File 
"/home/weewx/bin/weewx/engine.py", line 893, in main
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :     engine.run()
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :   File 
"/home/weewx/bin/weewx/engine.py", line 203, in run
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :    
 self.dispatchEvent(weewx.Event(weewx.POST_LOOP))
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :   File 
"/home/weewx/bin/weewx/engine.py", line 225, in dispatchEvent
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :     callback(event)
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :   File 
"/home/weewx/bin/weewx/engine.py", line 583, in post_loop
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :     self._software_catchup()
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :   File 
"/home/weewx/bin/weewx/engine.py", line 647, in _software_catchup
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :    
 self.engine.dispatchEvent(weewx.Event(weewx.NEW_ARCHIVE_RECORD, 
record=record, origin='software'))
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :   File 
"/home/weewx/bin/weewx/engine.py", line 225, in dispatchEvent
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :     callback(event)
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :   File 
"/home/weewx/bin/user/cmon.py", line 727, in new_archive_record
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :    
 self.save_data(self.get_data(now, self.last_ts))
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :   File 
"/home/weewx/bin/user/cmon.py", line 734, in save_data
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :     self.dbm.addRecord(record)
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :   File 
"/home/weewx/bin/weewx/manager.py", line 249, in addRecord
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :    
 self._addSingleRecord(record, cursor, log_level)
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :   File 
"/home/weewx/bin/weewx/manager.py", line 1234, in _addSingleRecord
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :    
 self._set_day_summary(_day_summary, record['dateTime'], cursor)
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :   File 
"/home/weewx/bin/weewx/manager.py", line 1584, in _set_day_summary
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :    
 cursor.execute(_sql_replace_str, _write_tuple)
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :   File 
"/home/weewx/bin/weedb/mysql.py", line 60, in guarded_fn
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  :     raise klass(e)
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  : weedb.DatabaseError: (1213, 
'Deadlock found when trying to get lock; try restarting transaction')
Mar 25 10:25:38 pi36 tfrc[4503]:     ****  Exiting.

I changed lines 727 and 728 in cmon.py:
snippet from cmon.py:
===========================================
def new_archive_record(self, event):
"""save data to database then prune old records as needed"""
now = int(time.time() + 0.5)
delta = now - event.record['dateTime']
if delta > event.record['interval'] * 60:
logdbg("Skipping record: time difference %s too big" % delta)
return
if self.last_ts is not None:
data = self.get_data(now, self.last_ts) ### line 727
self.save_data(data) ### line 728
self.last_ts = now
if self.max_age is not None:
self.prune_data(now - self.max_age)

def save_data(self, record):
"""save data to database"""
self.dbm.addRecord(record)
===========================================

Again a deadlock error, but this time cmon.py is not part of the traceback

Mar 25 10:40:20 pi36 tfrc[7623]: engine: Main loop exiting. Shutting engine 
down.
Mar 25 10:40:20 pi36 tfrc[7623]: engine: Shutting down StdReport thread
Mar 25 10:40:40 pi36 tfrc[7623]: engine: Unable to shut down StdReport 
thread
Mar 25 10:40:40 pi36 tfrc[7623]: tfrc: MainThread: shutdown process 
/home/pi/tfrec/tfrec -D -T 1
Mar 25 10:40:40 pi36 tfrc[7623]: tfrc: MainThread: tfrec with pid 7632 
killed
Mar 25 10:40:40 pi36 tfrc[7623]: engine: Caught unrecoverable exception in 
engine:
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  (1213, 'Deadlock found when 
trying to get lock; try restarting transaction')
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  : Traceback (most recent call 
last):
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :   File 
"/home/weewx/bin/weewx/engine.py", line 196, in run
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :    
 self.dispatchEvent(weewx.Event(weewx.CHECK_LOOP, packet=packet))
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :   File 
"/home/weewx/bin/weewx/engine.py", line 225, in dispatchEvent
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :     callback(event)
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :   File 
"/home/weewx/bin/weewx/engine.py", line 565, in check_loop
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :     raise BreakLoop
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  : weewx.engine.BreakLoop
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  : During handling of the above 
exception, another exception occurred:
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  : Traceback (most recent call 
last):
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :   File 
"/home/weewx/bin/weewx/engine.py", line 581, in post_loop
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :    
 self._catchup(self.engine.console.genArchiveRecords)
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :   File 
"/home/weewx/bin/weewx/engine.py", line 633, in _catchup
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :     for record in 
generator(lastgood_ts):
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :   File 
"/home/weewx/bin/weewx/drivers/__init__.py", line 30, in genArchiveRecords
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :     raise 
NotImplementedError("Method 'genArchiveRecords' not implemented")
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  : NotImplementedError: Method 
'genArchiveRecords' not implemented
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  : During handling of the above 
exception, another exception occurred:
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  : Traceback (most recent call 
last):
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :   File 
"/home/weewx/bin/weedb/mysql.py", line 51, in guarded_fn
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :     return fn(*args, **kwargs)
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :   File 
"/home/weewx/bin/weedb/mysql.py", line 261, in execute
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :    
 self.cursor.execute(mysql_string, tuple(sql_tuple))
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :   File 
"/usr/lib/python3/dist-packages/MySQLdb/cursors.py", line 226, in execute
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :     self.errorhandler(self, 
exc, value)
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :   File 
"/usr/lib/python3/dist-packages/MySQLdb/connections.py", line 36, in 
defaulterrorhandler
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :     raise errorvalue
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :   File 
"/usr/lib/python3/dist-packages/MySQLdb/cursors.py", line 217, in execute
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :     res = self._query(query)
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :   File 
"/usr/lib/python3/dist-packages/MySQLdb/cursors.py", line 378, in _query
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :     rowcount = 
self._do_query(q)
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :   File 
"/usr/lib/python3/dist-packages/MySQLdb/cursors.py", line 341, in _do_query
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :     db.query(q)
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :   File 
"/usr/lib/python3/dist-packages/MySQLdb/connections.py", line 280, in query
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :    
 _mysql.connection.query(self, query)
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  : 
_mysql_exceptions.OperationalError: (1213, 'Deadlock found when trying to 
get lock; try restarting transaction')
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  : During handling of the above 
exception, another exception occurred:
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  : Traceback (most recent call 
last):
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :   File 
"/home/weewx/bin/weewx/engine.py", line 893, in main
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :     engine.run()
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :   File 
"/home/weewx/bin/weewx/engine.py", line 203, in run
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :    
 self.dispatchEvent(weewx.Event(weewx.POST_LOOP))
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :   File 
"/home/weewx/bin/weewx/engine.py", line 225, in dispatchEvent
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :     callback(event)
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :   File 
"/home/weewx/bin/weewx/engine.py", line 583, in post_loop
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :     self._software_catchup()
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :   File 
"/home/weewx/bin/weewx/engine.py", line 647, in _software_catchup
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :    
 self.engine.dispatchEvent(weewx.Event(weewx.NEW_ARCHIVE_RECORD, 
record=record, origin='software'))
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :   File 
"/home/weewx/bin/weewx/engine.py", line 225, in dispatchEvent
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :     callback(event)
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :   File 
"/home/weewx/bin/weewx/engine.py", line 602, in new_archive_record
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :    
 dbmanager.addRecord(event.record, accumulator=self.old_accumulator)
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :   File 
"/home/weewx/bin/weewx/manager.py", line 246, in addRecord
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :    
 self._updateHiLo(accumulator, cursor)
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :   File 
"/home/weewx/bin/weewx/manager.py", line 1250, in _updateHiLo
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :    
 self._set_day_summary(_stats_dict, accumulator.timespan.stop, cursor)
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :   File 
"/home/weewx/bin/weewx/manager.py", line 1584, in _set_day_summary
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :    
 cursor.execute(_sql_replace_str, _write_tuple)
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :   File 
"/home/weewx/bin/weedb/mysql.py", line 60, in guarded_fn
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  :     raise klass(e)
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  : weedb.DatabaseError: (1213, 
'Deadlock found when trying to get lock; try restarting transaction')
Mar 25 10:40:40 pi36 tfrc[7623]:     ****  Exiting.

Luc

Reply via email to