1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
|
/*
* See the file LICENSE for redistribution information.
*
* Copyright (c) 2011, 2013 Oracle and/or its affiliates. All rights reserved.
*
* dbdefs.d - DTrace declarations of DB data structures.
*/
#ifndef _DBDEFS_D
#define _DBDEFS_D
typedef D`uint32_t db_pgno_t;
typedef D`uint16_t db_indx_t;
typedef D`uintptr_t roff_t;
typedef D`int32_t db_atomic_t;
/* A DBT for the DB API */
typedef struct __db_dbt {
uintptr_t data; /* Key/data */
uint32_t size; /* key/data length */
uint32_t ulen; /* RO: length of user buffer. */
uint32_t dlen; /* RO: get/put record length. */
uint32_t doff; /* RO: get/put record offset. */
uintptr_t app_data;
uint32_t flags;
} DBT;
/* A DBT in shared memory */
typedef struct __sh_dbt {
uint32_t size; /* key/data length */
roff_t off; /* Region offset. */
} SH_DBT;
/*
* DB fileids are actually uint8_t fileid[20]; in D it is easier to handle them
* as a struct of 5 four-byte integers.
*/
typedef struct fileid
{
uint32_t id1;
uint32_t id2;
uint32_t id3;
uint32_t id4;
uint32_t id5;
} FILEID;
typedef struct __db_lock_ilock {
uint32_t pgno;
FILEID fileid;
uint32_t type;
} DB_ILOCK;
typedef struct {
uint32_t file;
uint32_t offset;
} DB_LSN;
typedef struct {
D`ssize_t stqe_next; /* relative offset of next element */
ssize_t stqe_prev; /* relative offset of prev's next */
} SH_TAILQ_ENTRY;
typedef struct {
ssize_t sce_next; /* relative offset to next element */
ssize_t sce_prev; /* relative offset of prev element */
} SH_CHAIN_ENTRY;
typedef struct _db_page {
DB_LSN lsn; /* 00-07: Log sequence number. */
db_pgno_t pgno; /* 08-11: Current page number. */
db_pgno_t prev_pgno; /* 12-15: Previous page number. */
db_pgno_t next_pgno; /* 16-19: Next page number. */
db_indx_t entries; /* 20-21: Number of items on the page. */
db_indx_t hf_offset; /* 22-23: High free byte page offset. */
#define LEAFLEVEL 1
#define MAXBTREELEVEL 255
D`uint8_t level; /* 24: Btree tree level. */
uint8_t type; /* 25: Page type. */
} PAGE;
typedef struct __bh {
uint32_t mtx_buf; /* Shared/Exclusive mutex */
db_atomic_t ref; /* Reference count. */
#define BH_CALLPGIN 0x001 /* Convert the page before use. */
#define BH_DIRTY 0x002 /* Page is modified. */
#define BH_DIRTY_CREATE 0x004 /* Page is modified. */
#define BH_DISCARD 0x008 /* Page is useless. */
#define BH_EXCLUSIVE 0x010 /* Exclusive access acquired. */
#define BH_FREED 0x020 /* Page was freed. */
#define BH_FROZEN 0x040 /* Frozen buffer: allocate & re-read. */
#define BH_TRASH 0x080 /* Page is garbage. */
#define BH_THAWED 0x100 /* Page was thawed. */
uint16_t flags;
uint32_t priority; /* Priority. */
SH_TAILQ_ENTRY hq; /* MPOOL hash bucket queue. */
db_pgno_t pgno; /* Underlying MPOOLFILE page number. */
roff_t mf_offset; /* Associated MPOOLFILE offset. */
uint32_t bucket; /* Hash bucket containing header. */
int region; /* Region containing header. */
roff_t td_off; /* MVCC: creating TXN_DETAIL offset. */
SH_CHAIN_ENTRY vc; /* MVCC: version chain. */
#ifdef DIAG_MVCC
uint16_t align_off; /* Alignment offset for diagnostics.*/
#endif
/*
* !!!
* This array must be at least size_t aligned -- the DB access methods
* put PAGE and other structures into it, and then access them directly.
* (We guarantee size_t alignment to applications in the documentation,
* too.)
*/
uint8_t buf[1]; /* Variable length data. */
} BH;
typedef enum {
DB_LOCK_NG=0, /* Not granted. */
DB_LOCK_READ=1, /* Shared/read. */
DB_LOCK_WRITE=2, /* Exclusive/write. */
DB_LOCK_WAIT=3, /* Wait for event */
DB_LOCK_IWRITE=4, /* Intent exclusive/write. */
DB_LOCK_IREAD=5, /* Intent to share/read. */
DB_LOCK_IWR=6, /* Intent to read and write. */
DB_LOCK_READ_UNCOMMITTED=7, /* Degree 1 isolation. */
DB_LOCK_WWRITE=8 /* Was Written. */
} db_lockmode_t;
#endif
|