Great. Any way to push this to higher priority than low? This is a serious issue for us. On Jun 18, 2012, at 9:03 AM, Amit Parik (OpenERP) wrote: > *** This bug is a duplicate of bug 992525 *** > https://bugs.launchpad.net/bugs/992525 > > ** This bug is no longer a duplicate of bug 949907 > could not obtain lock on row in relation "res_users" > > ** This bug has been marked a duplicate of bug 992525 > TransactionRollbackError due to concurrent update could be better handled > > -- > You received this bug notification because you are subscribed to the bug > report. > https://bugs.launchpad.net/bugs/1013223 > > Title: > concurrent users over xmlrpc > > Status in OpenERP Server: > New > > Bug description: > Setup: > > 1 x ubuntu 12.04 LTS server (all updates applied) > python 2.7.3 > postgresql 9.1 > openerp 6.1 > > We wanted to run some load tests based on the simple create_partner.py > example that everyone uses. When we put 100 concurrent users, logging > in and creating 100 partners (one at a time) using JMeter we get some > errors: > > 2012-06-12 19:51:42,843 2210 DEBUG ? openerp.sql_db: ConnectionPool(used=0/count=64/max=64) Put connection to 'host=localhost port=5432 user=openerp password=xxxxxxx dbname=openerp' in pool > 2012-06-12 19:51:42,843 2210 ERROR ? openerp.osv.osv: Uncaught exception > Traceback (most recent call last): > File "/usr/lib/pymodules/python2.7/openerp/osv/osv.py", line 121, in wrapper > return f(self, dbname, *args, **kwargs) > File "/usr/lib/pymodules/python2.7/openerp/osv/osv.py", line 176, in execute > res = self.execute_cr(cr, uid, obj, method, *args, **kw) > File "/usr/lib/pymodules/python2.7/openerp/osv/osv.py", line 164, in execute_cr > return getattr(object, method)(cr, uid, *args, **kw) > File "/usr/lib/pymodules/python2.7/openerp/osv/orm.py", line 4154, in create > cr.execute('insert into "'+self._table+'" (id'+upd0+") values ("+str(id_new)+upd1+')', tuple(upd2)) > File "/usr/lib/pymodules/python2.7/openerp/sql_db.py", line 152, in wrapper > return f(self, *args, **kwargs) > File "/usr/lib/pymodules/python2.7/openerp/sql_db.py", line 212, in execute > res = self._obj.execute(query, params) > TransactionRollbackError: could not serialize access due to concurrent update > CONTEXT: SQL statement "SELECT 1 FROM ONLY "public"."res_users" x WHERE "id" OPERATOR(pg_catalog.=) $1 FOR SHARE OF x" > 2012-06-12 19:51:42,844 2210 ERROR ? openerp.netsvc: could not serialize access due to concurrent update > > After seeing this error I decided to update the db_maxconn property to > 1000, to ensure you have enough connections for the test. But I still > see errors like the one below: > > 2012-06-12 19:57:14,811 6327 DEBUG ? openerp.sql_db: ConnectionPool(used=19/count=85/max=1000) Put connection to 'host=localhost port=5432 user=openerp password=xxxxxxx dbname=openerp' in pool > 2012-06-12 19:57:14,811 6327 ERROR ? openerp.netsvc: Object Error > Object res.partner doesn't exist > > 2012-06-12 20:20:26,636 15119 ERROR ? openerp.sql_db: bad query: SELECT id from res_users > WHERE login='admin' AND password='admin' > AND active FOR UPDATE NOWAIT > Traceback (most recent call last): > File "/usr/lib/pymodules/python2.7/openerp/sql_db.py", line 212, in execute > res = self._obj.execute(query, params) > OperationalError: could not obtain lock on row in relation "res_users" > > 2012-06-12 20:20:26,745 15119 ERROR ? openerp.sql_db: bad query: insert into "res_partner" (id,"customer","lang","name","color","employee","company_id","supplier","active",create_uid,create_date) values (43536,'True','en_US','Partner - 1 ',0,'False',1,'False','True',1,(now() at time zone 'UTC')) > Traceback (most recent call last): > File "/usr/lib/pymodules/python2.7/openerp/sql_db.py", line 212, in execute > res = self._obj.execute(query, params) > TransactionRollbackError: could not serialize access due to concurrent update > > 2012-06-12 20:20:26,779 15119 ERROR ? openerp.sql_db: bad query: insert into "res_partner" (id,"customer","lang","name","color","employee","company_id","supplier","active",create_uid,create_date) values (43537,'True','en_US','Partner - 1 ',0,'False',1,'False','True',1,(now() at time zone 'UTC')) > Traceback (most recent call last): > File "/usr/lib/pymodules/python2.7/openerp/sql_db.py", line 212, in execute > res = self._obj.execute(query, params) > TransactionRollbackError: could not serialize access due to concurrent update > > Please find attached the JMeter file you can use to launch the test. > You will need to change the IP addresses, admin account/password and > database probably. > > The test environment consists of one box with Ubuntu 12 LTS Server with Postgres 9.1 and OpenERP 6.1 (CRM + Employee Directory modules + demo data). > /usr/bin/openerp-server --db_user=openerp --db_password=openerp --db_host=localhost --db_port=5432 --no-database-list --log-sq --db_maxconn=1000 > > Same test with gunicorn sync (no gevent). Please find attached the > gunicorn configuration. Please look at this well. There could be > concurrency issues with some of the underlying SQL statements. > > 2012-06-12 17:17:33,826 1368 ERROR openerp openerp.sql_db: bad query: insert into "res_partner" (id,"customer","lang","name","color","employee","company_id","supplier","active",create_uid,create_date) values (44646,'True','en_US','Partner - 1 ',0,'False',1,'False','True',1,(now() at time zone 'UTC')) > Traceback (most recent call last): > File "/usr/lib/pymodules/python2.7/openerp/sql_db.py", line 212, in execute > res = self._obj.execute(query, params) > TransactionRollbackError: could not serialize access due to concurrent update > CONTEXT: SQL statement "SELECT 1 FROM ONLY "public"."res_users" x WHERE "id" OPERATOR(pg_catalog.=) $1 FOR SHARE OF x" > > 2012-06-12 17:17:33,827 1368 ERROR openerp openerp.osv.osv: Uncaught exception > Traceback (most recent call last): > File "/usr/lib/pymodules/python2.7/openerp/osv/osv.py", line 121, in wrapper > return f(self, dbname, *args, **kwargs) > File "/usr/lib/pymodules/python2.7/openerp/osv/osv.py", line 176, in execute > res = self.execute_cr(cr, uid, obj, method, *args, **kw) > File "/usr/lib/pymodules/python2.7/openerp/osv/osv.py", line 164, in execute_cr > return getattr(object, method)(cr, uid, *args, **kw) > File "/usr/lib/pymodules/python2.7/openerp/osv/orm.py", line 4154, in create > cr.execute('insert into "'+self._table+'" (id'+upd0+") values ("+str(id_new)+upd1+')', tuple(upd2)) > File "/usr/lib/pymodules/python2.7/openerp/sql_db.py", line 152, in wrapper > return f(self, *args, **kwargs) > File "/usr/lib/pymodules/python2.7/openerp/sql_db.py", line 212, in execute > res = self._obj.execute(query, params) > TransactionRollbackError: could not serialize access due to concurrent update > CONTEXT: SQL statement "SELECT 1 FROM ONLY "public"."res_users" x WHERE "id" OPERATOR(pg_catalog.=) $1 FOR SHARE OF x" > > 2012-06-12 17:17:33,831 1368 ERROR openerp openerp.netsvc: could not serialize access due to concurrent update > CONTEXT: SQL statement "SELECT 1 FROM ONLY "public"."res_users" x WHERE "id" OPERATOR(pg_catalog.=) $1 FOR SHARE OF x" > > 2012-06-12 17:17:33,843 1369 ERROR openerp openerp.sql_db: bad query: insert into "res_partner" (id,"customer","lang","name","color","employee","company_id","supplier","active",create_uid,create_date) values (44647,'True','en_US','Partner - 1 ',0,'False',1,'False','True',1,(now() at time zone 'UTC')) > Traceback (most recent call last): > File "/usr/lib/pymodules/python2.7/openerp/sql_db.py", line 212, in execute > res = self._obj.execute(query, params) > TransactionRollbackError: could not serialize access due to concurrent update > CONTEXT: SQL statement "SELECT 1 FROM ONLY "public"."res_users" x WHERE "id" OPERATOR(pg_catalog.=) $1 FOR SHARE OF x" > > 2012-06-12 17:17:33,847 1369 ERROR openerp openerp.osv.osv: Uncaught exception > Traceback (most recent call last): > File "/usr/lib/pymodules/python2.7/openerp/osv/osv.py", line 121, in wrapper > return f(self, dbname, *args, **kwargs) > File "/usr/lib/pymodules/python2.7/openerp/osv/osv.py", line 176, in execute > res = self.execute_cr(cr, uid, obj, method, *args, **kw) > File "/usr/lib/pymodules/python2.7/openerp/osv/osv.py", line 164, in execute_cr > return getattr(object, method)(cr, uid, *args, **kw) > File "/usr/lib/pymodules/python2.7/openerp/osv/orm.py", line 4154, in create > cr.execute('insert into "'+self._table+'" (id'+upd0+") values ("+str(id_new)+upd1+')', tuple(upd2)) > File "/usr/lib/pymodules/python2.7/openerp/sql_db.py", line 152, in wrapper > return f(self, *args, **kwargs) > File "/usr/lib/pymodules/python2.7/openerp/sql_db.py", line 212, in execute > res = self._obj.execute(query, params) > TransactionRollbackError: could not serialize access due to concurrent u2012-06-12 17:17:33,845 1371 ERROR openerp openerp.sql_db: bad query: insert into "res_partner" (id,"customer","lang","name","color","employee","company_id","supplier","active",create_uid,create_date) values (44648,'True','en_US','Partner - 1 ',0,'False',1,'False','True',1,(now() at time zone 'UTC')) > Traceback (most recent call last): > File "/usr/lib/pymodules/python2.7/openerp/sql_db.py", line 212, in execute > res = self._obj.execute(query, params) > TransactionRollbackError: could not serialize access due to concurrent update > CONTEXT: SQL statement "SELECT 1 FROM ONLY "public"."res_users" x WHERE "id" OPERATOR(pg_catalog.=) $1 FOR SHARE OF x" > > 2012-06-12 17:17:33,853 1371 ERROR openerp openerp.osv.osv: Uncaught exception > Traceback (most recent call last): > File "/usr/lib/pymodules/python2.7/openerp/osv/osv.py", line 121, in wrapper > return f(self, dbname, *args, **kwargs) > File "/usr/lib/pymodules/python2.7/openerp/osv/osv.py", line 176, in execute > res = self.execute_cr(cr, uid, obj, method, *args, **kw) > File "/usr/lib/pymodules/python2.7/openerp/osv/osv.py", line 164, in execute_cr > return getattr(object, method)(cr, uid, *args, **kw) > File "/usr/lib/pymodules/python2.7/openerp/osv/orm.py", line 4154, in create > cr.execute('insert into "'+self._table+'" (id'+upd0+") values ("+str(id_new)+upd1+')', tuple(upd2)) > File "/usr/lib/pymodules/python2.7/openerp/sql_db.py", line 152, in wrapper > return f(self, *args, **kwargs) > File "/usr/lib/pymodules/python2.7/openerp/sql_db.py", line 212, in execute > res = self._obj.execute(query, params) > TransactionRollbackError: could not serialize access due to concurrent update > CONTEXT: SQL statement "SELECT 1 FROM ONLY "public"."res_users" x WHERE "id" OPERATOR(pg_catalog.=) $1 FOR SHARE OF x" > > 2012-06-12 17:17:33,854 1369 ERROR openerp openerp.netsvc: could not serialize access due to concurrent update > CONTEXT: SQL statement "SELECT 1 FROM ONLY "public"."res_users" x WHERE "id" OPERATOR(pg_catalog.=) $1 FOR SHARE OF x" > > pdate > CONTEXT: SQL statement "SELECT 1 FROM ONLY "public"."res_users" x WHERE "id" OPERATOR(pg_catalog.=) $1 FOR SHARE OF x" > > 2012-06-12 17:17:33,855 1371 ERROR openerp openerp.netsvc: could not serialize access due to concurrent update > CONTEXT: SQL statement "SELECT 1 FROM ONLY "public"."res_users" x WHERE "id" OPERATOR(pg_catalog.=) $1 FOR SHARE OF x" > > 2012-06-12 17:17:33,895 1370 ERROR openerp openerp.sql_db: bad query: SELECT id from res_users > WHERE login='admin' AND password='admin' > AND active FOR UPDATE NOWAIT > Traceback (most recent call last): > File "/usr/lib/pymodules/python2.7/openerp/sql_db.py", line 212, in execute > res = self._obj.execute(query, params) > OperationalError: could not obtain lock on row in relation "res_users" > > To manage notifications about this bug go to: > https://bugs.launchpad.net/openobject-server/+bug/1013223/+subscriptions