[Pgpool-general] pgpool 2.2.4: DEALLOCATED children

Tatsuo Ishii ishii at sraoss.co.jp
Sat Sep 26 07:10:43 UTC 2009


Oh ok. Yes if the backend returns E, instead of C, the callback is not
called. You are right. Also I find that if the callback is called to
remove, say S_1, del_prepared_list() does not remove next prepared
objectm say S_2. So calling del_prepared_list() always seems to be
harmless. I will apply your patches with minor modifications (mostly
just add comments). Thanks!
--
Tatsuo Ishii
SRA OSS, Inc. Japan

>  It seems that under certain circumstances the callback that is
> registered in SimpleQuery() is not called. Does
> SimpleForwardToFrontend() and so del_prepared_list() not get called
> when an error (kind 'E') is received from the backend ?
> 
>  This log fragment shows how two statements where deallocated and
> deleted from prepared_list, but then the next one wasn't after getting
> an error (kind 'E') response from the backend, which causes the
> process to get into an infinite loop.
> 
> 
> 
> 2009-09-26 00:45:31 DEBUG: pid 24289: reset_backend: entrando con qcnt 3
> 2009-09-26 00:45:31 DEBUG: pid 24289: reset_backend: qn = 3
> 2009-09-26 00:45:31 DEBUG: pid 24289: reset_backend: prepared_list.cnt = 4
> 2009-09-26 00:45:31 LOG:   pid 24289: statement: DEALLOCATE "S_1"
> 2009-09-26 00:45:31 DEBUG: pid 24289: detect_error: kind: C
> 2009-09-26 00:45:31 DEBUG: pid 24289: detect_error: kind: C
> 2009-09-26 00:45:31 DEBUG: pid 24289: detect_error: kind: C
> 2009-09-26 00:45:31 DEBUG: pid 24289: detect_error: kind: C
> 2009-09-26 00:45:31 DEBUG: pid 24289: detect_error: kind: C
> 2009-09-26 00:45:31 DEBUG: pid 24289: detect_error: kind: C
> 2009-09-26 00:45:31 DEBUG: pid 24289: detect_error: kind: C
> 2009-09-26 00:45:31 DEBUG: pid 24289: detect_error: kind: C
> 2009-09-26 00:45:31 DEBUG: pid 24289: reset_backend: entrando con qcnt 4
> 2009-09-26 00:45:31 DEBUG: pid 24289: reset_backend: qn = 3
> 2009-09-26 00:45:31 DEBUG: pid 24289: reset_backend: prepared_list.cnt = 3
> 2009-09-26 00:45:31 LOG:   pid 24289: statement: DEALLOCATE "S_2"
> 2009-09-26 00:45:31 DEBUG: pid 24289: detect_error: kind: C
> 2009-09-26 00:45:31 DEBUG: pid 24289: detect_error: kind: C
> 2009-09-26 00:45:31 DEBUG: pid 24289: detect_error: kind: C
> 2009-09-26 00:45:31 DEBUG: pid 24289: detect_error: kind: C
> 2009-09-26 00:45:31 DEBUG: pid 24289: detect_error: kind: C
> 2009-09-26 00:45:31 DEBUG: pid 24289: detect_error: kind: C
> 2009-09-26 00:45:31 DEBUG: pid 24289: detect_error: kind: C
> 2009-09-26 00:45:31 DEBUG: pid 24289: detect_error: kind: C
> 2009-09-26 00:45:31 DEBUG: pid 24289: reset_backend: entrando con qcnt 5
> 2009-09-26 00:45:31 DEBUG: pid 24289: reset_backend: qn = 3
> 2009-09-26 00:45:31 DEBUG: pid 24289: reset_backend: prepared_list.cnt = 2
> 2009-09-26 00:45:31 LOG:   pid 24289: statement: DEALLOCATE "S_1"
> 2009-09-26 00:45:31 DEBUG: pid 24289: detect_error: kind: C
> 2009-09-26 00:45:31 DEBUG: pid 24289: detect_error: kind: C
> 2009-09-26 00:45:31 DEBUG: pid 24289: detect_error: kind: E
> 2009-09-26 00:45:31 DEBUG: pid 24289: detect_error: kind: E
> 2009-09-26 00:45:31 DEBUG: pid 24289: detect_error: kind: E
> 2009-09-26 00:45:31 DEBUG: pid 24289: detect_error: kind: E
> 2009-09-26 00:45:31 DEBUG: pid 24289: detect_error: kind: Z
> 2009-09-26 00:45:31 DEBUG: pid 24289: detect_error: kind: Z
> 2009-09-26 00:45:31 DEBUG: pid 24289: detect_error: kind: C
> 2009-09-26 00:45:31 DEBUG: pid 24289: detect_error: kind: C
> 2009-09-26 00:45:31 DEBUG: pid 24289: reset_backend: entrando con qcnt 6
> 2009-09-26 00:45:31 DEBUG: pid 24289: reset_backend: qn = 3
> 2009-09-26 00:45:31 DEBUG: pid 24289: reset_backend: prepared_list.cnt = 2
> 2009-09-26 00:45:31 LOG:   pid 24289: statement: DEALLOCATE "S_1"
> 2009-09-26 00:45:31 DEBUG: pid 24289: detect_error: kind: C
> 2009-09-26 00:45:31 DEBUG: pid 24289: detect_error: kind: C
> 2009-09-26 00:45:31 DEBUG: pid 24289: detect_error: kind: E
> 2009-09-26 00:45:31 DEBUG: pid 24289: detect_error: kind: E
> 2009-09-26 00:45:31 DEBUG: pid 24289: detect_error: kind: E
> 2009-09-26 00:45:31 DEBUG: pid 24289: detect_error: kind: E
> 2009-09-26 00:45:31 DEBUG: pid 24289: detect_error: kind: Z
> 2009-09-26 00:45:31 DEBUG: pid 24289: detect_error: kind: Z
> 2009-09-26 00:45:31 DEBUG: pid 24289: detect_error: kind: C
> 2009-09-26 00:45:31 DEBUG: pid 24289: detect_error: kind: C
> 2009-09-26 00:45:31 DEBUG: pid 24289: reset_backend: entrando con qcnt 7
> 2009-09-26 00:45:31 DEBUG: pid 24289: reset_backend: qn = 3
> 2009-09-26 00:45:31 DEBUG: pid 24289: reset_backend: prepared_list.cnt = 2
> 
> 
>  I'll try to do more tests in order to produce a patch for this. In
> the meantime I'm attaching the full log for farther examination.
> 
> 
> On Fri, Sep 25, 2009 at 8:47 PM, Tatsuo Ishii <ishii at sraoss.co.jp> wrote:
> > Hum.
> >
> > --- pool_process_query.c        23 Sep 2009 11:39:10 -0000      1.141.2.20
> > +++ pool_process_query.c        25 Sep 2009 19:48:39 -0000
> > @@ -2178,6 +2178,7 @@
> >                        reset_prepared_list(&prepared_list);
> >                        return -1;
> >                }
> > +               del_prepared_list(&prepared_list, prepared_list.portal_list[0]);
> >                return 1;
> >        }
> >
> > This part does not look good.
> >
> >                /* Delete from prepared list */
> >                if (send_deallocate(backend, &prepared_list, 0))
> >                {
> >                        /* Deallocate failed. We are in unknown state. Ask caller
> >                         * to reset backend connection.
> >                         */
> >                        reset_prepared_list(&prepared_list);
> >                        return -1;
> >                }
> >                del_prepared_list(&prepared_list, prepared_list.portal_list[0]);
> >
> > send_deallocate() not only sends DEALLOCATE to the backend but
> > register a callback to call del_prepared_list() after DEALLOCATE
> > succeeds. Thus if send_deallocate() succeeded, del_prepared_list()
> > should have been called. Calling del_prepared_list() in your pacth is
> > not only neccessary but removes prepared object withput sending
> > DEALLOCATE to backend, no?
> > --
> > Tatsuo Ishii
> > SRA OSS, Inc. Japan
> >
> >>  Tatsuo,
> >>
> >>  I'm attaching a single patch with both of the changes I sent
> >> previously. It was made against the V2_2_STABLE branch (not HEAD),
> >> because it depends on the patch from Sep 23 11:39:10.
> >>
> >>  Thanks for all your patience.
> >>
> >>  Cheers
> >>
> >> On Fri, 2009-09-25 at 21:23 +0900, Tatsuo Ishii wrote:
> >> > > Hi Tatsuo,
> >> > >
> >> > > filtered logs are attached.
> >> >
> >> > Thanks.
> >> >
> >> > > Can you validate the patches applied?
> >> >
> >> > The patches look good. I'm going to apply.
> >> > --
> >> > Tatsuo Ishii
> >> > SRA OSS, Inc. Japan
> >


More information about the Pgpool-general mailing list