Re: bufmgr code cleanup - Mailing list pgsql-patches

From Jan Wieck
Subject Re: bufmgr code cleanup
Date
Msg-id 3FA658CB.503@Yahoo.com
Whole thread Raw
In response to bufmgr code cleanup  (Neil Conway <neilc@samurai.com>)
Responses Re: bufmgr code cleanup  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-patches
Neil Conway wrote:
> This patch cleans up some of the bufmgr code:
>
> - replace uses of
>
>         LockBuffer(buf, BUFFER_LOCK_UNLOCK);
>         ReleaseBuffer(buf);
>
>   with the equivalent, but more concise:
>
>     UnlockAndReleaseBuffer(buf);
>
> - analogous changes were made by replacing LockBuffer() + WriteBuffer()
> with UnlockAndWriteBuffer()
>
> - remove a bunch of #ifdef BMTRACE code, since it was ugly and broken
> anyway
>
> - remove an unused buffer descriptor bit flag (BM_PRIVATE)
>
> - move the definition of INVALID_DESCRIPTOR to out of bufmgr.h and into
> freelist.c, since it is the only file that uses it
>
> - remove another unused function, and fix a few comments
>
> Please apply to the CVS HEAD.

Can this be held off a little while we're experimenting with
improvements to the buffer algorithms?


Jan

