2015-05-29 13:28 GMT+02:00 Cédric Krier <[email protected]>: > On 29 May 13:14, Raimon Esteve wrote: >> Hie, >> >> when assign stock move, try_assign lock table (1). In Backend >> PostgresSQL, the lock is NOWAIT (2). >> >> When two or more users try to assign shipments at same time, "second >> user" get a nice error. >> >> Traceback is: >> >> File "/shipment.py", line 1292, in assign_try >> for m in s.inventory_moves]): >> File "/move.py", line 754, in assign_try >> Transaction().cursor.lock(cls._table) >> File "/trytond/backend/postgresql/database.py", line 359, in lock >> self.cursor.execute('LOCK "%s" IN EXCLUSIVE MODE NOWAIT' % table) >> OperationalError: could not obtain lock on relation "stock_move" >> >> Why lock() method in PSQL backend add NOWAIT option? Why not waiting >> next user request when unluck table and continue try_assin? the >> reason? > > because the transaction of the waiting user is already started and so it > must be restarted to have the new committed data. > > On such operational error, trytond retries 5 times per default [1] if it > is not enough for your setup you should increase it.
Maybe it would be appropriate to add a sleep() (maybe larger on each retry) to let the system process concurrent transactions, instead of retrying 5 times with no wait. > Or maybe you have a too long transaction keeping the lock, in such case > you must reduce the time of this transaction. > > [1] > http://doc.tryton.org/3.6/trytond/doc/topics/configuration.html#retry > -- > Cédric Krier - B2CK SPRL > Email/Jabber: [email protected] > Tel: +32 472 54 46 59 > Website: http://www.b2ck.com/ -- Albert Cervera i Areny Tel. 93 553 18 03 @albertnan www.NaN-tic.com
