bufmgr.h
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:4k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. /*-------------------------------------------------------------------------
  2.  *
  3.  * bufmgr.h
  4.  *   POSTGRES buffer manager definitions.
  5.  *
  6.  *
  7.  * Copyright (c) 1994, Regents of the University of California
  8.  *
  9.  * $Id: bufmgr.h,v 1.26 1999/05/25 16:14:39 momjian Exp $
  10.  *
  11.  *-------------------------------------------------------------------------
  12.  */
  13. #ifndef BUFMGR_H
  14. #define BUFMGR_H
  15. #include <stdio.h>
  16. #include <storage/ipc.h>
  17. #include <storage/block.h>
  18. #include <storage/buf.h>
  19. #include <storage/buf_internals.h>
  20. #include <utils/rel.h>
  21. /*
  22.  * the maximum size of a disk block for any possible installation.
  23.  *
  24.  * in theory this could be anything, but in practice this is actually
  25.  * limited to 2^13 bytes because we have limited ItemIdData.lp_off and
  26.  * ItemIdData.lp_len to 13 bits (see itemid.h).
  27.  *
  28.  * limit is now 2^15.  Took four bits from ItemIdData.lp_flags and gave
  29.  * two apiece to ItemIdData.lp_len and lp_off. darrenk 01/06/98
  30.  *
  31.  */
  32. #define MAXBLCKSZ 32768
  33. typedef void *Block;
  34. /* special pageno for bget */
  35. #define P_NEW InvalidBlockNumber /* grow the file to get a new page */
  36. typedef bits16 BufferLock;
  37. /**********************************************************************
  38.   the rest is function defns in the bufmgr that are externally callable
  39.  **********************************************************************/
  40. /*
  41.  * These routines are beaten on quite heavily, hence the macroization.
  42.  * See buf_internals.h for a related comment.
  43.  */
  44. #define BufferDescriptorGetBuffer(bdesc) ((bdesc)->buf_id + 1)
  45. /*
  46.  * BufferIsPinned
  47.  * True iff the buffer is pinned (and therefore valid)
  48.  *
  49.  * Note:
  50.  * Smenatics are identical to BufferIsValid
  51.  * XXX - need to remove either one eventually.
  52.  */
  53. #define BufferIsPinned BufferIsValid
  54. extern int ShowPinTrace;
  55. /*
  56.  * BufferWriteModes (settable via SetBufferWriteMode)
  57.  */
  58. #define BUFFER_FLUSH_WRITE 0 /* immediate write */
  59. #define BUFFER_LATE_WRITE 1 /* delayed write: mark as DIRTY */
  60. /*
  61.  * Buffer context lock modes
  62.  */
  63. #define BUFFER_LOCK_UNLOCK 0
  64. #define BUFFER_LOCK_SHARE 1
  65. #define BUFFER_LOCK_EXCLUSIVE 2
  66. /*
  67.  * BufferIsValid
  68.  * True iff the refcnt of the local buffer is > 0
  69.  * Note:
  70.  * BufferIsValid(InvalidBuffer) is False.
  71.  * BufferIsValid(UnknownBuffer) is False.
  72.  */
  73. #define BufferIsValid(bufnum) 
  74. BufferIsLocal(bufnum) ? 
  75. ((bufnum) >= -NLocBuffer && LocalRefCount[-(bufnum) - 1] > 0) 
  76. BAD_BUFFER_ID(bufnum) ? 
  77. false 
  78. (PrivateRefCount[(bufnum) - 1] > 0) 
  79. )
  80. #define IncrBufferRefCount(buffer) 
  81. BufferIsLocal(buffer) ? 
  82. (void)AssertMacro(LocalRefCount[-(buffer) - 1] >= 0), 
  83. (void)LocalRefCount[-(buffer) - 1]++ 
  84. (void)AssertMacro(!BAD_BUFFER_ID(buffer)), 
  85. (void)AssertMacro(PrivateRefCount[(buffer) - 1] >= 0), 
  86. (void)PrivateRefCount[(buffer) - 1]++ 
  87. )
  88. /*
  89.  * BufferGetBlock
  90.  * Returns a reference to a disk page image associated with a buffer.
  91.  *
  92.  * Note:
  93.  * Assumes buffer is valid.
  94.  */
  95. #define BufferGetBlock(buffer) 
  96. AssertMacro(BufferIsValid(buffer)), 
  97. BufferIsLocal(buffer) ? 
  98. ((Block) MAKE_PTR(LocalBufferDescriptors[-(buffer) - 1].data)) 
  99. ((Block) MAKE_PTR(BufferDescriptors[(buffer) - 1].data)) 
  100. )
  101. /*
  102.  * prototypes for functions in bufmgr.c
  103.  */
  104. extern Buffer RelationGetBufferWithBuffer(Relation relation,
  105. BlockNumber blockNumber, Buffer buffer);
  106. extern Buffer ReadBuffer(Relation reln, BlockNumber blockNum);
  107. extern int WriteBuffer(Buffer buffer);
  108. extern int WriteNoReleaseBuffer(Buffer buffer);
  109. extern Buffer ReleaseAndReadBuffer(Buffer buffer, Relation relation,
  110.  BlockNumber blockNum);
  111. extern void InitBufferPool(IPCKey key);
  112. extern void PrintBufferUsage(FILE *statfp);
  113. extern void ResetBufferUsage(void);
  114. extern void ResetBufferPool(void);
  115. extern int BufferPoolCheckLeak(void);
  116. extern void FlushBufferPool(int StableMainMemoryFlag);
  117. extern BlockNumber BufferGetBlockNumber(Buffer buffer);
  118. extern BlockNumber RelationGetNumberOfBlocks(Relation relation);
  119. extern void ReleaseRelationBuffers(Relation rel);
  120. extern void DropBuffers(Oid dbid);
  121. extern void PrintPinnedBufs(void);
  122. extern int BufferShmemSize(void);
  123. extern int ReleaseBuffer(Buffer buffer);
  124. extern void BufferRefCountReset(int *refcountsave);
  125. extern void BufferRefCountRestore(int *refcountsave);
  126. extern int SetBufferWriteMode(int mode);
  127. extern void SetBufferCommitInfoNeedsSave(Buffer buffer);
  128. extern void UnlockBuffers(void);
  129. extern void LockBuffer(Buffer buffer, int mode);
  130. #endif  /* !defined(BufMgrIncluded) */