Haribabu Kommi wrote: > On Thu, Jul 19, 2018 at 10:59 PM Haribabu Kommi <kommi.harib...@gmail.com> > wrote: > > On Wed, Jul 18, 2018 at 10:53 PM Robert Haas <robertmh...@gmail.com> wrote: > > > On Wed, Jul 4, 2018 at 9:14 AM, Laurenz Albe <laurenz.a...@cybertec.at> > > > wrote: > > > > What about keeping the first successful connection open and storing > > > > it in a > > > > variable if we are in "prefer-read" mode. > > > > If we get the read-only connection we desire, close that cached > > > > connection, > > > > otherwise use it. > > > > > > I like this idea. If I recall correctly, the logic in this area is > > > getting pretty complex, so we might need to refactor it for better > > > readability and maintainability. > > > > OK. I will work on the code refactoring first and then provide the > > prefer-read option on top it. > > commits d1c6a14bacf and 5ca00774194 have refactored the logic > of handling the different connection states. > > Attached is a rebased patch after further refactoring the new option > code for easier maintenance.
The code is much more readable now, thanks. --- a/src/interfaces/libpq/libpq-int.h +++ b/src/interfaces/libpq/libpq-int.h @@ -397,6 +397,7 @@ struct pg_conn int nconnhost; /* # of hosts named in conn string */ int whichhost; /* host we're currently trying/connected to */ pg_conn_host *connhost; /* details about each named host */ + int read_write_host_index; /* index for first read-write host in connhost */ /* Connection data */ pgsocket sock; /* FD for socket, PGINVALID_SOCKET if I think the comment could use more love. This would be the place to document the logic: Initial value is -1, then then index of the first working server we found, and -2 for the second attempt to connect to that server. I notice that you don't keep the first connection open, but close and reopen it. I guess that is a matter of taste, but it would be easier on resources (and reduce connection time) if the connection were kept open. Admittedly, it would be more difficult and might further complicate code that is not very clear as it is. If you work on some more on the comment above, I will mark it as ready for committer. Yours, Laurenz Albe