[pgpool-general: 3206] Re: Setof returning function errors with pgpool2
Сергей Мелехин
cpro29a at gmail.com
Tue Sep 30 14:02:37 JST 2014
Hello!
Thank you for replying!
I tried to comment out xm.append(element.ClosePortal(x))
in (postgresql/protocol/client3.py line 364) but still getting random
errors
[Tue Sep 30 04:57:31 2014] [error] 2014-09-30 04:57:31,067 ERROR
[root][MainThread]
\xd0\x98\xd1\x81\xd0\xba\xd0\xbb\xd1\x8e\xd1\x87\xd0\xb5\xd0\xbd\xd0\xb8\xd0\xb5
\xd0\xb2 \xd1\x84\xd1\x83\xd0\xbd\xd0\xba\xd1\x86\xd0\xb8\xd0\xb8
kbsite.users.getUser(<kbsite.users.Users object at 0x7f35516e0160>,5):
[Tue Sep 30 04:57:31 2014] [error] Traceback (most recent call last):
[Tue Sep 30 04:57:31 2014] [error] File
"/var/www/.ve/lib/python3.4/site-packages/sitelib-0.3.33-py3.4.egg/sitelib/tools/log.py",
line 43, in inner
[Tue Sep 30 04:57:31 2014] [error] return f( *args, **kwargs )
[Tue Sep 30 04:57:31 2014] [error] File
"/var/www/.ve/lib/python3.4/site-packages/kbsite-0.2-py3.4.egg/kbsite/users.py",
line 78, in getUser
[Tue Sep 30 04:57:31 2014] [error] res = self.db.get_list(sql,
[userId], limit=1)
[Tue Sep 30 04:57:31 2014] [error] File
"/var/www/.ve/lib/python3.4/site-packages/sitelib-0.3.33-py3.4.egg/sitelib/tools/db/db.py",
line 204, in get_list
[Tue Sep 30 04:57:31 2014] [error] return self.query(sql, *params,
limit=None if limit == 'all' else int(limit), offset=offset)
[Tue Sep 30 04:57:31 2014] [error] File
"/var/www/.ve/lib/python3.4/site-packages/sitelib-0.3.33-py3.4.egg/sitelib/tools/db/db.py",
line 160, in query
[Tue Sep 30 04:57:31 2014] [error] result = self._connection.query(sql,
*args)
[Tue Sep 30 04:57:31 2014] [error] File
"/var/www/.ve/lib/python3.4/site-packages/py_postgresql-1.1.2.pgpool-py3.4-linux-x86_64.egg/postgresql/driver/pq3.py",
line 1231, in __call__
[Tue Sep 30 04:57:31 2014] [error] return
self._prepare(query)(*parameters)
[Tue Sep 30 04:57:31 2014] [error] File
"/var/www/.ve/lib/python3.4/site-packages/py_postgresql-1.1.2.pgpool-py3.4-linux-x86_64.egg/postgresql/driver/pq3.py",
line 2326, in prepare
[Tue Sep 30 04:57:31 2014] [error] ps._fini()
[Tue Sep 30 04:57:31 2014] [error] File
"/var/www/.ve/lib/python3.4/site-packages/py_postgresql-1.1.2.pgpool-py3.4-linux-x86_64.egg/postgresql/driver/pq3.py",
line 1518, in _fini
[Tue Sep 30 04:57:31 2014] [error] (*head, argtypes, tupdesc, last) =
self._xact.messages_received()
[Tue Sep 30 04:57:31 2014] [error] ValueError: need more than 0 values to
unpack
С Уважением, Сергей Мелехин.
2014-09-30 5:55 GMT+11:00 Muhammad Usama <m.usama at gmail.com>:
> Hi
>
> I have applied your purposed patchs after commenting out CloseStatement on
> line 1490 in postgresql/driver/pq3.py as suggested by you but still gets
> the same error ValueError: need more than 0 values to unpack, when I
> execute your test case with pgpool-II.
>
> I think the real problem is py-postgresql is not properly handling the
> close cursor scenario. *It wrongly issues the ClosePortal packet to the
> server for closing the opened cursor*. which is the cause of real
> problem. The fact that the test case works fine with bare PostgreSQL server
> without involvement of pgpool-II is because of a reason that PostgreSQL
> ignores the Close Portal packets for non existing portals. and when
> py-postgresql issues the close portal command with cursor name, that
> command gets silently ignored by postgres server and test case reports
> success.
>
> But pgpool-II does not ignores the close portal for non existing portals
> and throws an error. Same reason we need to comment out CloseStatement in
> postgresql/driver/pq3.py to get pass the connecting phase with pgpool-II.
>
> So apparently the solution for the problem is to fix the close cursor
> message in py-postgresql. I have tried this by commenting out the code used
> by py-postgresql to close cursor (*postgresql/protocol/client3.py line
> 364*) and the test case works fine after that.
>
> Regards
> Usama
>
> On Mon, Sep 22, 2014 at 10:27 AM, Сергей Мелехин <cpro29a at gmail.com>
> wrote:
>
>> Hello!
>>
>> We are experiencing random failures when calling Connection.proc() with
>> set returning functions through pgpool2.
>> I use py-postgresql-1.1.0 with commented out CloseStatement in line 1490
>> in postgresql/driver/pq3.py, to use it with pgpool2 (3.1.3 and 3.3.2) and
>> postgresql 9.3.5.
>> And it looks like, that there are protocol errors.
>>
>> Here is code that fails:
>>
>> import postgresql
>>
>> URL = "pq://hr:hr@localhost:5434/hr" //using pgpool2 (3.3.2)
>>
>> def main():
>> db = postgresql.open(URL)
>> db.execute("""
>> CREATE OR REPLACE FUNCTION foo()
>> RETURNS SETOF boolean AS
>> $BODY$
>> select true;
>> $BODY$
>> LANGUAGE sql VOLATILE
>> COST 100
>> ROWS 1000;
>> ALTER FUNCTION foo() OWNER TO hr;
>>
>> """)
>> # db.query("select foo()") # works
>> # v = db.proc("foo()")() #works
>> db.proc("foo()")() # does not work
>>
>> for i in range(200):
>> db.query("select 1") //error comes here
>>
>>
>> if __name__ == "__main__":
>> main()
>>
>>
>> And I get one of two errors:
>>
>> Traceback (most recent call last):
>> File "/home/sergey/projects/emply/sitelib/sitelib/tests/error.py", line
>> 28, in <module>
>> main()
>> File "/home/sergey/projects/emply/sitelib/sitelib/tests/error.py", line
>> 24, in main
>> db.query("select 1")
>> File
>> "/home/sergey/projects/emply/.venv/sitelib/lib/python3.4/site-packages/py_postgresql-1.1.0-py3.4-linux-x86_64.egg/postgresql/driver/pq3.py",
>> line 1233, in __call__
>> return self._prepare(query)(*parameters)
>> File
>> "/home/sergey/projects/emply/.venv/sitelib/lib/python3.4/site-packages/py_postgresql-1.1.0-py3.4-linux-x86_64.egg/postgresql/driver/pq3.py",
>> line 2329, in prepare
>> ps._fini()
>> File
>> "/home/sergey/projects/emply/.venv/sitelib/lib/python3.4/site-packages/py_postgresql-1.1.0-py3.4-linux-x86_64.egg/postgresql/driver/pq3.py",
>> line 1521, in _fini
>> (*head, argtypes, tupdesc, last) = self._xact.messages_received()
>> ValueError: need more than 0 values to unpack
>>
>> Or:
>>
>> Traceback (most recent call last):
>> File "/home/sergey/projects/emply/sitelib/sitelib/tests/error.py", line
>> 28, in <module>
>> main()
>> File "/home/sergey/projects/emply/sitelib/sitelib/tests/error.py", line
>> 24, in main
>> db.query("select 1")
>> File
>> "/home/sergey/projects/emply/.venv/sitelib/lib/python3.4/site-packages/py_postgresql-1.1.0-py3.4-linux-x86_64.egg/postgresql/driver/pq3.py",
>> line 1233, in __call__
>> return self._prepare(query)(*parameters)
>> File
>> "/home/sergey/projects/emply/.venv/sitelib/lib/python3.4/site-packages/py_postgresql-1.1.0-py3.4-linux-x86_64.egg/postgresql/driver/pq3.py",
>> line 1573, in __call__
>> c = SingleXactFetch(self, parameters)
>> File
>> "/home/sergey/projects/emply/.venv/sitelib/lib/python3.4/site-packages/py_postgresql-1.1.0-py3.4-linux-x86_64.egg/postgresql/driver/pq3.py",
>> line 868, in __init__
>> Output.__init__(self, '')
>> File
>> "/home/sergey/projects/emply/.venv/sitelib/lib/python3.4/site-packages/py_postgresql-1.1.0-py3.4-linux-x86_64.egg/postgresql/driver/pq3.py",
>> line 655, in __init__
>> self._init()
>> File
>> "/home/sergey/projects/emply/.venv/sitelib/lib/python3.4/site-packages/py_postgresql-1.1.0-py3.4-linux-x86_64.egg/postgresql/driver/pq3.py",
>> line 885, in _init
>> STEP()
>> File
>> "/home/sergey/projects/emply/.venv/sitelib/lib/python3.4/site-packages/py_postgresql-1.1.0-py3.4-linux-x86_64.egg/postgresql/driver/pq3.py",
>> line 2615, in _pq_step
>> pq.step()
>> File
>> "/home/sergey/projects/emply/.venv/sitelib/lib/python3.4/site-packages/py_postgresql-1.1.0-py3.4-linux-x86_64.egg/postgresql/protocol/client3.py",
>> line 420, in step
>> "unexpected PQ transaction state: " + repr(dir)
>> RuntimeError: unexpected PQ transaction state: None
>>
>> We got rid of errors, by making some minor changes in pq3.py:
>>
>>
>> https://github.com/C-Pro/fe/commit/26a360be216975229215d458b27c644e1bd1893b
>>
>> https://github.com/C-Pro/fe/commit/a69da2b05048e7d801cece6a75e4c80a53cc27d4
>>
>> and
>>
>>
>> https://github.com/C-Pro/fe/commit/adb4d98240eeaf250543d2350a5d3c71fb58c5f8
>> to return list, and changed version to automatically pull new version as
>> an app dependency on deployment.
>>
>> All existing tests pass.
>>
>> It would be perfect if you could review changes, because I think tere is
>> misunderstanding of extended protocol between pgpool2 and py-postgresql.
>>
>> With best regards, Sergey Melekhin
>>
>>
>> _______________________________________________
>> pgpool-general mailing list
>> pgpool-general at pgpool.net
>> http://www.pgpool.net/mailman/listinfo/pgpool-general
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.pgpool.net/pipermail/pgpool-general/attachments/20140930/21a8adb1/attachment.htm>
More information about the pgpool-general
mailing list