[Pgpool-general] is there a way out of degeneration mode

Michael Ulitskiy mulitskiy at acedsl.com
Thu Jan 19 19:42:09 GMT 2006


Thanks for looking into this.
Unfortunately the patch doesn't work. Below is pgpool debug output when postgres
sends a notify (after UPDATE test_table) and there's active listener.
 
DEBUG: pid 3541: read kind from backend A
DEBUG: pid 3541: pool_process_query: waiting for secondary for data ready
ERROR: pid 3541: pool_check_fd: data is not ready tp->tv_sec 5 tp->tp_usec 5000000
ERROR: pid 3541: pool_process_query: secondary data is not ready at synchronous point. abort this session
ERROR: pid 3541: pool_process_query: kind does not match between backends master(A) secondary()
LOG:   pid 3541: do_child: exits with status 1 due to error
DEBUG: pid 3498: reap_handler called
DEBUG: pid 3498: child 3541 exits with status 256 by signal 0
DEBUG: pid 3545: I am 3545
DEBUG: pid 3498: fork a new child pid 3545

Client that was listening for the notifies throwing the following error at the next query:

users=# select 1;
ERROR:  kind mismatch between backends
HINT:  check data consistency between master and secondary
server closed the connection unexpectedly
        This probably means the server terminated abnormally
        before or while processing the request.
The connection to the server was lost. Attempting reset: Succeeded.

Thanks,
Michael


On Wednesday 18 January 2006 06:30 pm, Tatsuo Ishii wrote:
> > I see where there problem is. Sniffing shows it very clearly.
> > When postgres sends asynchronous notification to pgpool it
> > doesn't forward it to the client right away, but holds it until client
> > requests something. Then it sends it along with a query result.
> > I.e. you have to poll pgpool for notifies performing something like
> > 'select 1' or any other query. 
> > So it works in your test and it works in my script if I add a query in the
> > polling cycle. 
> > It's not very good because instead of polling local socket I have
> > to issue a query that is actually executed on the backend server.
> > Any way to have pgpool forward notifies  asynchronously?
> > Thanks,
> 
> Oh, I got it. pgpool should process incoming notify messages from
> backend while waiting for query from frontend.
> 
> Can you try following patches?
> 
> *** pool_process_query.c 5 Jan 2006 13:08:44 -0000 1.10
> --- pool_process_query.c 18 Jan 2006 23:25:33 -0000
> ***************
> *** 857,863 ****
> --- 857,866 ----
>     master_slave_dml = 0;
>    }
>   
> + #ifdef NOT_USED
>    return ProcessFrontendResponse(frontend, backend);
> + #endif
> +  return POOL_CONTINUE;
>   }
>   
> --
> Tatsuo Ishii
> SRA OSS, Inc. Japan
> 


More information about the Pgpool-general mailing list