]> granicus.if.org Git - postgresql/commitdiff
Fix miscalculation of remaining free space during tuple chain moving.
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 31 Oct 2002 19:25:29 +0000 (19:25 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 31 Oct 2002 19:25:29 +0000 (19:25 +0000)
Only affects machines where MAXALIGN > 4, and is a boundary-condition
case even there, but still surprising that it's not been identified
before.  Also reduce tuple chain move give-up messages from WARNING
to DEBUG1, since they are not unexpected conditions.

src/backend/commands/vacuum.c

index 160289c91e052da9c5319842cfac2b20ee911ba4..51082689250d264a96a7c340b0399a1bdcea8817 100644 (file)
@@ -13,7 +13,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.243 2002/10/21 22:06:19 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.244 2002/10/31 19:25:29 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1079,7 +1079,7 @@ scan_heap(VRelStats *vacrelstats, Relation onerel,
                                 relname, blkno);
                        PageInit(page, BufferGetPageSize(buf), 0);
                        vacpage->free = ((PageHeader) page)->pd_upper - ((PageHeader) page)->pd_lower;
-                       free_size += (vacpage->free - sizeof(ItemIdData));
+                       free_size += vacpage->free;
                        new_pages++;
                        empty_end_pages++;
                        vacpagecopy = copy_vac_page(vacpage);
@@ -1092,7 +1092,7 @@ scan_heap(VRelStats *vacrelstats, Relation onerel,
                if (PageIsEmpty(page))
                {
                        vacpage->free = ((PageHeader) page)->pd_upper - ((PageHeader) page)->pd_lower;
-                       free_size += (vacpage->free - sizeof(ItemIdData));
+                       free_size += vacpage->free;
                        empty_pages++;
                        empty_end_pages++;
                        vacpagecopy = copy_vac_page(vacpage);
@@ -1667,7 +1667,7 @@ repair_frag(VRelStats *vacrelstats, Relation onerel,
                                /* Quick exit if we have no vtlinks to search in */
                                if (vacrelstats->vtlinks == NULL)
                                {
-                                       elog(WARNING, "Parent item in update-chain not found - can't continue repair_frag");
+                                       elog(DEBUG1, "Parent item in update-chain not found - can't continue repair_frag");
                                        break;          /* out of walk-along-page loop */
                                }
 
@@ -1704,7 +1704,7 @@ repair_frag(VRelStats *vacrelstats, Relation onerel,
                                                 * in scan_heap(), but it's not implemented at the
                                                 * moment and so we just stop shrinking here.
                                                 */
-                                               elog(WARNING, "Child itemid in update-chain marked as unused - can't continue repair_frag");
+                                               elog(DEBUG1, "Child itemid in update-chain marked as unused - can't continue repair_frag");
                                                chain_move_failed = true;
                                                break;  /* out of loop to move to chain end */
                                        }
@@ -1753,7 +1753,7 @@ repair_frag(VRelStats *vacrelstats, Relation onerel,
                                        }
                                        to_vacpage->free -= MAXALIGN(tlen);
                                        if (to_vacpage->offsets_used >= to_vacpage->offsets_free)
-                                               to_vacpage->free -= MAXALIGN(sizeof(ItemIdData));
+                                               to_vacpage->free -= sizeof(ItemIdData);
                                        (to_vacpage->offsets_used)++;
                                        if (free_vtmove == 0)
                                        {
@@ -1789,7 +1789,7 @@ repair_frag(VRelStats *vacrelstats, Relation onerel,
                                        if (vtlp == NULL)
                                        {
                                                /* see discussion above */
-                                               elog(WARNING, "Parent item in update-chain not found - can't continue repair_frag");
+                                               elog(DEBUG1, "Parent item in update-chain not found - can't continue repair_frag");
                                                chain_move_failed = true;
                                                break;  /* out of check-all-items loop */
                                        }
@@ -1825,7 +1825,7 @@ repair_frag(VRelStats *vacrelstats, Relation onerel,
                                                                         HeapTupleHeaderGetXmin(tp.t_data))))
                                        {
                                                ReleaseBuffer(Pbuf);
-                                               elog(WARNING, "Too old parent tuple found - can't continue repair_frag");
+                                               elog(DEBUG1, "Too old parent tuple found - can't continue repair_frag");
                                                chain_move_failed = true;
                                                break;  /* out of check-all-items loop */
                                        }