Thread: Bug receiving NotificationResponse Message v3

Bug receiving NotificationResponse Message v3

From
Hans Näther
Date:
Hello,

I found a problem in the current jdbc driver. My application receives
asynchronous notification messages from the backend. Using postgresql
7.1, it works. When I switch to postgresql 7.4, it doesn't work anymore.
An exception postgresql.con.type is thrown in
org.postgresql.core.QueryExecutor.executeV3. This is because 7.1 uses
protocol version 2 and 7.4 uses protocol version 3. In version 3, the
message format has changed, the message contains additional data
(message length, additional information) => see
http://www.postgresql.org/docs/current/interactive/protocol-message-formats.html
under NotificationResponse.

So the function executeV3 needs to be changed, I propose the following
change:

... (line 129):
switch (c)
{
   case 'A': // Asynchronous Notify
     int msglen = pgStream.ReceiveInteger(4); // added
     int pid = pgStream.ReceiveInteger(4);
     String msg = pgStream.ReceiveString(connection.getEncoding());
     String param = pgStream.ReceiveString(connection.getEncoding()); //
added
     connection.addNotification(new
org.postgresql.core.Notification(msg, pid));
     break;
case 'B':    // Binary Data Transfer
...


regards
Hans

Re: Bug receiving NotificationResponse Message v3

From
Kris Jurka
Date:

On Wed, 28 Jan 2004, [ISO-8859-1] Hans N�ther wrote:

> Hello,
>
> I found a problem in the current jdbc driver. My application receives
> asynchronous notification messages from the backend. Using postgresql
> 7.1, it works. When I switch to postgresql 7.4, it doesn't work anymore.
> An exception postgresql.con.type is thrown in
> org.postgresql.core.QueryExecutor.executeV3. This is because 7.1 uses
> protocol version 2 and 7.4 uses protocol version 3. In version 3, the
> message format has changed, the message contains additional data
> (message length, additional information) => see
> http://www.postgresql.org/docs/current/interactive/protocol-message-formats.html
> under NotificationResponse.
>
> So the function executeV3 needs to be changed, I propose the following
> change:
>
> ... (line 129):
> switch (c)
> {
>    case 'A': // Asynchronous Notify
>      int msglen = pgStream.ReceiveInteger(4); // added
>      int pid = pgStream.ReceiveInteger(4);
>      String msg = pgStream.ReceiveString(connection.getEncoding());
>      String param = pgStream.ReceiveString(connection.getEncoding()); //
> added
>      connection.addNotification(new
> org.postgresql.core.Notification(msg, pid));
>      break;
> case 'B':    // Binary Data Transfer
> ...

Good catch.  I've applied the attached patch to the gborg cvs driver.  I'm
not sure how well it will apply to the 7.4 version.  This problem was also
present in the notification receiving in fastpath.  Further the pid
field was being read in the wrong byte order.

Kris Jurka



Re: Bug receiving NotificationResponse Message v3

From
Kris Jurka
Date:

On Wed, 28 Jan 2004, Kris Jurka wrote:

> Good catch.  I've applied the attached patch to the gborg cvs driver.  I'm
> not sure how well it will apply to the 7.4 version.  This problem was also
> present in the notification receiving in fastpath.  Further the pid
> field was being read in the wrong byte order.
>

With the actual patch.

Kris Jurka


Attachment