>
> -Neil
>
>
>
> ------------------------------------------------------------------------
>
> Index: src/backend/access/hash/hashpage.c
> ===================================================================
> RCS file: /var/lib/cvs/pgsql-server/src/backend/access/hash/hashpage.c,v
> retrieving revision 1.42
> diff -c -r1.42 hashpage.c
> *** src/backend/access/hash/hashpage.c    4 Sep 2003 22:06:27 -0000    1.42
> --- src/backend/access/hash/hashpage.c    31 Oct 2003 22:55:59 -0000
> ***************
> *** 135,142 ****
>   void
>   _hash_relbuf(Relation rel, Buffer buf)
>   {
> !     LockBuffer(buf, BUFFER_LOCK_UNLOCK);
> !     ReleaseBuffer(buf);
>   }
>
>   /*
> --- 135,141 ----
>   void
>   _hash_relbuf(Relation rel, Buffer buf)
>   {
> !     UnlockAndReleaseBuffer(buf);
>   }
>
>   /*
> ***************
> *** 166,173 ****
>   void
>   _hash_wrtbuf(Relation rel, Buffer buf)
>   {
> !     LockBuffer(buf, BUFFER_LOCK_UNLOCK);
> !     WriteBuffer(buf);
>   }
>
>   /*
> --- 165,171 ----
>   void
>   _hash_wrtbuf(Relation rel, Buffer buf)
>   {
> !     UnlockAndWriteBuffer(buf);
>   }
>
>   /*
> Index: src/backend/access/heap/heapam.c
> ===================================================================
> RCS file: /var/lib/cvs/pgsql-server/src/backend/access/heap/heapam.c,v
> retrieving revision 1.157
> diff -c -r1.157 heapam.c
> *** src/backend/access/heap/heapam.c    1 Oct 2003 21:30:52 -0000    1.157
> --- src/backend/access/heap/heapam.c    31 Oct 2003 22:59:14 -0000
> ***************
> *** 899,906 ****
>        */
>       if (!ItemIdIsUsed(lp))
>       {
> !         LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
> !         ReleaseBuffer(buffer);
>           *userbuf = InvalidBuffer;
>           tuple->t_datamcxt = NULL;
>           tuple->t_data = NULL;
> --- 899,905 ----
>        */
>       if (!ItemIdIsUsed(lp))
>       {
> !         UnlockAndReleaseBuffer(buffer);
>           *userbuf = InvalidBuffer;
>           tuple->t_datamcxt = NULL;
>           tuple->t_data = NULL;
> ***************
> *** 1006,1013 ****
>       }
>       if (invalidBlock)
>       {
> !         LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
> !         ReleaseBuffer(buffer);
>           return NULL;
>       }
>
> --- 1005,1011 ----
>       }
>       if (invalidBlock)
>       {
> !         UnlockAndReleaseBuffer(buffer);
>           return NULL;
>       }
>
> ***************
> *** 1033,1040 ****
>           !ItemPointerEquals(tid, &ctid))
>           linkend = false;
>
> !     LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
> !     ReleaseBuffer(buffer);
>
>       if (!valid)
>       {
> --- 1031,1037 ----
>           !ItemPointerEquals(tid, &ctid))
>           linkend = false;
>
> !     UnlockAndReleaseBuffer(buffer);
>
>       if (!valid)
>       {
> ***************
> *** 1174,1181 ****
>
>       END_CRIT_SECTION();
>
> !     LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
> !     WriteBuffer(buffer);
>
>       /*
>        * If tuple is cachable, mark it for invalidation from the caches in
> --- 1171,1177 ----
>
>       END_CRIT_SECTION();
>
> !     UnlockAndWriteBuffer(buffer);
>
>       /*
>        * If tuple is cachable, mark it for invalidation from the caches in
> ***************
> *** 1253,1260 ****
>
>       if (result == HeapTupleInvisible)
>       {
> !         LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
> !         ReleaseBuffer(buffer);
>           elog(ERROR, "attempted to delete invisible tuple");
>       }
>       else if (result == HeapTupleBeingUpdated && wait)
> --- 1249,1255 ----
>
>       if (result == HeapTupleInvisible)
>       {
> !         UnlockAndReleaseBuffer(buffer);
>           elog(ERROR, "attempted to delete invisible tuple");
>       }
>       else if (result == HeapTupleBeingUpdated && wait)
> ***************
> *** 1301,1308 ****
>                  result == HeapTupleUpdated ||
>                  result == HeapTupleBeingUpdated);
>           *ctid = tp.t_data->t_ctid;
> !         LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
> !         ReleaseBuffer(buffer);
>           return result;
>       }
>
> --- 1296,1302 ----
>                  result == HeapTupleUpdated ||
>                  result == HeapTupleBeingUpdated);
>           *ctid = tp.t_data->t_ctid;
> !         UnlockAndReleaseBuffer(buffer);
>           return result;
>       }
>
> ***************
> *** 1483,1490 ****
>
>       if (result == HeapTupleInvisible)
>       {
> !         LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
> !         ReleaseBuffer(buffer);
>           elog(ERROR, "attempted to update invisible tuple");
>       }
>       else if (result == HeapTupleBeingUpdated && wait)
> --- 1477,1483 ----
>
>       if (result == HeapTupleInvisible)
>       {
> !         UnlockAndReleaseBuffer(buffer);
>           elog(ERROR, "attempted to update invisible tuple");
>       }
>       else if (result == HeapTupleBeingUpdated && wait)
> ***************
> *** 1531,1538 ****
>                  result == HeapTupleUpdated ||
>                  result == HeapTupleBeingUpdated);
>           *ctid = oldtup.t_data->t_ctid;
> !         LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
> !         ReleaseBuffer(buffer);
>           return result;
>       }
>
> --- 1524,1530 ----
>                  result == HeapTupleUpdated ||
>                  result == HeapTupleBeingUpdated);
>           *ctid = oldtup.t_data->t_ctid;
> !         UnlockAndReleaseBuffer(buffer);
>           return result;
>       }
>
> ***************
> *** 1808,1815 ****
>
>       if (result == HeapTupleInvisible)
>       {
> !         LockBuffer(*buffer, BUFFER_LOCK_UNLOCK);
> !         ReleaseBuffer(*buffer);
>           elog(ERROR, "attempted to mark4update invisible tuple");
>       }
>       else if (result == HeapTupleBeingUpdated)
> --- 1800,1806 ----
>
>       if (result == HeapTupleInvisible)
>       {
> !         UnlockAndReleaseBuffer(*buffer);
>           elog(ERROR, "attempted to mark4update invisible tuple");
>       }
>       else if (result == HeapTupleBeingUpdated)
> Index: src/backend/access/index/indexam.c
> ===================================================================
> RCS file: /var/lib/cvs/pgsql-server/src/backend/access/index/indexam.c,v
> retrieving revision 1.71
> diff -c -r1.71 indexam.c
> *** src/backend/access/index/indexam.c    25 Sep 2003 06:57:57 -0000    1.71
> --- src/backend/access/index/indexam.c    31 Oct 2003 23:00:00 -0000
> ***************
> *** 541,548 ****
>
>           if (sv_infomask != heapTuple->t_data->t_infomask)
>               SetBufferCommitInfoNeedsSave(scan->xs_cbuf);
> !         LockBuffer(scan->xs_cbuf, BUFFER_LOCK_UNLOCK);
> !         ReleaseBuffer(scan->xs_cbuf);
>           scan->xs_cbuf = InvalidBuffer;
>       }
>
> --- 541,547 ----
>
>           if (sv_infomask != heapTuple->t_data->t_infomask)
>               SetBufferCommitInfoNeedsSave(scan->xs_cbuf);
> !         UnlockAndReleaseBuffer(scan->xs_cbuf);
>           scan->xs_cbuf = InvalidBuffer;
>       }
>
> Index: src/backend/access/nbtree/nbtinsert.c
> ===================================================================
> RCS file: /var/lib/cvs/pgsql-server/src/backend/access/nbtree/nbtinsert.c,v
> retrieving revision 1.106
> diff -c -r1.106 nbtinsert.c
> *** src/backend/access/nbtree/nbtinsert.c    25 Sep 2003 06:57:57 -0000    1.106
> --- src/backend/access/nbtree/nbtinsert.c    31 Oct 2003 23:00:35 -0000
> ***************
> *** 274,281 ****
>                       }
>                       if (sv_infomask != htup.t_data->t_infomask)
>                           SetBufferCommitInfoNeedsSave(hbuffer);
> !                     LockBuffer(hbuffer, BUFFER_LOCK_UNLOCK);
> !                     ReleaseBuffer(hbuffer);
>                   }
>               }
>           }
> --- 274,280 ----
>                       }
>                       if (sv_infomask != htup.t_data->t_infomask)
>                           SetBufferCommitInfoNeedsSave(hbuffer);
> !                     UnlockAndReleaseBuffer(hbuffer);
>                   }
>               }
>           }
> Index: src/backend/access/nbtree/nbtpage.c
> ===================================================================
> RCS file: /var/lib/cvs/pgsql-server/src/backend/access/nbtree/nbtpage.c,v
> retrieving revision 1.72
> diff -c -r1.72 nbtpage.c
> *** src/backend/access/nbtree/nbtpage.c    29 Sep 2003 23:40:26 -0000    1.72
> --- src/backend/access/nbtree/nbtpage.c    31 Oct 2003 23:01:05 -0000
> ***************
> *** 502,509 ****
>   void
>   _bt_relbuf(Relation rel, Buffer buf)
>   {
> !     LockBuffer(buf, BUFFER_LOCK_UNLOCK);
> !     ReleaseBuffer(buf);
>   }
>
>   /*
> --- 502,508 ----
>   void
>   _bt_relbuf(Relation rel, Buffer buf)
>   {
> !     UnlockAndReleaseBuffer(buf);
>   }
>
>   /*
> ***************
> *** 521,528 ****
>   void
>   _bt_wrtbuf(Relation rel, Buffer buf)
>   {
> !     LockBuffer(buf, BUFFER_LOCK_UNLOCK);
> !     WriteBuffer(buf);
>   }
>
>   /*
> --- 520,526 ----
>   void
>   _bt_wrtbuf(Relation rel, Buffer buf)
>   {
> !     UnlockAndWriteBuffer(buf);
>   }
>
>   /*
> Index: src/backend/commands/sequence.c
> ===================================================================
> RCS file: /var/lib/cvs/pgsql-server/src/backend/commands/sequence.c,v
> retrieving revision 1.103
> diff -c -r1.103 sequence.c
> *** src/backend/commands/sequence.c    25 Sep 2003 06:57:58 -0000    1.103
> --- src/backend/commands/sequence.c    31 Oct 2003 23:02:15 -0000
> ***************
> *** 291,298 ****
>
>       END_CRIT_SECTION();
>
> !     LockBuffer(buf, BUFFER_LOCK_UNLOCK);
> !     WriteBuffer(buf);
>       heap_close(rel, NoLock);
>   }
>
> --- 291,297 ----
>
>       END_CRIT_SECTION();
>
> !     UnlockAndWriteBuffer(buf);
>       heap_close(rel, NoLock);
>   }
>
> ***************
> *** 379,388 ****
>
>       END_CRIT_SECTION();
>
> !     LockBuffer(buf, BUFFER_LOCK_UNLOCK);
> !
> !     WriteBuffer(buf);
> !
>       relation_close(seqrel, NoLock);
>   }
>
> --- 378,384 ----
>
>       END_CRIT_SECTION();
>
> !     UnlockAndWriteBuffer(buf);
>       relation_close(seqrel, NoLock);
>   }
>
> ***************
> *** 583,592 ****
>
>       END_CRIT_SECTION();
>
> !     LockBuffer(buf, BUFFER_LOCK_UNLOCK);
> !
> !     WriteBuffer(buf);
> !
>       relation_close(seqrel, NoLock);
>
>       PG_RETURN_INT64(result);
> --- 579,585 ----
>
>       END_CRIT_SECTION();
>
> !     UnlockAndWriteBuffer(buf);
>       relation_close(seqrel, NoLock);
>
>       PG_RETURN_INT64(result);
> ***************
> *** 719,728 ****
>
>       END_CRIT_SECTION();
>
> !     LockBuffer(buf, BUFFER_LOCK_UNLOCK);
> !
> !     WriteBuffer(buf);
> !
>       relation_close(seqrel, NoLock);
>   }
>
> --- 712,718 ----
>
>       END_CRIT_SECTION();
>
> !     UnlockAndWriteBuffer(buf);
>       relation_close(seqrel, NoLock);
>   }
>
> Index: src/backend/commands/vacuum.c
> ===================================================================
> RCS file: /var/lib/cvs/pgsql-server/src/backend/commands/vacuum.c,v
> retrieving revision 1.263
> diff -c -r1.263 vacuum.c
> *** src/backend/commands/vacuum.c    2 Oct 2003 23:19:44 -0000    1.263
> --- src/backend/commands/vacuum.c    31 Oct 2003 23:04:31 -0000
> ***************
> *** 2299,2306 ****
>               page = BufferGetPage(buf);
>               if (!PageIsEmpty(page))
>                   vacuum_page(onerel, buf, *curpage);
> !             LockBuffer(buf, BUFFER_LOCK_UNLOCK);
> !             WriteBuffer(buf);
>           }
>       }
>
> --- 2299,2305 ----
>               page = BufferGetPage(buf);
>               if (!PageIsEmpty(page))
>                   vacuum_page(onerel, buf, *curpage);
> !             UnlockAndWriteBuffer(buf);
>           }
>       }
>
> ***************
> *** 2356,2363 ****
>                       tuple.t_data->t_infomask |= HEAP_XMIN_INVALID;
>               }
>           }
> !         LockBuffer(buf, BUFFER_LOCK_UNLOCK);
> !         WriteBuffer(buf);
>           Assert((*curpage)->offsets_used == num_tuples);
>           checked_moved += num_tuples;
>       }
> --- 2355,2361 ----
>                       tuple.t_data->t_infomask |= HEAP_XMIN_INVALID;
>               }
>           }
> !         UnlockAndWriteBuffer(buf);
>           Assert((*curpage)->offsets_used == num_tuples);
>           checked_moved += num_tuples;
>       }
> ***************
> *** 2467,2474 ****
>
>               END_CRIT_SECTION();
>
> !             LockBuffer(buf, BUFFER_LOCK_UNLOCK);
> !             WriteBuffer(buf);
>           }
>
>           /* now - free new list of reaped pages */
> --- 2465,2471 ----
>
>               END_CRIT_SECTION();
>
> !             UnlockAndWriteBuffer(buf);
>           }
>
>           /* now - free new list of reaped pages */
> ***************
> *** 2535,2542 ****
>               buf = ReadBuffer(onerel, (*vacpage)->blkno);
>               LockBuffer(buf, BUFFER_LOCK_EXCLUSIVE);
>               vacuum_page(onerel, buf, *vacpage);
> !             LockBuffer(buf, BUFFER_LOCK_UNLOCK);
> !             WriteBuffer(buf);
>           }
>       }
>
> --- 2532,2538 ----
>               buf = ReadBuffer(onerel, (*vacpage)->blkno);
>               LockBuffer(buf, BUFFER_LOCK_EXCLUSIVE);
>               vacuum_page(onerel, buf, *vacpage);
> !             UnlockAndWriteBuffer(buf);
>           }
>       }
>
> Index: src/backend/commands/vacuumlazy.c
> ===================================================================
> RCS file: /var/lib/cvs/pgsql-server/src/backend/commands/vacuumlazy.c,v
> retrieving revision 1.32
> diff -c -r1.32 vacuumlazy.c
> *** src/backend/commands/vacuumlazy.c    25 Sep 2003 06:57:59 -0000    1.32
> --- src/backend/commands/vacuumlazy.c    31 Oct 2003 23:03:10 -0000
> ***************
> *** 267,274 ****
>                   lazy_record_free_space(vacrelstats, blkno,
>                                          PageGetFreeSpace(page));
>               }
> !             LockBuffer(buf, BUFFER_LOCK_UNLOCK);
> !             WriteBuffer(buf);
>               continue;
>           }
>
> --- 267,273 ----
>                   lazy_record_free_space(vacrelstats, blkno,
>                                          PageGetFreeSpace(page));
>               }
> !             UnlockAndWriteBuffer(buf);
>               continue;
>           }
>
> ***************
> *** 277,284 ****
>               empty_pages++;
>               lazy_record_free_space(vacrelstats, blkno,
>                                      PageGetFreeSpace(page));
> !             LockBuffer(buf, BUFFER_LOCK_UNLOCK);
> !             ReleaseBuffer(buf);
>               continue;
>           }
>
> --- 276,282 ----
>               empty_pages++;
>               lazy_record_free_space(vacrelstats, blkno,
>                                      PageGetFreeSpace(page));
> !             UnlockAndReleaseBuffer(buf);
>               continue;
>           }
>
> ***************
> *** 477,484 ****
>           page = BufferGetPage(buf);
>           lazy_record_free_space(vacrelstats, tblk,
>                                  PageGetFreeSpace(page));
> !         LockBuffer(buf, BUFFER_LOCK_UNLOCK);
> !         WriteBuffer(buf);
>           npages++;
>       }
>
> --- 475,481 ----
>           page = BufferGetPage(buf);
>           lazy_record_free_space(vacrelstats, tblk,
>                                  PageGetFreeSpace(page));
> !         UnlockAndWriteBuffer(buf);
>           npages++;
>       }
>
> ***************
> *** 812,819 ****
>           if (PageIsNew(page) || PageIsEmpty(page))
>           {
>               /* PageIsNew robably shouldn't happen... */
> !             LockBuffer(buf, BUFFER_LOCK_UNLOCK);
> !             ReleaseBuffer(buf);
>               continue;
>           }
>
> --- 809,815 ----
>           if (PageIsNew(page) || PageIsEmpty(page))
>           {
>               /* PageIsNew robably shouldn't happen... */
> !             UnlockAndReleaseBuffer(buf);
>               continue;
>           }
>
> Index: src/backend/storage/buffer/buf_init.c
> ===================================================================
> RCS file: /var/lib/cvs/pgsql-server/src/backend/storage/buffer/buf_init.c,v
> retrieving revision 1.54
> diff -c -r1.54 buf_init.c
> *** src/backend/storage/buffer/buf_init.c    4 Aug 2003 02:40:03 -0000    1.54
> --- src/backend/storage/buffer/buf_init.c    31 Oct 2003 22:38:16 -0000
> ***************
> *** 34,50 ****
>   #include "utils/hsearch.h"
>   #include "utils/memutils.h"
>
> -
> - /*
> -  *    if BMTRACE is defined, we trace the last 200 buffer allocations and
> -  *    deallocations in a circular buffer in shared memory.
> -  */
> - #ifdef    BMTRACE
> - bmtrace    *TraceBuf;
> - long       *CurTraceBuf;
> -
> - #define BMT_LIMIT        200
> - #endif   /* BMTRACE */
>   int            ShowPinTrace = 0;
>
>   int            Data_Descriptors;
> --- 34,39 ----
> ***************
> *** 144,159 ****
>        */
>       LWLockAcquire(BufMgrLock, LW_EXCLUSIVE);
>
> - #ifdef BMTRACE
> -     CurTraceBuf = (long *) ShmemInitStruct("Buffer trace",
> -                             (BMT_LIMIT * sizeof(bmtrace)) + sizeof(long),
> -                                            &foundDescs);
> -     if (!foundDescs)
> -         MemSet(CurTraceBuf, 0, (BMT_LIMIT * sizeof(bmtrace)) + sizeof(long));
> -
> -     TraceBuf = (bmtrace *) & (CurTraceBuf[1]);
> - #endif
> -
>       BufferDescriptors = (BufferDesc *)
>           ShmemInitStruct("Buffer Descriptors",
>                         Num_Descriptors * sizeof(BufferDesc), &foundDescs);
> --- 133,138 ----
> ***************
> *** 266,274 ****
>       /* size of buffer hash table */
>       size += hash_estimate_size(NBuffers, sizeof(BufferLookupEnt));
>
> - #ifdef BMTRACE
> -     size += (BMT_LIMIT * sizeof(bmtrace)) + sizeof(long);
> - #endif
> -
>       return size;
>   }
> --- 245,249 ----
> Index: src/backend/storage/buffer/buf_table.c
> ===================================================================
> RCS file: /var/lib/cvs/pgsql-server/src/backend/storage/buffer/buf_table.c,v
> retrieving revision 1.29
> diff -c -r1.29 buf_table.c
> *** src/backend/storage/buffer/buf_table.c    4 Aug 2003 02:40:03 -0000    1.29
> --- src/backend/storage/buffer/buf_table.c    31 Oct 2003 22:30:34 -0000
> ***************
> *** 133,147 ****
>       result->id = buf->buf_id;
>       return TRUE;
>   }
> -
> - /* prints out collision stats for the buf table */
> - #ifdef NOT_USED
> - void
> - DBG_LookupListCheck(int nlookup)
> - {
> -     nlookup = 10;
> -
> -     hash_stats("Shared", SharedBufHash);
> - }
> -
> - #endif
> --- 133,135 ----
> Index: src/backend/storage/buffer/bufmgr.c
> ===================================================================
> RCS file: /var/lib/cvs/pgsql-server/src/backend/storage/buffer/bufmgr.c,v
> retrieving revision 1.141
> diff -c -r1.141 bufmgr.c
> *** src/backend/storage/buffer/bufmgr.c    25 Sep 2003 06:58:01 -0000    1.141
> --- src/backend/storage/buffer/bufmgr.c    31 Oct 2003 22:46:35 -0000
> ***************
> *** 105,117 ****
>    *
>    * Note: a side effect of a P_NEW call is to update reln->rd_nblocks.
>    */
> -
> - #undef ReadBuffer                /* conflicts with macro when BUFMGR_DEBUG
> -                                  * defined */
> -
> - /*
> -  * ReadBuffer
> -  */
>   Buffer
>   ReadBuffer(Relation reln, BlockNumber blockNum)
>   {
> --- 105,110 ----
> ***************
> *** 358,366 ****
>                */
>               *foundPtr = FALSE;
>           }
> - #ifdef BMTRACE
> -         _bm_trace((reln->rd_rel->relisshared ? 0 : MyDatabaseId), RelationGetRelid(reln), blockNum,
BufferDescriptorGetBuffer(buf),BMT_ALLOCFND); 
> - #endif   /* BMTRACE */
>
>           if (!(*foundPtr))
>               StartBufferIO(buf, true);
> --- 351,356 ----
> ***************
> *** 569,578 ****
>       else
>           ContinueBufferIO(buf, true);
>
> - #ifdef BMTRACE
> -     _bm_trace((reln->rd_rel->relisshared ? 0 : MyDatabaseId), RelationGetRelid(reln), blockNum,
BufferDescriptorGetBuffer(buf),BMT_ALLOCNOTFND); 
> - #endif   /* BMTRACE */
> -
>       LWLockRelease(BufMgrLock);
>
>       return buf;
> --- 559,564 ----
> ***************
> *** 619,627 ****
>    * Side Effects:
>    *        Pin count is decremented.
>    */
> -
> - #undef WriteBuffer
> -
>   void
>   WriteBuffer(Buffer buffer)
>   {
> --- 605,610 ----
> ***************
> *** 638,645 ****
>       write_buffer(buffer, false);
>   }
>
> -
> - #undef ReleaseAndReadBuffer
>   /*
>    * ReleaseAndReadBuffer -- combine ReleaseBuffer() and ReadBuffer()
>    *        to save a lock release/acquire.
> --- 621,626 ----
> ***************
> *** 1099,1105 ****
>        * new or temp, because no one else should be modifying it.  Otherwise
>        * we need to ask the smgr for the current physical file length.
>        *
> !      * Don't call smgr on a view, either.
>        */
>       if (relation->rd_rel->relkind == RELKIND_VIEW)
>           relation->rd_nblocks = 0;
> --- 1080,1086 ----
>        * new or temp, because no one else should be modifying it.  Otherwise
>        * we need to ask the smgr for the current physical file length.
>        *
> !      * Don't call smgr on a view or a composite type, either.
>        */
>       if (relation->rd_rel->relkind == RELKIND_VIEW)
>           relation->rd_nblocks = 0;
> ***************
> *** 1107,1112 ****
> --- 1088,1094 ----
>           relation->rd_nblocks = 0;
>       else if (!relation->rd_isnew && !relation->rd_istemp)
>           relation->rd_nblocks = smgrnblocks(DEFAULT_SMGR, relation);
> +
>       return relation->rd_nblocks;
>   }
>
> ***************
> *** 1555,1562 ****
>       return 0;
>   }
>
> - #undef ReleaseBuffer
> -
>   /*
>    * ReleaseBuffer -- remove the pin on a buffer without
>    *        marking it dirty.
> --- 1537,1542 ----
> ***************
> *** 1669,1819 ****
>   }
>   #endif
>
> - #ifdef BMTRACE
> -
> - /*
> -  *    trace allocations and deallocations in a circular buffer in
> -  *    shared memory.    check the buffer before doing the allocation,
> -  *    and die if there's anything fishy.
> -  */
> -
> - void
> - _bm_trace(Oid dbId, Oid relId, int blkNo, int bufNo, int allocType)
> - {
> -     long        start,
> -                 cur;
> -     bmtrace    *tb;
> -
> -     start = *CurTraceBuf;
> -
> -     if (start > 0)
> -         cur = start - 1;
> -     else
> -         cur = BMT_LIMIT - 1;
> -
> -     for (;;)
> -     {
> -         tb = &TraceBuf[cur];
> -         if (tb->bmt_op != BMT_NOTUSED)
> -         {
> -             if (tb->bmt_buf == bufNo)
> -             {
> -                 if ((tb->bmt_op == BMT_DEALLOC)
> -                     || (tb->bmt_dbid == dbId && tb->bmt_relid == relId
> -                         && tb->bmt_blkno == blkNo))
> -                     goto okay;
> -
> -                 /* die holding the buffer lock */
> -                 _bm_die(dbId, relId, blkNo, bufNo, allocType, start, cur);
> -             }
> -         }
> -
> -         if (cur == start)
> -             goto okay;
> -
> -         if (cur == 0)
> -             cur = BMT_LIMIT - 1;
> -         else
> -             cur--;
> -     }
> -
> - okay:
> -     tb = &TraceBuf[start];
> -     tb->bmt_pid = MyProcPid;
> -     tb->bmt_buf = bufNo;
> -     tb->bmt_dbid = dbId;
> -     tb->bmt_relid = relId;
> -     tb->bmt_blkno = blkNo;
> -     tb->bmt_op = allocType;
> -
> -     *CurTraceBuf = (start + 1) % BMT_LIMIT;
> - }
> -
> - void
> - _bm_die(Oid dbId, Oid relId, int blkNo, int bufNo,
> -         int allocType, long start, long cur)
> - {
> -     FILE       *fp;
> -     bmtrace    *tb;
> -     int            i;
> -
> -     tb = &TraceBuf[cur];
> -
> -     if ((fp = AllocateFile("/tmp/death_notice", "w")) == NULL)
> -         elog(FATAL, "buffer alloc trace error and can't open log file");
> -
> -     fprintf(fp, "buffer alloc trace detected the following error:\n\n");
> -     fprintf(fp, "    buffer %d being %s inconsistently with a previous %s\n\n",
> -          bufNo, (allocType == BMT_DEALLOC ? "deallocated" : "allocated"),
> -             (tb->bmt_op == BMT_DEALLOC ? "deallocation" : "allocation"));
> -
> -     fprintf(fp, "the trace buffer contains:\n");
> -
> -     i = start;
> -     for (;;)
> -     {
> -         tb = &TraceBuf[i];
> -         if (tb->bmt_op != BMT_NOTUSED)
> -         {
> -             fprintf(fp, "     [%3d]%spid %d buf %2d for <%u,%u,%u> ",
> -                     i, (i == cur ? " ---> " : "\t"),
> -                     tb->bmt_pid, tb->bmt_buf,
> -                     tb->bmt_dbid, tb->bmt_relid, tb->bmt_blkno);
> -
> -             switch (tb->bmt_op)
> -             {
> -                 case BMT_ALLOCFND:
> -                     fprintf(fp, "allocate (found)\n");
> -                     break;
> -
> -                 case BMT_ALLOCNOTFND:
> -                     fprintf(fp, "allocate (not found)\n");
> -                     break;
> -
> -                 case BMT_DEALLOC:
> -                     fprintf(fp, "deallocate\n");
> -                     break;
> -
> -                 default:
> -                     fprintf(fp, "unknown op type %d\n", tb->bmt_op);
> -                     break;
> -             }
> -         }
> -
> -         i = (i + 1) % BMT_LIMIT;
> -         if (i == start)
> -             break;
> -     }
> -
> -     fprintf(fp, "\noperation causing error:\n");
> -     fprintf(fp, "\tpid %d buf %d for <%d,%u,%d> ",
> -             getpid(), bufNo, dbId, relId, blkNo);
> -
> -     switch (allocType)
> -     {
> -         case BMT_ALLOCFND:
> -             fprintf(fp, "allocate (found)\n");
> -             break;
> -
> -         case BMT_ALLOCNOTFND:
> -             fprintf(fp, "allocate (not found)\n");
> -             break;
> -
> -         case BMT_DEALLOC:
> -             fprintf(fp, "deallocate\n");
> -             break;
> -
> -         default:
> -             fprintf(fp, "unknown op type %d\n", allocType);
> -             break;
> -     }
> -
> -     FreeFile(fp);
> -
> -     kill(getpid(), SIGILL);
> - }
> - #endif   /* BMTRACE */
> -
>   /*
>    * SetBufferCommitInfoNeedsSave
>    *
> --- 1649,1654 ----
> Index: src/backend/storage/buffer/freelist.c
> ===================================================================
> RCS file: /var/lib/cvs/pgsql-server/src/backend/storage/buffer/freelist.c,v
> retrieving revision 1.31
> diff -c -r1.31 freelist.c
> *** src/backend/storage/buffer/freelist.c    4 Aug 2003 02:40:03 -0000    1.31
> --- src/backend/storage/buffer/freelist.c    31 Oct 2003 22:50:11 -0000
> ***************
> *** 32,40 ****
>   #include "storage/ipc.h"
>   #include "storage/proc.h"
>
> -
>   static BufferDesc *SharedFreeList;
>
>   /*
>    * State-checking macros
>    */
> --- 32,41 ----
>   #include "storage/ipc.h"
>   #include "storage/proc.h"
>
>   static BufferDesc *SharedFreeList;
>
> + #define INVALID_DESCRIPTOR (-3)
> +
>   /*
>    * State-checking macros
>    */
> ***************
> *** 65,74 ****
>   static void
>   AddBufferToFreelist(BufferDesc *bf)
>   {
> - #ifdef BMTRACE
> -     _bm_trace(bf->tag.relId.dbId, bf->tag.relId.relId, bf->tag.blockNum,
> -               BufferDescriptorGetBuffer(bf), BMT_DEALLOC);
> - #endif   /* BMTRACE */
>       IsNotInQueue(bf);
>
>       /* change bf so it points to inFrontOfNew and its successor */
> --- 66,71 ----
> Index: src/include/storage/buf_internals.h
> ===================================================================
> RCS file: /var/lib/cvs/pgsql-server/src/include/storage/buf_internals.h,v
> retrieving revision 1.61
> diff -c -r1.61 buf_internals.h
> *** src/include/storage/buf_internals.h    4 Aug 2003 02:40:14 -0000    1.61
> --- src/include/storage/buf_internals.h    31 Oct 2003 22:37:19 -0000
> ***************
> *** 33,46 ****
>    * Flags for buffer descriptors
>    */
>   #define BM_DIRTY                (1 << 0)
> ! #define BM_PRIVATE                (1 << 1)
> ! #define BM_VALID                (1 << 2)
> ! #define BM_DELETED                (1 << 3)
> ! #define BM_FREE                    (1 << 4)
> ! #define BM_IO_IN_PROGRESS        (1 << 5)
> ! #define BM_IO_ERROR                (1 << 6)
> ! #define BM_JUST_DIRTIED            (1 << 7)
> ! #define BM_PIN_COUNT_WAITER        (1 << 8)
>
>   typedef bits16 BufFlags;
>
> --- 33,45 ----
>    * Flags for buffer descriptors
>    */
>   #define BM_DIRTY                (1 << 0)
> ! #define BM_VALID                (1 << 1)
> ! #define BM_DELETED                (1 << 2)
> ! #define BM_FREE                    (1 << 3)
> ! #define BM_IO_IN_PROGRESS        (1 << 4)
> ! #define BM_IO_ERROR                (1 << 5)
> ! #define BM_JUST_DIRTIED            (1 << 6)
> ! #define BM_PIN_COUNT_WAITER        (1 << 7)
>
>   typedef bits16 BufFlags;
>
> ***************
> *** 123,154 ****
>       Buffer        id;
>   } BufferLookupEnt;
>
> - /*
> -  *    mao tracing buffer allocation
> -  */
> -
> - /*#define BMTRACE*/
> -
> - #ifdef BMTRACE
> -
> - typedef struct _bmtrace
> - {
> -     int            bmt_pid;
> -     int            bmt_buf;
> -     Oid            bmt_dbid;
> -     Oid            bmt_relid;
> -     BlockNumber bmt_blkno;
> -     int            bmt_op;
> -
> - #define BMT_NOTUSED        0
> - #define BMT_ALLOCFND    1
> - #define BMT_ALLOCNOTFND 2
> - #define BMT_DEALLOC        3
> -
> - }    bmtrace;
> - #endif   /* BMTRACE */
> -
> -
>   /* counters in buf_init.c */
>   extern long int ReadBufferCount;
>   extern long int ReadLocalBufferCount;
> --- 122,127 ----
> Index: src/include/storage/bufmgr.h
> ===================================================================
> RCS file: /var/lib/cvs/pgsql-server/src/include/storage/bufmgr.h,v
> retrieving revision 1.70
> diff -c -r1.70 bufmgr.h
> *** src/include/storage/bufmgr.h    10 Aug 2003 19:48:08 -0000    1.70
> --- src/include/storage/bufmgr.h    31 Oct 2003 22:50:16 -0000
> ***************
> *** 52,58 ****
>    */
>
>   #define BAD_BUFFER_ID(bid) ((bid) < 1 || (bid) > NBuffers)
> - #define INVALID_DESCRIPTOR (-3)
>
>   #define UnlockAndReleaseBuffer(buffer)    \
>   ( \
> --- 52,57 ----
>
>
> ------------------------------------------------------------------------
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 3: if posting/reading through Usenet, please send an appropriate
>       subscribe-nomail command to majordomo@postgresql.org so that your
>       message can get through to the mailing list cleanly


--
#======================================================================#
# It's easier to get forgiveness for being wrong than for being right. #
# Let's break this rule - forgive me.                                  #
#================================================== JanWieck@Yahoo.com #


pgsql-patches by date:

Previous
From: Christopher Kings-Lynne
Date:
Subject: Re: "make check" improvement for cygwin
Next
From: Neil Conway
Date:
Subject: equal() perf tweak