не удалось сериализовать доступ из-за одновременного обновления при создании выбора позиции из задания - PullRequest
0 голосов
/ 21 июня 2020

Затронутые версии: 12.0

Шаги по воспроизведению: Я сделал настройку, чтобы отложить создание заказа на поставку и делегировать задачу заданию. Некоторое время я получаю сообщение об ошибке ниже

Текущее поведение: 2020-06-18 17: 49: 24,588 1370 ОШИБКА cafe9.rabeh.io odoo.addons.base.models.ir_cron: вызов из cron POS Orders: обработка отложенных заказов для действия сервера # 610 не удалось в задании № 24 Traceback (последний вызов последний):

Файл "/opt/rabeh/odoo/odoo/addons/base/models/ir_cron.py", строка 102, в _callback self.env ['ir.actions.server '] .browse (server_action_id) .run ()

Файл "/opt/rabeh/odoo/odoo/addons/base/models/ir_actions.py", строка 569, выполняется res = fun c (действие, eval_context = eval_context)

Файл "/opt/rabeh/odoo/odoo/addons/base/models/ir_actions.py", строка 445, в run_action_code_multi safe_eval (action.sudo (). code. strip (), eval_context, mode = "exe c", nocopy = True) # nocopy позволяет вернуть 'действие'

File "/ opt / rabeh / odoo / odoo /tools/safe_eval.py ", строка 350, в safe_eval return unsafe_eval (c, globals_dict, locals_dict)

Файл" /opt/rabeh-12/rabeh_addons/pos_pending_session/models/pos_order.py ", строка 68, в pending_picking_creation po_order.create_picking ()

File "/opt/rabeh-12/rabeh_addons/pos_pending_session/models/pos_order.py", строка 36, в create_picking res = super (PosOrder, orders). create_picking ()

File "/opt/rabeh/odoo/addons/point_of_sale/models/pos_order.py", строка 841, в порядке create_picking._force_picking_done (order_picking)

File "/ opt /rabeh/odoo/addons/point_of_sale/models/pos_order.py ", строка 856, в _force_picking_done picking.action_done ()

Файл" /opt/rabeh/odoo/addons/stock/models/stock_picking.py ", строка 631, в action_done todo_moves._action_done ()

Файл" /opt/rabeh/odoo/addons/purchase_stock/models/stock.py ", строка 96, в _action_done res = super (StockMove, self ) ._ action_done ()

Файл "/ opt / rabeh / odoo / addons / stoc k_account / models / stock.py ", строка 389, в _action_done res = super (StockMove, self) ._ action_done ()

File" /opt/rabeh/odoo/addons/stock/models/stock_move.py ", строка 1137, в _action_done move_todo.mapped ('move_line_ids') ._ action_done ()

Файл" /opt/rabeh/odoo/addons/stock/models/stock_move_line.py ", строка 445, в _action_done Quant._update_available_quantity (ml.product_id, ml.location_dest_id, количество, lot_id = ml.lot_id, package_id = ml.result_package_id, owner_id = ml.owner_id, in_date = in_date)

Файл "/ optoo / rabeh / /addons/stock/models/stock_quant.py ", строка 216, в _update_available_quantity self._cr.execute (" ВЫБРАТЬ 1 ИЗ stock_quant WHERE id =% s FOR UPDATE NOWAIT ", [Quant.id], log_exceptions = False)

Файл "/opt/rabeh/odoo/odoo/sql_db.py", строка 148, в оболочке return f (self, * args, ** kwargs)

Файл "/ opt / rabeh / odoo / odoo / sql_db.py ", строка 225, при выполнении res = self._obj.execute (query, params)

psycopg2.errors.SerializationFailur e: не удалось сериализовать доступ из-за одновременного обновления

Ожидаемое поведение: я думаю, что эта строка должна сгенерировать не удалось получить блокировку. Мне просто интересно, когда она могла генерировать «не удалось сериализовать доступ из-за одновременного обновления»

1 Ответ

0 голосов
/ 21 июня 2020

Он мог получить блокировку, поскольку блокировка в настоящее время доступна. Но он был заблокирован в какой-то предыдущий момент, который совпадает с моментальным снимком текущей транзакции. Таким образом, получение блокировки возможно, но в случае ее получения возникнет проблема сериализации. Сообщение об ошибке сериализации кажется правильным результатом.

Использование FOR UPDATE NOWAIT в транзакции с повышенным уровнем изоляции кажется непоследовательным или, по крайней мере, ненужным. Чего вы надеетесь достичь sh этим? Ваше описание «при создании выбора должности из вакансии» не проясняет мне это. Это какой-то специфический c жаргон?

...