diff options
Diffstat (limited to 'src/backend/storage/buf_internals.h')
-rw-r--r-- | src/backend/storage/buf_internals.h | 244 |
1 files changed, 0 insertions, 244 deletions
diff --git a/src/backend/storage/buf_internals.h b/src/backend/storage/buf_internals.h deleted file mode 100644 index 78595b0aeb2..00000000000 --- a/src/backend/storage/buf_internals.h +++ /dev/null @@ -1,244 +0,0 @@ -/*------------------------------------------------------------------------- - * - * buf_internals.h-- - * Internal definitions. - * - * - * Copyright (c) 1994, Regents of the University of California - * - * $Id: buf_internals.h,v 1.4 1996/07/26 20:39:03 scrappy Exp $ - * - * NOTE - * If BUFFERPAGE0 is defined, then 0 will be used as a - * valid buffer page number. - * - *------------------------------------------------------------------------- - */ -#ifndef BUFMGR_INTERNALS_H -#define BUFMGR_INTERNALS_H - -#include "postgres.h" -#include "storage/buf.h" -#include "storage/ipc.h" -#include "storage/shmem.h" -#include "miscadmin.h" -#include "storage/lmgr.h" -#include "utils/rel.h" -#include "utils/relcache.h" - -/* Buf Mgr constants */ -/* in bufmgr.c */ -extern int NBuffers; -extern int Data_Descriptors; -extern int Free_List_Descriptor; -extern int Lookup_List_Descriptor; -extern int Num_Descriptors; - -/* - * 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) - -typedef bits16 BufFlags; - -typedef struct sbufdesc BufferDesc; -typedef struct sbufdesc BufferHdr; -typedef struct buftag BufferTag; -/* long * so alignment will be correct */ -typedef long **BufferBlock; - -struct buftag{ - LRelId relId; - BlockNumber blockNum; /* blknum relative to begin of reln */ -}; - -#define CLEAR_BUFFERTAG(a)\ - (a)->relId.dbId = InvalidOid; \ - (a)->relId.relId = InvalidOid; \ - (a)->blockNum = InvalidBlockNumber - -#define INIT_BUFFERTAG(a,xx_reln,xx_blockNum) \ -{ \ - (a)->blockNum = xx_blockNum;\ - (a)->relId = RelationGetLRelId(xx_reln); \ -} - -#define COPY_BUFFERTAG(a,b)\ -{ \ - (a)->blockNum = (b)->blockNum;\ - LRelIdAssign(*(a),*(b));\ -} - -#define EQUAL_BUFFERTAG(a,b) \ - (((a)->blockNum == (b)->blockNum) &&\ - (OID_Equal((a)->relId.relId,(b)->relId.relId))) - - -#define BAD_BUFFER_ID(bid) ((bid<1) || (bid>(NBuffers))) -#define INVALID_DESCRIPTOR (-3) - -/* - * bletch hack -- anyplace that we declare space for relation or - * database names, we just use '16', not a symbolic constant, to - * specify their lengths. BM_NAMESIZE is the length of these names, - * and is used in the buffer manager code. somebody with lots of - * spare time should do this for all the other modules, too. - */ -#define BM_NAMESIZE 16 - -/* - * struct sbufdesc -- shared buffer cache metadata for a single - * shared buffer descriptor. - * - * We keep the name of the database and relation in which this - * buffer appears in order to avoid a catalog lookup on cache - * flush if we don't have the reldesc in the cache. It is also - * possible that the relation to which this buffer belongs is - * not visible to all backends at the time that it gets flushed. - * Dbname, relname, dbid, and relid are enough to determine where - * to put the buffer, for all storage managers. - */ - -struct sbufdesc { - Buffer freeNext; /* link for freelist chain */ - Buffer freePrev; - SHMEM_OFFSET data; /* pointer to data in buf pool */ - - /* tag and id must be together for table lookup to work */ - BufferTag tag; /* file/block identifier */ - int buf_id; /* maps global desc to local desc */ - - BufFlags flags; /* described below */ - int16 bufsmgr; /* storage manager id for buffer */ - unsigned refcount; /* # of times buffer is pinned */ - - char sb_dbname[NAMEDATALEN+1]; /* name of db in which buf belongs */ - char sb_relname[NAMEDATALEN+1]; /* name of reln */ -#ifdef HAS_TEST_AND_SET - /* can afford a dedicated lock if test-and-set locks are available */ - slock_t io_in_progress_lock; -#endif /* HAS_TEST_AND_SET */ - - /* - * I padded this structure to a power of 2 (128 bytes on a MIPS) because - * BufferDescriptorGetBuffer is called a billion times and it does an - * C pointer subtraction (i.e., "x - y" -> array index of x relative - * to y, which is calculated using division by struct size). Integer - * ".div" hits you for 35 cycles, as opposed to a 1-cycle "sra" ... - * this hack cut 10% off of the time to create the Wisconsin database! - * It eats up more shared memory, of course, but we're (allegedly) - * going to make some of these types bigger soon anyway... -pma 1/2/93 - */ - -/* NO spinlock */ - -#if defined(PORTNAME_ultrix4) - char sb_pad[60]; /* no slock_t */ -#endif /* mips */ - -/* HAS_TEST_AND_SET -- platform dependent size */ - -#if defined(PORTNAME_aix) - char sb_pad[44]; /* typedef unsigned int slock_t; */ -#endif /* aix */ -#if defined(PORTNAME_alpha) - char sb_pad[40]; /* typedef msemaphore slock_t; */ -#endif /* alpha */ -#if defined(PORTNAME_hpux) - char sb_pad[44]; /* typedef struct { int sem[4]; } slock_t; */ -#endif /* hpux */ -#if defined(PORTNAME_irix5) - char sb_pad[44]; /* typedef abilock_t slock_t; */ -#endif /* irix5 */ -#if defined(PORTNAME_next) - char sb_pad[56]; /* typedef struct mutex slock_t; */ -#endif /* next */ - -/* HAS_TEST_AND_SET -- default 1 byte spinlock */ - -#if defined(PORTNAME_BSD44_derived) || \ - defined(PORTNAME_bsdi) || \ - defined(PORTNAME_bsdi_2_1) || \ - defined(PORTNAME_i386_solaris) || \ - defined(PORTNAME_linux) || \ - defined(PORTNAME_sparc) || \ - defined(PORTNAME_sparc_solaris) - char sb_pad[56]; /* has slock_t */ -#endif /* 1 byte slock_t */ -}; - -/* - * mao tracing buffer allocation - */ - -/*#define BMTRACE*/ -#ifdef BMTRACE - -typedef struct _bmtrace { - int bmt_pid; - long bmt_buf; - long bmt_dbid; - long bmt_relid; - int bmt_blkno; - int bmt_op; - -#define BMT_NOTUSED 0 -#define BMT_ALLOCFND 1 -#define BMT_ALLOCNOTFND 2 -#define BMT_DEALLOC 3 - -} bmtrace; - -#endif /* BMTRACE */ - - -/* - * Bufmgr Interface: - */ - -/* Internal routines: only called by buf.c */ - -/*freelist.c*/ -extern void AddBufferToFreelist(BufferDesc *bf); -extern void PinBuffer(BufferDesc *buf); -extern void PinBuffer_Debug(char *file, int line, BufferDesc *buf); -extern void UnpinBuffer(BufferDesc *buf); -extern void UnpinBuffer_Debug(char *file, int line, BufferDesc *buf); -extern BufferDesc *GetFreeBuffer(void); -extern void InitFreeList(bool init); -extern void DBG_FreeListCheck(int nfree); - -/* buf_table.c */ -extern void InitBufTable(void); -extern BufferDesc *BufTableLookup(BufferTag *tagPtr); -extern bool BufTableDelete(BufferDesc *buf); -extern bool BufTableInsert(BufferDesc *buf); -extern void DBG_LookupListCheck(int nlookup); - -/* bufmgr.c */ -extern BufferDesc *BufferDescriptors; -extern BufferBlock BufferBlocks; -extern long *PrivateRefCount; -extern long *LastRefCount; -extern SPINLOCK BufMgrLock; - -/* localbuf.c */ -extern long *LocalRefCount; -extern BufferDesc *LocalBufferDescriptors; -extern int NLocBuffer; - -extern BufferDesc *LocalBufferAlloc(Relation reln, BlockNumber blockNum, - bool *foundPtr); -extern int WriteLocalBuffer(Buffer buffer, bool release); -extern int FlushLocalBuffer(Buffer buffer); -extern void InitLocalBuffer(); -extern void LocalBufferSync(); -extern void ResetLocalBufferPool(); - -#endif /* BUFMGR_INTERNALS_H */ |