Re: [PATCH] Prevent hanging on unreachable hosts on startup - Mailing list pgsql-bugs

From Bruce Momjian
Subject Re: [PATCH] Prevent hanging on unreachable hosts on startup
Date
Msg-id 20120827032741.GE28780@momjian.us
Whole thread Raw
In response to Re: [PATCH] Prevent hanging on unreachable hosts on startup  (Ryan Kelly <rpkelly22@gmail.com>)
Responses Re: [PATCH] Prevent hanging on unreachable hosts on startup  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-bugs
On Thu, Jan  5, 2012 at 09:23:55AM -0500, Ryan Kelly wrote:
> On Wed, Jan 04, 2012 at 09:36:57PM -0500, Tom Lane wrote:
> > "Ryan P. Kelly" <rpkelly22@gmail.com> writes:
> > > The signal handler installed by setup_cancel_handler() will ignore
> > > attempts to exit psql should a host be unreachable.
> >
> > Hm.  That may be worth doing something about, but the proposed patch
> > seems more like a quick-and-dirty hack than a solution.  The main
> > thing I don't like about it is that if we care about this scenario
> > during initial startup, we should also care about it during a \c
> > command, but just delaying the installation of the signal handler
> > won't fix that case.
> Sure, but do you still think moving the signal handler down is correct?
> I've attached another patch that handles interrupting \c. I also noticed
> there appears to be what looks like duplication of code in startup.c and
> command.c in main() and do_connect() respectively. I'm wondering if I
> they should be made to share the same code which (with my patch) would
> then mean the signal handler could be left where it was.
>
> > More generally, what if the server becomes unreachable mid-session?
> > I'm not sure how much there is to be done about that case, since
> > there's probably no good way to distinguish it from a query that
> > takes a really long time.  But if we're going to think about this,
> > we might as well think about all the cases.
> Well in this case we can still interrupt the query, no? This will drop
> us back into the prompt, where we can safely \q.

Tom, can you comment on this patch because you commented on the previous
version?  Thanks.

---------------------------------------------------------------------------


> >From 8f9d0b5088021d944aceac65a96d7bd0c24aa0c6 Mon Sep 17 00:00:00 2001
> From: "Ryan P. Kelly" <rpkelly22@gmail.com>
> Date: Thu, 5 Jan 2012 09:13:38 -0500
> Subject: [PATCH] Allow interrupting hanging \c connection attempts
>
> ---
>  src/bin/psql/command.c |   17 +++++++++++++----
>  1 files changed, 13 insertions(+), 4 deletions(-)
>
> diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c
> index 69fac83..845705d 100644
> --- a/src/bin/psql/command.c
> +++ b/src/bin/psql/command.c
> @@ -1516,7 +1516,7 @@ static bool
>  do_connect(char *dbname, char *user, char *host, char *port)
>  {
>      PGconn       *o_conn = pset.db,
> -               *n_conn;
> +               *n_conn = NULL;
>      char       *password = NULL;
>
>      if (!dbname)
> @@ -1570,7 +1570,13 @@ do_connect(char *dbname, char *user, char *host, char *port)
>          keywords[7] = NULL;
>          values[7] = NULL;
>
> -        n_conn = PQconnectdbParams(keywords, values, true);
> +        if (sigsetjmp(sigint_interrupt_jmp, 1) != 0) {
> +            /* got here with longjmp */
> +        } else {
> +            sigint_interrupt_enabled = true;
> +            n_conn = PQconnectdbParams(keywords, values, true);
> +            sigint_interrupt_enabled = false;
> +        }
>
>          free(keywords);
>          free(values);
> @@ -1600,7 +1606,8 @@ do_connect(char *dbname, char *user, char *host, char *port)
>           */
>          if (pset.cur_cmd_interactive)
>          {
> -            psql_error("%s", PQerrorMessage(n_conn));
> +            if (n_conn)
> +                psql_error("%s", PQerrorMessage(n_conn));
>
>              /* pset.db is left unmodified */
>              if (o_conn)
> @@ -1608,7 +1615,9 @@ do_connect(char *dbname, char *user, char *host, char *port)
>          }
>          else
>          {
> -            psql_error("\\connect: %s", PQerrorMessage(n_conn));
> +            if (n_conn)
> +                psql_error("\\connect: %s", PQerrorMessage(n_conn));
> +
>              if (o_conn)
>              {
>                  PQfinish(o_conn);
> --
> 1.7.7.4
>

>
> --
> Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-bugs


--
  Bruce Momjian  <bruce@momjian.us>        http://momjian.us
  EnterpriseDB                             http://enterprisedb.com

  + It's impossible for everything to be true. +

pgsql-bugs by date:

Previous
From: Bruce Momjian
Date:
Subject: Re: BUG #6372: Error while creating database with fsync parameter as on incase of CIFS
Next
From: 沈前卫
Date:
Subject: Re: BUG #7504: corrupted statistics file "pg_stat_tmp/pgstat.stat"