Re: An issue in JDBC replication API

From: Dave Cramer <davecramer(at)postgres(dot)rocks>
To: Abbas Butt <abbas(dot)butt(at)enterprisedb(dot)com>
Cc: pgsql-jdbc(at)lists(dot)postgresql(dot)org, Zahid Iqbal <zahid(dot)iqbal(at)enterprisedb(dot)com>
Subject: Re: An issue in JDBC replication API
Date: 2020-06-20 14:37:38
Message-ID: CADK3HHL4Huw=rr4Mj1oQeR3dF0FO2yqutPwmq4aoXby4Utqi5g@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-jdbc

Dave Cramer
www.postgres.rocks

On Fri, 19 Jun 2020 at 19:37, Dave Cramer <davecramer(at)postgres(dot)rocks> wrote:

> Hi Abbas,
>
> Thanks for this I seem to recall something about this.
>
> Dave Cramer
> www.postgres.rocks
>
>
> On Fri, 19 Jun 2020 at 16:40, Abbas Butt <abbas(dot)butt(at)enterprisedb(dot)com>
> wrote:
>
>> Hi,
>> I have found that the JDBC replication API does not handle the keep alive
>> messages sent by the server correctly.
>> A replication client cannot ignore even a single keep alive message from
>> the server and it must respond to it.
>> If it does not the server will stop WAL sender with the following error:
>> LOG: terminating walsender process due to replication timeout
>> LOG: disconnection: session time: 0:02:00.173 user=replicant
>> database=edb host=127.0.0.1 port=57900
>>
>> and this is exactly what is happening when I use JDBC replication API.
>> The JDBC driver is ignoring the server's keep alive messages and hence
>> the server stops the WAL sender and drops the connection.
>>
>> Attached please find a sample program that I have mostly copied from the
>> documentation available here
>>
>> https://jdbc.postgresql.org/documentation/head/replication.html#logical-replication
>>
>> When we run this program and do not do any activity on the database
>> server (I have tested with server version 12 and JDBC 42.2.14), after some
>> time (wal_sender_timeout/2 seconds to be precise) the server stops the
>> WAL sender process and drops the connection.
>> To use the program follow these steps:
>>
>> Issue the following commands to the database server:
>> ./createuser --superuser --replication -h 127.0.0.1 -p 7777 -U postgres
>> replicant
>> select pg_drop_replication_slot('radium');
>> CREATE TABLE numbers(a int PRIMARY KEY, b varchar(255));
>> GRANT SELECT on numbers to replicant;
>> INSERT INTO numbers VALUES(10, 'ten'),(20,'twenty'),(30,'thirty');
>> CREATE PUBLICATION barium for TABLE numbers;
>>
>> To run the program use the following commands:
>> mvn clean
>> mvn package
>> java -cp
>> target/Lithium-1.0-SNAPSHOT.jar:/home/abbas/tmp/postgresql-42.2.14.jar
>> com.edb.App
>>
>> If my analysis is correct, can we please have this issue fixed in the
>> driver?
>>
>> Best Regards
>>
>

I'll have a look, but we do attempt to handle it here
https://github.com/pgjdbc/pgjdbc/blob/f89e62cdce4895f163dc95353cd31614347624b6/pgjdbc/src/main/java/org/postgresql/core/v3/replication/V3PGReplicationStream.java#L137

Dave
>>
>

In response to

Responses

Browse pgsql-jdbc by date

  From Date Subject
Next Message Abbas Butt 2020-06-20 18:23:36 Re: An issue in JDBC replication API
Previous Message Dave Cramer 2020-06-19 23:37:25 Re: An issue in JDBC replication API