[Pgpool-general] Error "kind does not match between backends"

David Boreham david_list at boreham.org
Tue Feb 7 17:12:21 GMT 2006


>I'll be waiting for your test case. 
>
>The only case I can think of is SELECT without load balancing.
>  
>
Hi, and apologies for the delay. I had three teeth pulled out on Friday
and it's taken until today for me to get drug free. Anyway, I began
working on reproducing the problem I previously described and have
hit another similar issue first. I believe I've seen this one too before.

So, this is with postgresql 8.1.2, pgpool 3.0 and slony 1.1.5.
I built and installed postgresql and slony on two machines:
'cougar' and buffalo'. buffalo is the master. pgpool is running
on buffalo, configured to run in master_slave mode with or without
load balancing (the results are the same in this case).

I see the problem with any select query, but it happens with
'psql -l' which nicely shows the result without needing to
get into our tables and so on. Here I can query the
two backends directly:

[david at buffalo ~]$ psql -h buffalo -p 6666  -l
      List of databases
   Name    | Owner | Encoding
-----------+-------+----------
 postgres  | david | UTF8
 template0 | david | UTF8
 template1 | david | UTF8
(4 rows)

[david at buffalo ~]$ psql -h cougar -p 6666  -l
      List of databases
   Name    | Owner | Encoding
-----------+-------+----------
 postgres  | david | UTF8
 template0 | david | UTF8
 template1 | david | UTF8
(4 rows)

Now, via pgpool:

[david at buffalo ~]$ psql -h buffalo -p 9999  -l
psql: server closed the connection unexpectedly
        This probably means the server terminated abnormally
        before or while processing the request.

Here is the debug output from pgpool:

2006-02-07 09:48:34 DEBUG: pid 14062: I am 14062 accept fd 6
2006-02-07 09:48:34 DEBUG: pid 14062: Protocol Major: 1234 Minor: 5679 
database:  user:
2006-02-07 09:48:34 DEBUG: pid 14062: SSLRequest: sent N; retry startup
2006-02-07 09:48:34 DEBUG: pid 14062: Protocol Major: 3 Minor: 0 
database: template1 user: david
2006-02-07 09:48:34 DEBUG: pid 14062: pool_read_message_length: lenghth: 8
2006-02-07 09:48:34 DEBUG: pid 14062: pool_read_message_length2: master 
lenghth: 25
2006-02-07 09:48:34 DEBUG: pid 14062: name: client_encoding value: UTF8
2006-02-07 09:48:34 DEBUG: pid 14062: secondary name: client_encoding 
value: UTF8
2006-02-07 09:48:34 DEBUG: pid 14062: pool_read_message_length2: master 
lenghth: 23
2006-02-07 09:48:34 DEBUG: pid 14062: name: DateStyle value: ISO, MDY
2006-02-07 09:48:34 DEBUG: pid 14062: secondary name: DateStyle value: 
ISO, MDY
2006-02-07 09:48:34 DEBUG: pid 14062: pool_read_message_length2: master 
lenghth: 26
2006-02-07 09:48:34 DEBUG: pid 14062: name: integer_datetimes value: off
2006-02-07 09:48:34 DEBUG: pid 14062: secondary name: integer_datetimes 
value: off
2006-02-07 09:48:34 DEBUG: pid 14062: pool_read_message_length2: master 
lenghth: 20
2006-02-07 09:48:34 DEBUG: pid 14062: name: is_superuser value: on
2006-02-07 09:48:34 DEBUG: pid 14062: secondary name: is_superuser value: on
2006-02-07 09:48:34 DEBUG: pid 14062: pool_read_message_length2: master 
lenghth: 25
2006-02-07 09:48:34 DEBUG: pid 14062: name: server_encoding value: UTF8
2006-02-07 09:48:34 DEBUG: pid 14062: secondary name: server_encoding 
value: UTF8
2006-02-07 09:48:34 DEBUG: pid 14062: pool_read_message_length2: master 
lenghth: 25
2006-02-07 09:48:34 DEBUG: pid 14062: name: server_version value: 8.1.2
2006-02-07 09:48:34 DEBUG: pid 14062: secondary name: server_version 
value: 8.1.2
2006-02-07 09:48:34 DEBUG: pid 14062: pool_read_message_length2: master 
lenghth: 32
2006-02-07 09:48:34 DEBUG: pid 14062: name: session_authorization value: 
david
2006-02-07 09:48:34 DEBUG: pid 14062: secondary name: 
session_authorization value: david
2006-02-07 09:48:34 DEBUG: pid 14062: pool_read_message_length2: master 
lenghth: 36
2006-02-07 09:48:34 DEBUG: pid 14062: name: standard_conforming_strings 
value: off
2006-02-07 09:48:34 DEBUG: pid 14062: secondary name: 
standard_conforming_strings value: off
2006-02-07 09:48:34 DEBUG: pid 14062: pool_read_message_length2: master 
lenghth: 20
2006-02-07 09:48:34 DEBUG: pid 14062: name: TimeZone value: Navajo
2006-02-07 09:48:34 DEBUG: pid 14062: secondary name: TimeZone value: Navajo
2006-02-07 09:48:34 DEBUG: pid 14062: pool_read_message_length: lenghth: 12
2006-02-07 09:48:34 DEBUG: pid 14062: read kind from backend pending 
data Z len: 5 po: 263
2006-02-07 09:48:34 DEBUG: pid 14062: pool_process_query: kind from 
backend: Z
2006-02-07 09:48:34 DEBUG: pid 14062: pool_read_message_length: lenghth: 5
2006-02-07 09:48:34 ERROR: pid 14062: pool_read_message_length: length 
does not match between backends master(5) secondary(1509949440)

I believe the call to pool_read_message_length() happens at a place in 
pool_process_query() where
nothing has been sent to the secondary, and hence the length read from 
it is bogus. I'm not sure why
the poll_read() is succeeding though.

Let me know if you need more information. I'd be happy to debug this myself
but I really don't feel that I know how the code is supposed to work at 
this point,
which results in much time chasing red herrings :(

Thanks !











More information about the Pgpool-general mailing list