[Pljava-dev] doubtful PL/Java's activity

From: taniguchi(dot)yasu at jp(dot)fujitsu(dot)com (Taniguchi, Yasunori)
To:
Subject: [Pljava-dev] doubtful PL/Java's activity
Date: 2013-12-20 04:51:28
Message-ID: 2AB2177C63D24C43AC3BDE9A3A8F71FC1C86DA16@G01JPEXMBYT02
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pljava-dev

Thank you, Mr. Thomas,

Sorry for my late response.

> The backend is single threaded (each connection runs in it's own process and it's own JVM) so there will never be two functions executing simultanously.

Yes, I understand.
But, multi thread applications (unless using concurrent JDBC call) can run in JavaVM even if postgres backend is single threaded, I think.

After received this mail, I discussed with colleague and recognized :

- PL/Java runs without any problems even if PL/Java's and JavaVM's are compiled as multi thread library.
Single thread compiled application uses standard library which contains thread-unsafe functions.
These thread-unsafe functions uses common global variable between them. Therefore they are thread-unsafe.
On the other hand, multi thread complied application uses standard library consists of thread-safe functions.
Thread-safe functions uses separated global variables.
As above, there is no problem unless any global variable (eg. errno) is passed across between single thread compiled application and multi thread one.

- PL/Java runs without any problems even if multi thread Java applications not using concurrent JDBC call runs.

In addition,
Java multi thread application can run thread-unsafe function in single thread library through JNI.
But, this case is abuse.

Any comments are appreciated.

Regards, taniguchi

-----Original Message-----
From: Thomas Hallgren [mailto:ironjug at gmail.com] On Behalf Of Thomas Hallgren
Sent: Friday, December 13, 2013 3:21 PM
To: Taniguchi, Yasunori
Subject: Re: [Pljava-dev] doubtful PL/Java's activity

On 2013-12-13 02:57, Taniguchi, Yasunori wrote:
> Hi,
>
> Thank you, everyone.
> Excuse me my poor explanation.
> So, I made a figure.
> Look attachment.
> Red arrow in this fig. is unlikely ?
The backend is single threaded (each connection runs in it's own process and it's own JVM) so there will never be two functions executing simultanously.

>
>> You may, of course, have multiple Java threads in the JVM that resides in the PostgreSQL session. But any interaction with the session is serialized, so this isn?t a problem at all.
> I worry about interaction between PostgreSQL and JVM library functions rather than interaction with the session.
Again, PostgreSQL is single threaded. It cannot interact in more than
one thread.

>
>> PL/Java goes to some length in protecting the single threaded PostgreSQL kernel. All accesses to it must be made from the caller thread. Multiple threads > can be used for background tasks but such threads will be completely blocked from accessing the PostgreSQL functions.
>>
>> It works like this:
>> A call is made from PostgreSQL. This call grabs a mutex.
>> During PL/Java execution, only the thread that owns the mutex can call PostgreSQL.
>> When the call eventually returns, the mutex is released.
> If I'm correct, PL/Java is also a single thread library ?
> If so, it would not be a problem.
No, PL/Java is not a single thread library. There is however, never more
than one thread that calls on it and never more than one thread that can
call out from it.

>
>> Java maintenance (garbage collection for instance) will still run in separate threads. If someone should write a finalizer that actually tries to do database access (god forbid), then that finalizer would throw an exception.
> Uh.. It may become a restriction of usage.
> Probably, some restrictions else would exist, doesn't it?

Yes, it is a very deliberate restriction of usage. Don't start new
threads that uses the JDBC driver. Don't use the JDBC driver from a
finalizer. Both those cases would violate the single threaded nature of
the backend.

- thomas

In response to

Responses

Browse pljava-dev by date

  From Date Subject
Next Message Thomas Hallgren 2013-12-20 06:13:50 [Pljava-dev] doubtful PL/Java's activity
Previous Message Hal Hildebrand 2013-12-13 18:54:51 [Pljava-dev] How did I not know of this?