An issue in JDBC replication API

From: Abbas Butt <abbas(dot)butt(at)enterprisedb(dot)com>
To: pgsql-jdbc(at)lists(dot)postgresql(dot)org
Cc: Zahid Iqbal <zahid(dot)iqbal(at)enterprisedb(dot)com>
Subject: An issue in JDBC replication API
Date: 2020-06-19 20:39:47
Message-ID: CALtH27fNaSRTOFsCFniJ0HQxf3naAfn6MZvdYgrANWvR4Vcdhw@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-jdbc

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

--
--
*Abbas*
Architect

Ph: 92.334.5100153
Skype ID: gabbasb
www.enterprisedb.co <http://www.enterprisedb.com/>m
<http://www.enterprisedb.com/>

*Follow us on Twitter*
@EnterpriseDB

Visit EnterpriseDB for tutorials, webinars, whitepapers
<http://www.enterprisedb.com/resources-community> and more
<http://www.enterprisedb.com/resources-community>

Attachment Content-Type Size
Lithium.tar.gz application/x-gzip 3.0 KB

Responses

Browse pgsql-jdbc by date

  From Date Subject
Next Message Dave Cramer 2020-06-19 23:37:25 Re: An issue in JDBC replication API
Previous Message Vladimir Sitnikov 2020-06-19 16:39:42 [pgjdbc/pgjdbc]