I've written an application that interacts with an Odoo sass-14 database via the XML-RPC API. Most of the time reading, writing, creating and deleting objects all works fine without issue. However, lately I have been randomly getting the following error when trying to update an object. The error does not occur consistently. I see it in the logs once in a while, and when I try to reproduce it, it doesn't occur. This is the error:
Traceback (most recent call last):
File "/home/odoo/src/odoo/saas-14/odoo/service/wsgi_server.py", line 56, in xmlrpc_return
result = odoo.http.dispatch_rpc(service, method, params)
File "/home/odoo/src/odoo/saas-14/odoo/http.py", line 118, in dispatch_rpc
result = dispatch(method, params)
File "/home/odoo/src/odoo/saas-14/odoo/service/model.py", line 38, in dispatch
res = fn(db, uid, *params)
File "/home/odoo/src/odoo/saas-14/odoo/service/model.py", line 157, in execute_kw
return execute(db, uid, obj, method, *args, **kw or {})
File "/home/odoo/src/odoo/saas-14/odoo/service/model.py", line 101, in wrapper
return f(dbname, *args, **kwargs)
File "/home/odoo/src/odoo/saas-14/odoo/service/model.py", line 164, in execute
res = execute_cr(cr, uid, obj, method, *args, **kw)
File "/home/odoo/src/odoo/saas-14/odoo/service/model.py", line 153, in execute_cr
return odoo.api.call_kw(recs, method, args, kw)
File "/home/odoo/src/odoo/saas-14/odoo/api.py", line 681, in call_kw
return call_kw_multi(method, model, args, kwargs)
File "/home/odoo/src/odoo/saas-14/odoo/api.py", line 672, in call_kw_multi
result = method(recs, *args, **kwargs)
File "/home/odoo/src/odoo/saas-14/addons/mail/models/mail_thread.py", line 271, in write
for record in track_self)
File "/home/odoo/src/odoo/saas-14/addons/mail/models/mail_thread.py", line 271, in <genexpr>
for record in track_self)
File "/home/odoo/src/odoo/saas-14/addons/mail/models/mail_thread.py", line 270, in <genexpr>
initial_values = dict((record.id, dict((key, getattr(record, key)) for key in tracked_fields))
File "/home/odoo/src/odoo/saas-14/odoo/fields.py", line 873, in __get__
self.determine_value(record)
File "/home/odoo/src/odoo/saas-14/odoo/fields.py", line 959, in determine_value
self.compute_value(recs)
File "/home/odoo/src/odoo/saas-14/odoo/fields.py", line 939, in compute_value
self._compute_value(records)
File "/home/odoo/src/odoo/saas-14/odoo/fields.py", line 930, in _compute_value
getattr(records, self.compute)()
File "/home/odoo/src/odoo/saas-14/addons/sale/models/sale.py", line 28, in _amount_all
for line in order.order_line:
File "/home/odoo/src/odoo/saas-14/odoo/fields.py", line 873, in __get__
self.determine_value(record)
File "/home/odoo/src/odoo/saas-14/odoo/fields.py", line 975, in determine_value
record._prefetch_field(self)
File "/home/odoo/src/odoo/saas-14/odoo/models.py", line 3082, in _prefetch_field
result = records.read([f.name for f in fs], load='_classic_write')
File "/home/odoo/src/odoo/saas-14/odoo/models.py", line 3022, in read
self._read_from_database(stored, inherited)
File "/home/odoo/src/odoo/saas-14/odoo/models.py", line 3150, in _read_from_database
cr.execute(query_str, params)
File "/home/odoo/src/odoo/saas-14/odoo/sql_db.py", line 153, in wrapper
raise psycopg2.OperationalError(msg)
OperationalError: Unable to use a closed cursor.
The application is a Laravel PHP app that is running via a worker daemon monitored by supervisord. When the error does occur, it seems to always be at the same spot in the application when I am updating the `order_line` information for a `sale.order`.
Does anyone have any idea what might be causing this error? It's been very hard to track down since it does not occur consistently.