Thread: [SQLObject] Python 2.7.12 + tox + PostgreSQL
SQLObject is a Python ORM.
Brought to you by:
ianbicking,
phd
From: Oleg B. <ph...@ph...> - 2016-08-25 21:18:54
|
Hi, All! Recently tests started to fail both at Travis and Circle, but only with Postgres. Initially I couldn't reproduce the problem locally but after a dozen of experiments I got it: the problem manifests itself only with Python 2.7.12 + tox + PostgreSQL. I have to install Python 2.7.12 and tox to reproduce it locally (I have Debian with Python 2.7.9 and I usually don't use tox - I run py.test directly). Somehow I managed to fix tests by changing test order - I explicitly listed tests directories with 'tests' at the top of the other dirs. Now tests passed locally and at both CIs. I understand neither the problem nor the solution. :-( Any idea? Oleg. -- Oleg Broytman http://phdru.name/ ph...@ph... Programmers don't die, they just GOSUB without RETURN. |
From: Ian C. <gra...@gm...> - 2016-08-26 15:42:11
|
On Aug 25, 2016 4:19 PM, "Oleg Broytman" <ph...@ph...> wrote: > Hi, All! > > Recently tests started to fail both at Travis and Circle, but only > with Postgres. Initially I couldn't reproduce the problem locally but > after a dozen of experiments I got it: the problem manifests itself > only with Python 2.7.12 + tox + PostgreSQL. I have to install Python > 2.7.12 and tox to reproduce it locally (I have Debian with Python 2.7.9 > and I usually don't use tox - I run py.test directly). > > Somehow I managed to fix tests by changing test order - I explicitly > listed tests directories with 'tests' at the top of the other dirs. Now > tests passed locally and at both CIs. > > I understand neither the problem nor the solution. :-( Any idea? > Can you share a link to the reordering that fixed this? I won't pretend to understand it either, but there is typically a difference between how tox runs tests and how you might be running them. tox will install sqlobject first and then run the tests against that installed version (ideally). If you just run py.test directly, it might not be installed and will be running against the local copy in git. Something could be wrong about how sqlobject is being packaged. |
From: Oleg B. <ph...@ph...> - 2016-08-26 15:49:09
|
Hi! On Fri, Aug 26, 2016 at 10:42:04AM -0500, Ian Cordasco <gra...@gm...> wrote: > On Aug 25, 2016 4:19 PM, "Oleg Broytman" <ph...@ph...> wrote: > > > Hi, All! > > > > Recently tests started to fail both at Travis and Circle, but only > > with Postgres. Initially I couldn't reproduce the problem locally but > > after a dozen of experiments I got it: the problem manifests itself > > only with Python 2.7.12 + tox + PostgreSQL. I have to install Python > > 2.7.12 and tox to reproduce it locally (I have Debian with Python 2.7.9 > > and I usually don't use tox - I run py.test directly). > > > > Somehow I managed to fix tests by changing test order - I explicitly > > listed tests directories with 'tests' at the top of the other dirs. Now > > tests passed locally and at both CIs. > > > > I understand neither the problem nor the solution. :-( Any idea? > > Can you share a link to the reordering that fixed this? I won't pretend to > understand it either, but there is typically a difference between how tox > runs tests and how you might be running them. https://github.com/sqlobject/sqlobject/commit/c0737d14122550cfe965d193d899c8ab0801999d Usually py.test lists tests directories in alphabetical order: "include/tests inheritance/tests tests versioning/test". I put "tests" at the front: "tests include/tests inheritance/tests versioning/test" and that fixes the problem both locally and at CIs. > tox will install sqlobject first and then run the tests against that > installed version (ideally). If you just run py.test directly, it might not > be installed and will be running against the local copy in git. Something > could be wrong about how sqlobject is being packaged. Could be, but why only with Postgres then? Oleg. -- Oleg Broytman http://phdru.name/ ph...@ph... Programmers don't die, they just GOSUB without RETURN. |
From: Oleg B. <ph...@ph...> - 2016-08-26 15:54:37
|
On Fri, Aug 26, 2016 at 05:49:00PM +0200, Oleg Broytman <ph...@ph...> wrote: > On Fri, Aug 26, 2016 at 10:42:04AM -0500, Ian Cordasco <gra...@gm...> wrote: > > tox will install sqlobject first and then run the tests against that > > installed version (ideally). If you just run py.test directly, it might not > > be installed and will be running against the local copy in git. Something > > could be wrong about how sqlobject is being packaged. > > Could be, but why only with Postgres then? And only with Python 2.7.12. With 2.7.9 everything is fine. Oleg. -- Oleg Broytman http://phdru.name/ ph...@ph... Programmers don't die, they just GOSUB without RETURN. |
From: Oleg B. <ph...@ph...> - 2016-09-22 22:03:41
|
Hi, all! On Thu, Aug 25, 2016 at 11:18:45PM +0200, Oleg Broytman <ph...@ph...> wrote: > Recently tests started to fail both at Travis and Circle, but only > with Postgres. Initially I couldn't reproduce the problem locally but > after a dozen of experiments I got it: the problem manifests itself > only with Python 2.7.12 + tox + PostgreSQL. I have to install Python > 2.7.12 and tox to reproduce it locally (I have Debian with Python 2.7.9 > and I usually don't use tox - I run py.test directly). > > Somehow I managed to fix tests by changing test order - I explicitly > listed tests directories with 'tests' at the top of the other dirs. After a few hundreds successful and failed test runs I narrowed the problem a bit and reproduced it with any python version and without tox. So the problem is clearly in SQLObject tests. The problem is manifested if tests from sqlobject/tests are run after sqlobject/inheritance/tests: createdb test py.test sqlobject/inheritance/tests tests/test_schema.py dropdb test Output: sqlobject/inheritance/tests/test_aggregates.py . sqlobject/inheritance/tests/test_asdict.py .. sqlobject/inheritance/tests/test_deep_inheritance.py ... sqlobject/inheritance/tests/test_foreignKey.py .. sqlobject/inheritance/tests/test_indexes.py . sqlobject/inheritance/tests/test_inheritance.py .... sqlobject/inheritance/tests/test_inheritance_tree.py . sqlobject/tests/test_schema.py F def test_connection_schema(): if not supports('schema'): py.test.skip("schemas aren't supported") conn = getConnection() conn.schema = None conn.query('CREATE SCHEMA test') conn.schema = 'test' conn.query('SET search_path TO test') setupClass(SOTestSchema) assert SOTestSchema._connection is conn > SOTestSchema(foo='bar') def _executeRetry(self, conn, cursor, query): if self.debug: self.printDebug(conn, query, 'QueryR') try: return cursor.execute(query) except self.module.OperationalError as e: raise dberrors.OperationalError(ErrorMessage(e)) except self.module.IntegrityError as e: msg = ErrorMessage(e) if e.pgcode == '23505': raise dberrors.DuplicateEntryError(msg) else: raise dberrors.IntegrityError(msg) except self.module.InternalError as e: raise dberrors.InternalError(ErrorMessage(e)) except self.module.ProgrammingError as e: > raise dberrors.ProgrammingError(ErrorMessage(e)) E ProgrammingError: relation "so_test_schema" does not exist E LINE 1: INSERT INTO so_test_schema (foo) VALUES ('bar') RETURNING id E ^ Oleg. -- Oleg Broytman http://phdru.name/ ph...@ph... Programmers don't die, they just GOSUB without RETURN. |
From: Neil M. <drn...@gm...> - 2016-10-27 19:10:58
|
On 23 September 2016 at 00:03, Oleg Broytman <ph...@ph...> wrote: > Hi, all! > > On Thu, Aug 25, 2016 at 11:18:45PM +0200, Oleg Broytman <ph...@ph...> wrote: >> Recently tests started to fail both at Travis and Circle, but only >> with Postgres. Initially I couldn't reproduce the problem locally but >> after a dozen of experiments I got it: the problem manifests itself >> only with Python 2.7.12 + tox + PostgreSQL. I have to install Python >> 2.7.12 and tox to reproduce it locally (I have Debian with Python 2.7.9 >> and I usually don't use tox - I run py.test directly). >> >> Somehow I managed to fix tests by changing test order - I explicitly >> listed tests directories with 'tests' at the top of the other dirs. > > After a few hundreds successful and failed test runs I narrowed the > problem a bit and reproduced it with any python version and without tox. > So the problem is clearly in SQLObject tests. > The problem is manifested if tests from sqlobject/tests are run after > sqlobject/inheritance/tests: > > createdb test > py.test sqlobject/inheritance/tests tests/test_schema.py > dropdb test > I spent some time today poking at this. While I haven't isolated the cause, I have some more information on what's happening. When the test fails, the connection pool has two entries. Because of how getConnection & releaseConnection are implemented, the connection returned by getConnection will cycle between these two entries. In this case, the call to CREATE TABLE and the query end up happening in different connections, which have different values for search_path (since that's local to the underlying connection), which causes the failure. I haven't worked out where the extra connection in the pool gets created or why this only happens some of the time. -- Neil Muller drn...@gm... I've got a gmail account. Why haven't I become cool? |
From: Oleg B. <ph...@ph...> - 2016-10-27 19:28:11
|
On Thu, Oct 27, 2016 at 09:10:49PM +0200, Neil Muller <drn...@gm...> wrote: > On 23 September 2016 at 00:03, Oleg Broytman <ph...@ph...> wrote: > > Hi, all! > > > > On Thu, Aug 25, 2016 at 11:18:45PM +0200, Oleg Broytman <ph...@ph...> wrote: > >> Recently tests started to fail both at Travis and Circle, but only > >> with Postgres. Initially I couldn't reproduce the problem locally but > >> after a dozen of experiments I got it: the problem manifests itself > >> only with Python 2.7.12 + tox + PostgreSQL. I have to install Python > >> 2.7.12 and tox to reproduce it locally (I have Debian with Python 2.7.9 > >> and I usually don't use tox - I run py.test directly). > >> > >> Somehow I managed to fix tests by changing test order - I explicitly > >> listed tests directories with 'tests' at the top of the other dirs. > > > > After a few hundreds successful and failed test runs I narrowed the > > problem a bit and reproduced it with any python version and without tox. > > So the problem is clearly in SQLObject tests. > > The problem is manifested if tests from sqlobject/tests are run after > > sqlobject/inheritance/tests: > > > > createdb test > > py.test sqlobject/inheritance/tests tests/test_schema.py > > dropdb test > > > > I spent some time today poking at this. While I haven't isolated the > cause, I have some more information on what's happening. > > When the test fails, the connection pool has two entries. Because of > how getConnection & releaseConnection are implemented, the connection > returned by getConnection will cycle between these two entries. In > this case, the call to CREATE TABLE and the query end up happening in > different connections, which have different values for search_path > (since that's local to the underlying connection), which causes the > failure. > > I haven't worked out where the extra connection in the pool gets > created or why this only happens some of the time. Food for thoughts. Thanks! > -- > Neil Muller > drn...@gm... Oleg. -- Oleg Broytman http://phdru.name/ ph...@ph... Programmers don't die, they just GOSUB without RETURN. |