📄 db_int.in
字号:
* LOCKING_ON Locking has been configured. * LOGGING_ON Logging has been configured. * MPOOL_ON Memory pool has been configured. * REP_ON Replication has been configured. * RPC_ON RPC has been configured. * TXN_ON Transactions have been configured. */#define CDB_LOCKING(dbenv) F_ISSET(dbenv, DB_ENV_CDB)#define CRYPTO_ON(dbenv) ((dbenv)->crypto_handle != NULL)#define LOCKING_ON(dbenv) ((dbenv)->lk_handle != NULL)#define LOGGING_ON(dbenv) ((dbenv)->lg_handle != NULL)#define MPOOL_ON(dbenv) ((dbenv)->mp_handle != NULL)#define REP_ON(dbenv) ((dbenv)->rep_handle != NULL)#define RPC_ON(dbenv) ((dbenv)->cl_handle != NULL)#define TXN_ON(dbenv) ((dbenv)->tx_handle != NULL)/* * STD_LOCKING Standard locking, that is, locking was configured and CDB * was not. We do not do locking in off-page duplicate trees, * so we check for that in the cursor first. */#define STD_LOCKING(dbc) \ (!F_ISSET(dbc, DBC_OPD) && \ !CDB_LOCKING((dbc)->dbp->dbenv) && LOCKING_ON((dbc)->dbp->dbenv))/* * IS_RECOVERING: The system is running recovery. */#define IS_RECOVERING(dbenv) \ (LOGGING_ON(dbenv) && \ F_ISSET((DB_LOG *)(dbenv)->lg_handle, DBLOG_RECOVER))/* Initialization methods are often illegal before/after open is called. */#define ENV_ILLEGAL_AFTER_OPEN(dbenv, name) \ if (F_ISSET((dbenv), DB_ENV_OPEN_CALLED)) \ return (__db_mi_open(dbenv, name, 1));#define ENV_ILLEGAL_BEFORE_OPEN(dbenv, name) \ if (!F_ISSET((dbenv), DB_ENV_OPEN_CALLED)) \ return (__db_mi_open(dbenv, name, 0));/* We're not actually user hostile, honest. */#define ENV_REQUIRES_CONFIG(dbenv, handle, i, flags) \ if (handle == NULL) \ return (__db_env_config(dbenv, i, flags));#define ENV_NOT_CONFIGURED(dbenv, handle, i, flags) \ if (F_ISSET((dbenv), DB_ENV_OPEN_CALLED)) \ ENV_REQUIRES_CONFIG(dbenv, handle, i, flags)/******************************************************* * Database Access Methods. *******************************************************//* * DB_IS_THREADED -- * The database handle is free-threaded (was opened with DB_THREAD). */#define DB_IS_THREADED(dbp) \ ((dbp)->mutexp != NULL)/* Initialization methods are often illegal before/after open is called. */#define DB_ILLEGAL_AFTER_OPEN(dbp, name) \ if (F_ISSET((dbp), DB_AM_OPEN_CALLED)) \ return (__db_mi_open((dbp)->dbenv, name, 1));#define DB_ILLEGAL_BEFORE_OPEN(dbp, name) \ if (!F_ISSET((dbp), DB_AM_OPEN_CALLED)) \ return (__db_mi_open((dbp)->dbenv, name, 0));/* Some initialization methods are illegal if environment isn't local. */#define DB_ILLEGAL_IN_ENV(dbp, name) \ if (!F_ISSET((dbp)->dbenv, DB_ENV_DBLOCAL)) \ return (__db_mi_env((dbp)->dbenv, name));#define DB_ILLEGAL_METHOD(dbp, flags) { \ int __ret; \ if ((__ret = __dbh_am_chk(dbp, flags)) != 0) \ return (__ret); \}/* * Common DBC->internal fields. Each access method adds additional fields * to this list, but the initial fields are common. */#define __DBC_INTERNAL \ DBC *opd; /* Off-page duplicate cursor. */\ \ void *page; /* Referenced page. */ \ db_pgno_t root; /* Tree root. */ \ db_pgno_t pgno; /* Referenced page number. */ \ db_indx_t indx; /* Referenced key item index. */\ \ DB_LOCK lock; /* Cursor lock. */ \ db_lockmode_t lock_mode; /* Lock mode. */struct __dbc_internal { __DBC_INTERNAL};/* Actions that __db_master_update can take. */typedef enum { MU_REMOVE, MU_RENAME, MU_OPEN } mu_action;/* * Access-method-common macro for determining whether a cursor * has been initialized. */#define IS_INITIALIZED(dbc) ((dbc)->internal->pgno != PGNO_INVALID)/* Free the callback-allocated buffer, if necessary, hanging off of a DBT. */#define FREE_IF_NEEDED(sdbp, dbt) \ if (F_ISSET((dbt), DB_DBT_APPMALLOC)) { \ __os_ufree((sdbp)->dbenv, (dbt)->data); \ F_CLR((dbt), DB_DBT_APPMALLOC); \ }/* * Use memory belonging to object "owner" to return the results of * any no-DBT-flag get ops on cursor "dbc". */#define SET_RET_MEM(dbc, owner) \ do { \ (dbc)->rskey = &(owner)->my_rskey; \ (dbc)->rkey = &(owner)->my_rkey; \ (dbc)->rdata = &(owner)->my_rdata; \ } while (0)/* Use the return-data memory src is currently set to use in dest as well. */#define COPY_RET_MEM(src, dest) \ do { \ (dest)->rskey = (src)->rskey; \ (dest)->rkey = (src)->rkey; \ (dest)->rdata = (src)->rdata; \ } while (0)/* Reset the returned-memory pointers to their defaults. */#define RESET_RET_MEM(dbc) \ do { \ (dbc)->rskey = &(dbc)->my_rskey; \ (dbc)->rkey = &(dbc)->my_rkey; \ (dbc)->rdata = &(dbc)->my_rdata; \ } while (0)/******************************************************* * Mpool. *******************************************************//* * File types for DB access methods. Negative numbers are reserved to DB. */#define DB_FTYPE_SET -1 /* Call pgin/pgout functions. */#define DB_FTYPE_NOTSET 0 /* Don't call... *//* Structure used as the DB pgin/pgout pgcookie. */typedef struct __dbpginfo { size_t db_pagesize; /* Underlying page size. */ u_int32_t flags; /* Some DB_AM flags needed. */ DBTYPE type; /* DB type */} DB_PGINFO;/******************************************************* * Log. *******************************************************//* Initialize an LSN to 'zero'. */#define ZERO_LSN(LSN) do { \ (LSN).file = 0; \ (LSN).offset = 0; \} while (0)#define IS_ZERO_LSN(LSN) ((LSN).file == 0 && (LSN).offset == 0)#define IS_INIT_LSN(LSN) ((LSN).file == 1 && (LSN).offset == 0)#define INIT_LSN(LSN) do { \ (LSN).file = 1; \ (LSN).offset = 0; \} while (0)#define MAX_LSN(LSN) do { \ (LSN).file = UINT32_MAX; \ (LSN).offset = UINT32_MAX; \} while (0)#define IS_MAX_LSN(LSN) \ ((LSN).file == UINT32_MAX && (LSN).offset == UINT32_MAX)/* If logging is turned off, smash the lsn. */#define LSN_NOT_LOGGED(LSN) do { \ (LSN).file = 0; \ (LSN).offset = 1; \} while (0)#define IS_NOT_LOGGED_LSN(LSN) \ ((LSN).file == 0 && (LSN).offset == 1)/******************************************************* * Txn. *******************************************************/#define DB_NONBLOCK(C) ((C)->txn != NULL && F_ISSET((C)->txn, TXN_NOWAIT))#define NOWAIT_FLAG(txn) \ ((txn) != NULL && F_ISSET((txn), TXN_NOWAIT) ? DB_LOCK_NOWAIT : 0)#define IS_SUBTRANSACTION(txn) \ ((txn) != NULL && (txn)->parent != NULL)/******************************************************* * Crypto. *******************************************************/#define DB_IV_BYTES 16 /* Bytes per IV */#define DB_MAC_KEY 20 /* Bytes per MAC checksum *//******************************************************* * Secondaries over RPC. *******************************************************/#ifdef CONFIG_TEST/* * These are flags passed to DB->associate calls by the Tcl API if running * over RPC. The RPC server will mask out these flags before making the real * DB->associate call. * * These flags must coexist with the valid flags to DB->associate (currently * DB_AUTO_COMMIT and DB_CREATE). DB_AUTO_COMMIT is in the group of * high-order shared flags (0xff000000), and DB_CREATE is in the low-order * group (0x00000fff), so we pick a range in between. */#define DB_RPC2ND_MASK 0x00f00000 /* Reserved bits. */#define DB_RPC2ND_REVERSEDATA 0x00100000 /* callback_n(0) _s_reversedata. */#define DB_RPC2ND_NOOP 0x00200000 /* callback_n(1) _s_noop */#define DB_RPC2ND_CONCATKEYDATA 0x00300000 /* callback_n(2) _s_concatkeydata */#define DB_RPC2ND_CONCATDATAKEY 0x00400000 /* callback_n(3) _s_concatdatakey */#define DB_RPC2ND_REVERSECONCAT 0x00500000 /* callback_n(4) _s_reverseconcat */#define DB_RPC2ND_TRUNCDATA 0x00600000 /* callback_n(5) _s_truncdata */#define DB_RPC2ND_CONSTANT 0x00700000 /* callback_n(6) _s_constant */#define DB_RPC2ND_GETZIP 0x00800000 /* sj_getzip */#define DB_RPC2ND_GETNAME 0x00900000 /* sj_getname */#endif/******************************************************* * Forward structure declarations. *******************************************************/struct __db_reginfo_t; typedef struct __db_reginfo_t REGINFO;struct __db_txnhead; typedef struct __db_txnhead DB_TXNHEAD;struct __db_txnlist; typedef struct __db_txnlist DB_TXNLIST;struct __vrfy_childinfo; typedef struct __vrfy_childinfo VRFY_CHILDINFO;struct __vrfy_dbinfo; typedef struct __vrfy_dbinfo VRFY_DBINFO;struct __vrfy_pageinfo; typedef struct __vrfy_pageinfo VRFY_PAGEINFO;#if defined(__cplusplus)}#endif/******************************************************* * Remaining general DB includes. *******************************************************/@db_int_def@#include "dbinc/globals.h"#include "dbinc/debug.h"#include "dbinc/mutex.h"#include "dbinc/region.h"#include "dbinc_auto/mutex_ext.h" /* XXX: Include after region.h. */#include "dbinc_auto/env_ext.h"#include "dbinc/os.h"#include "dbinc/rep.h"#include "dbinc_auto/clib_ext.h"#include "dbinc_auto/common_ext.h"/******************************************************* * Remaining Log. * These need to be defined after the general includes * because they need rep.h from above. *******************************************************//* * Test if the environment is currently logging changes. If we're in recovery * or we're a replication client, we don't need to log changes because they're * already in the log, even though we have a fully functional log system. */#define DBENV_LOGGING(dbenv) \ (LOGGING_ON(dbenv) && !IS_REP_CLIENT(dbenv) && \ (!IS_RECOVERING(dbenv)))/* * Test if we need to log a change. By default, we don't log operations without * associated transactions, unless DIAGNOSTIC, DEBUG_ROP or DEBUG_WOP are on. * This is because we want to get log records for read/write operations, and, if * we trying to debug something, more information is always better. * * The DBC_RECOVER flag is set when we're in abort, as well as during recovery; * thus DBC_LOGGING may be false for a particular dbc even when DBENV_LOGGING * is true. * * We explicitly use LOGGING_ON/IS_REP_CLIENT here because we don't want to pull * in the log headers, which IS_RECOVERING (and thus DBENV_LOGGING) rely on, and * because DBC_RECOVER should be set anytime IS_RECOVERING would be true. */#if defined(DIAGNOSTIC) || defined(DEBUG_ROP) || defined(DEBUG_WOP)#define DBC_LOGGING(dbc) \ (LOGGING_ON((dbc)->dbp->dbenv) && \ !F_ISSET((dbc), DBC_RECOVER) && !IS_REP_CLIENT((dbc)->dbp->dbenv))#else#define DBC_LOGGING(dbc) \ ((dbc)->txn != NULL && LOGGING_ON((dbc)->dbp->dbenv) && \ !F_ISSET((dbc), DBC_RECOVER) && !IS_REP_CLIENT((dbc)->dbp->dbenv))#endif#endif /* !_DB_INTERNAL_H_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -