mirror of
https://github.com/isar/libmdbx.git
synced 2025-01-04 17:24:12 +08:00
mdbx: rearrange MDBX_env
ro/rw fields.
Change-Id: I055aa6ad592930be2d5d676977fbaa84149472ce
This commit is contained in:
parent
8b95be91db
commit
13a784eeed
@ -1085,6 +1085,7 @@ typedef struct MDBX_cursor_couple {
|
|||||||
|
|
||||||
/* The database environment. */
|
/* The database environment. */
|
||||||
struct MDBX_env {
|
struct MDBX_env {
|
||||||
|
/* ----------------------------------------------------- mostly static part */
|
||||||
#define MDBX_ME_SIGNATURE UINT32_C(0x9A899641)
|
#define MDBX_ME_SIGNATURE UINT32_C(0x9A899641)
|
||||||
MDBX_atomic_uint32_t me_signature;
|
MDBX_atomic_uint32_t me_signature;
|
||||||
/* Failed to update the meta page. Probably an I/O error. */
|
/* Failed to update the meta page. Probably an I/O error. */
|
||||||
@ -1110,36 +1111,18 @@ struct MDBX_env {
|
|||||||
uint8_t me_psize2log; /* log2 of DB page size */
|
uint8_t me_psize2log; /* log2 of DB page size */
|
||||||
int8_t me_stuck_meta; /* recovery-only: target meta page or less that zero */
|
int8_t me_stuck_meta; /* recovery-only: target meta page or less that zero */
|
||||||
unsigned me_os_psize; /* OS page size, from mdbx_syspagesize() */
|
unsigned me_os_psize; /* OS page size, from mdbx_syspagesize() */
|
||||||
unsigned me_maxreaders; /* size of the reader table */
|
unsigned me_maxreaders; /* size of the reader table */
|
||||||
mdbx_fastmutex_t me_dbi_lock;
|
|
||||||
MDBX_dbi me_numdbs; /* number of DBs opened */
|
|
||||||
MDBX_dbi me_maxdbs; /* size of the DB table */
|
MDBX_dbi me_maxdbs; /* size of the DB table */
|
||||||
uint32_t me_pid; /* process ID of this env */
|
uint32_t me_pid; /* process ID of this env */
|
||||||
mdbx_thread_key_t me_txkey; /* thread-key for readers */
|
mdbx_thread_key_t me_txkey; /* thread-key for readers */
|
||||||
char *me_pathname; /* path to the DB files */
|
char *me_pathname; /* path to the DB files */
|
||||||
void *me_pbuf; /* scratch area for DUPSORT put() */
|
void *me_pbuf; /* scratch area for DUPSORT put() */
|
||||||
MDBX_txn *me_txn; /* current write transaction */
|
|
||||||
MDBX_txn *me_txn0; /* prealloc'd write transaction */
|
MDBX_txn *me_txn0; /* prealloc'd write transaction */
|
||||||
|
|
||||||
/* write-txn lock */
|
|
||||||
#if MDBX_LOCKING == MDBX_LOCKING_SYSV
|
|
||||||
union {
|
|
||||||
key_t key;
|
|
||||||
int semid;
|
|
||||||
} me_sysv_ipc;
|
|
||||||
#endif /* MDBX_LOCKING == MDBX_LOCKING_SYSV */
|
|
||||||
|
|
||||||
#if MDBX_LOCKING > 0
|
|
||||||
mdbx_ipclock_t *me_wlock;
|
|
||||||
#endif /* MDBX_LOCKING > 0 */
|
|
||||||
|
|
||||||
MDBX_dbx *me_dbxs; /* array of static DB info */
|
MDBX_dbx *me_dbxs; /* array of static DB info */
|
||||||
uint16_t *me_dbflags; /* array of flags from MDBX_db.md_flags */
|
uint16_t *me_dbflags; /* array of flags from MDBX_db.md_flags */
|
||||||
unsigned *me_dbiseqs; /* array of dbi sequence numbers */
|
unsigned *me_dbiseqs; /* array of dbi sequence numbers */
|
||||||
atomic_txnid_t *me_oldest; /* ID of oldest reader last time we looked */
|
atomic_txnid_t *me_oldest; /* ID of oldest reader last time we looked */
|
||||||
MDBX_page *me_dp_reserve; /* list of malloc'ed blocks for re-use */
|
|
||||||
/* PNL of pages that became unused in a write txn */
|
|
||||||
MDBX_PNL me_retired_pages;
|
|
||||||
/* Number of freelist items that can fit in a single overflow page */
|
/* Number of freelist items that can fit in a single overflow page */
|
||||||
unsigned me_maxgc_ov1page;
|
unsigned me_maxgc_ov1page;
|
||||||
uint32_t me_live_reader; /* have liveness lock in reader table */
|
uint32_t me_live_reader; /* have liveness lock in reader table */
|
||||||
@ -1152,7 +1135,6 @@ struct MDBX_env {
|
|||||||
pgno_t *me_readahead_anchor;
|
pgno_t *me_readahead_anchor;
|
||||||
MDBX_atomic_uint32_t *me_meta_sync_txnid;
|
MDBX_atomic_uint32_t *me_meta_sync_txnid;
|
||||||
MDBX_hsr_func *me_hsr_callback; /* Callback for kicking laggard readers */
|
MDBX_hsr_func *me_hsr_callback; /* Callback for kicking laggard readers */
|
||||||
unsigned me_dp_reserve_len;
|
|
||||||
struct {
|
struct {
|
||||||
unsigned dp_reserve_limit;
|
unsigned dp_reserve_limit;
|
||||||
unsigned rp_augment_limit;
|
unsigned rp_augment_limit;
|
||||||
@ -1163,6 +1145,51 @@ struct MDBX_env {
|
|||||||
uint8_t spill_min_denominator;
|
uint8_t spill_min_denominator;
|
||||||
uint8_t spill_parent4child_denominator;
|
uint8_t spill_parent4child_denominator;
|
||||||
} me_options;
|
} me_options;
|
||||||
|
|
||||||
|
/* struct me_dbgeo used for accepting db-geo params from user for the new
|
||||||
|
* database creation, i.e. when mdbx_env_set_geometry() was called before
|
||||||
|
* mdbx_env_open(). */
|
||||||
|
struct {
|
||||||
|
size_t lower; /* minimal size of datafile */
|
||||||
|
size_t upper; /* maximal size of datafile */
|
||||||
|
size_t now; /* current size of datafile */
|
||||||
|
size_t grow; /* step to grow datafile */
|
||||||
|
size_t shrink; /* threshold to shrink datafile */
|
||||||
|
} me_dbgeo;
|
||||||
|
|
||||||
|
#if MDBX_LOCKING == MDBX_LOCKING_SYSV
|
||||||
|
union {
|
||||||
|
key_t key;
|
||||||
|
int semid;
|
||||||
|
} me_sysv_ipc;
|
||||||
|
#endif /* MDBX_LOCKING == MDBX_LOCKING_SYSV */
|
||||||
|
|
||||||
|
MDBX_env *me_lcklist_next;
|
||||||
|
|
||||||
|
/* --------------------------------------------------- mostly volatile part */
|
||||||
|
|
||||||
|
MDBX_txn *me_txn; /* current write transaction */
|
||||||
|
mdbx_fastmutex_t me_dbi_lock;
|
||||||
|
MDBX_dbi me_numdbs; /* number of DBs opened */
|
||||||
|
|
||||||
|
MDBX_page *me_dp_reserve; /* list of malloc'ed blocks for re-use */
|
||||||
|
unsigned me_dp_reserve_len;
|
||||||
|
/* PNL of pages that became unused in a write txn */
|
||||||
|
MDBX_PNL me_retired_pages;
|
||||||
|
|
||||||
|
/* write-txn lock */
|
||||||
|
#if MDBX_LOCKING > 0
|
||||||
|
mdbx_ipclock_t *me_wlock;
|
||||||
|
#endif /* MDBX_LOCKING > 0 */
|
||||||
|
|
||||||
|
#if defined(_WIN32) || defined(_WIN64)
|
||||||
|
MDBX_srwlock me_remap_guard;
|
||||||
|
/* Workaround for LockFileEx and WriteFile multithread bug */
|
||||||
|
CRITICAL_SECTION me_windowsbug_lock;
|
||||||
|
#else
|
||||||
|
mdbx_fastmutex_t me_remap_guard;
|
||||||
|
#endif
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
#if MDBX_LOCKING > 0
|
#if MDBX_LOCKING > 0
|
||||||
mdbx_ipclock_t wlock;
|
mdbx_ipclock_t wlock;
|
||||||
@ -1176,6 +1203,9 @@ struct MDBX_env {
|
|||||||
pgno_t readahead_anchor;
|
pgno_t readahead_anchor;
|
||||||
MDBX_atomic_uint32_t meta_sync_txnid;
|
MDBX_atomic_uint32_t meta_sync_txnid;
|
||||||
} me_lckless_stub;
|
} me_lckless_stub;
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------- debugging */
|
||||||
|
|
||||||
#if MDBX_DEBUG
|
#if MDBX_DEBUG
|
||||||
MDBX_assert_func *me_assert_func; /* Callback for assertion failures */
|
MDBX_assert_func *me_assert_func; /* Callback for assertion failures */
|
||||||
#endif
|
#endif
|
||||||
@ -1185,26 +1215,6 @@ struct MDBX_env {
|
|||||||
#if defined(MDBX_USE_VALGRIND) || defined(__SANITIZE_ADDRESS__)
|
#if defined(MDBX_USE_VALGRIND) || defined(__SANITIZE_ADDRESS__)
|
||||||
pgno_t me_poison_edge;
|
pgno_t me_poison_edge;
|
||||||
#endif /* MDBX_USE_VALGRIND || __SANITIZE_ADDRESS__ */
|
#endif /* MDBX_USE_VALGRIND || __SANITIZE_ADDRESS__ */
|
||||||
MDBX_env *me_lcklist_next;
|
|
||||||
|
|
||||||
/* struct me_dbgeo used for accepting db-geo params from user for the new
|
|
||||||
* database creation, i.e. when mdbx_env_set_geometry() was called before
|
|
||||||
* mdbx_env_open(). */
|
|
||||||
struct {
|
|
||||||
size_t lower; /* minimal size of datafile */
|
|
||||||
size_t upper; /* maximal size of datafile */
|
|
||||||
size_t now; /* current size of datafile */
|
|
||||||
size_t grow; /* step to grow datafile */
|
|
||||||
size_t shrink; /* threshold to shrink datafile */
|
|
||||||
} me_dbgeo;
|
|
||||||
|
|
||||||
#if defined(_WIN32) || defined(_WIN64)
|
|
||||||
MDBX_srwlock me_remap_guard;
|
|
||||||
/* Workaround for LockFileEx and WriteFile multithread bug */
|
|
||||||
CRITICAL_SECTION me_windowsbug_lock;
|
|
||||||
#else
|
|
||||||
mdbx_fastmutex_t me_remap_guard;
|
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifndef __cplusplus
|
#ifndef __cplusplus
|
||||||
|
Loading…
x
Reference in New Issue
Block a user