Re: FastPath blocked when ERROR is thrown

Lists: pgsql-jdbc
From: "Yi Lin" <ylin30(at)cs(dot)mcgill(dot)ca>
To: pgsql-jdbc(at)postgresql(dot)org
Subject: Re: FastPath blocked when ERROR is thrown
Date: 2006-04-12 01:07:13
Message-ID: 61065.65.92.138.65.1144804033.squirrel@mail.cs.mcgill.ca
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-jdbc

HI Kris Jurka:

>> I used java API FastPath.fastpath(fid, ...) to call a C function
>> PGfn(conn, fid,...) in the kernal. But if there is an exception (i.e.,
>> ERROR messages is thrown in the backend due to elog(ERROR, ...)), the
>> FastPath.fastpath(fid, ..) is blocked and never returns.
>>
>
> The attached code runs fine with the cvs jdbc driver and a 8.0.7 server.
> You haven't mentioned your versions, but this code hasn't changed recently
> so anything relatively new should be fine.
>

I am using a modified version of Postgresql 7.2. It was modified by adding
Writeset functionality needed by replication such as Postgres-R. The
function Fastpath.fastpath(2075, ..) -> PQfn(conn, 2075, ..) in the
attached codes will trigger a non-standard function putWriteset()
implemented by one previous student in my lab. So I don't think you tested
the attached codes against the PQfn(..) which I am worried about.

It seems to me that the exception caused by elog(ERROR, ..) is not thrown
upto Fastpath.fastpath(2075, ..). But I know so little about the kernal of
postgresql that I can't trace the bug. Could u please give me some hints
(e.g., the functions or files to examinate)? I am going to check if the C
version PQfn(..) will be blocked by ERROR or not.

> How do you know the function is erroring out? What does the server log
> say?

I intentionally inserted a tuple twice in two separated txns hence the
second insertion txn would cause an ERROR message. And then the function
fastpath(..) gets blocked forever. The error message is sth like:

ERROR: can't insert the same key to index t_a_pk_index twice. Tuple exists
already. To abort the transaction (No Error).

Sorry I don't know how to read server logs at all.

thanks a lot!

Yi

>
> Kris Jurka

=======================================
Yi Lin

Ph.D. candidate
School of Computer Science
McGill University
Montreal, Quebec,Canada
URL: http://www.cs.mcgill.ca/~ylin30/

\\\ $ ///
@ @
======o0o==0==o0o======================


From: Kris Jurka <books(at)ejurka(dot)com>
To: Yi Lin <ylin30(at)cs(dot)mcgill(dot)ca>
Cc: pgsql-jdbc(at)postgresql(dot)org
Subject: Re: FastPath blocked when ERROR is thrown
Date: 2006-04-12 18:20:57
Message-ID: Pine.BSO.4.63.0604121114460.9053@leary2.csoft.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-jdbc

On Tue, 11 Apr 2006, Yi Lin wrote:

> I am using a modified version of Postgresql 7.2. It was modified by adding
> Writeset functionality needed by replication such as Postgres-R. The
> function Fastpath.fastpath(2075, ..) -> PQfn(conn, 2075, ..) in the
> attached codes will trigger a non-standard function putWriteset()

I don't know how to help you. You've got a very non-standard postgresql
version and are doing unusual things with it (fastpath calls). Unless you
can demonstrate that the JDBC driver is doing something wrong you should
ask on another list, perhaps a postgres-r specific one.

Kris Jurka