6.X vacuum bug found & fixed - Mailing list pgsql-hackers

From Vadim B. Mikheev
Subject 6.X vacuum bug found & fixed
Date
Msg-id 34F4A175.94C80413@sable.krasnoyarsk.su
Whole thread Raw
List pgsql-hackers
I got assertion in my 6.2.1 production data base today.
Patch for 6.2.1 follows and is on ftp site too.

Vadim
*** vacuum.c.orig    Wed Feb 25 09:44:08 1998
--- vacuum.c    Wed Feb 25 09:58:17 1998
***************
*** 1144,1166 ****
                      /*
                       * If no one tuple can't be added to this page -
                       * remove page from Fvpl. - vadim 11/27/96
                       */
!                     if (!vc_enough_space(ToVpd, vacrelstats->min_tlen))
                      {
!                         if (ToVpd != Fvplast)
!                         {
!                             Assert(Fnpages > ToVpI + 1);
!                             memmove(Fvpl->vpl_pgdesc + ToVpI,
!                                     Fvpl->vpl_pgdesc + ToVpI + 1,
!                             sizeof(VPageDescr *) * (Fnpages - ToVpI - 1));
!                         }
!                         Assert(Fnpages >= 1);
                          Fnpages--;
!                         if (Fnpages == 0)
!                             break;
!                         /* get prev reapped page from Fvpl */
!                         Fvplast = Fvpl->vpl_pgdesc[Fnpages - 1];
!                         Fblklast = Fvplast->vpd_blkno;
                      }
                  }
                  for (i = 0; i < Fnpages; i++)
--- 1144,1162 ----
                      /*
                       * If no one tuple can't be added to this page -
                       * remove page from Fvpl. - vadim 11/27/96
+                      *
+                      * But we can't remove last page - this is our
+                      * "show-stopper" !!!    - vadim 02/25/98
                       */
!                     if (ToVpd != Fvplast &&
!                         !vc_enough_space(ToVpd, vacrelstats->min_tlen))
                      {
!                         Assert(Fnpages > ToVpI + 1);
!                         memmove(Fvpl->vpl_pgdesc + ToVpI,
!                                 Fvpl->vpl_pgdesc + ToVpI + 1,
!                                 sizeof(VPageDescr *) * (Fnpages - ToVpI - 1));
                          Fnpages--;
!                         Assert (Fvplast == Fvpl->vpl_pgdesc[Fnpages - 1]);
                      }
                  }
                  for (i = 0; i < Fnpages; i++)

pgsql-hackers by date:

Previous
From: "Michael J. Rogan"
Date:
Subject: SELECT currval('SEQ') broken?
Next
From: "Vadim B. Mikheev"
Date:
Subject: Re: [HACKERS] Open 6.3 issues