mirror of
https://github.com/isar/libmdbx.git
synced 2025-01-20 05:28:21 +08:00
mdbx: refine retired-next-reader insode mdbx_txn_info().
Change-Id: Iba57365cc4b7f4f09a0698502bc7aafcb6e67478
This commit is contained in:
parent
dcd3c497d9
commit
86496e4480
14
mdbx.h
14
mdbx.h
@ -2132,13 +2132,13 @@ typedef struct MDBX_txn_info {
|
|||||||
For WRITE transaction: the space inside transaction
|
For WRITE transaction: the space inside transaction
|
||||||
that left to MDBX_TXN_FULL error. */
|
that left to MDBX_TXN_FULL error. */
|
||||||
|
|
||||||
uint64_t
|
uint64_t txn_space_dirty; /* For READ-ONLY transaction (provided if
|
||||||
txn_space_dirty; /* For READ-ONLY transaction (provided if scan_rlt=true):
|
scan_rlt=true): The space that actually become
|
||||||
The retired distance for next more recent reader, i.e.
|
available for reuse when only this transaction
|
||||||
the space that actually become available for reuse
|
will be finished.
|
||||||
when only this transaction will be finished. For WRITE
|
For WRITE transaction: The summarized size of the
|
||||||
transaction: The summarized size of the dirty database
|
dirty database pages that generated during this
|
||||||
pages that generated during this transaction. */
|
transaction. */
|
||||||
} MDBX_txn_info;
|
} MDBX_txn_info;
|
||||||
|
|
||||||
/* Return information about the MDBX transaction.
|
/* Return information about the MDBX transaction.
|
||||||
|
@ -4104,6 +4104,7 @@ int mdbx_txn_info(MDBX_txn *txn, MDBX_txn_info *info, int scan_rlt) {
|
|||||||
env, (pgno_t)(head_retired -
|
env, (pgno_t)(head_retired -
|
||||||
txn->mt_ro_reader->mr_snapshot_pages_retired));
|
txn->mt_ro_reader->mr_snapshot_pages_retired));
|
||||||
|
|
||||||
|
size_t retired_next_reader = 0;
|
||||||
MDBX_lockinfo *const lck = env->me_lck;
|
MDBX_lockinfo *const lck = env->me_lck;
|
||||||
if (scan_rlt && info->txn_reader_lag > 1 && lck) {
|
if (scan_rlt && info->txn_reader_lag > 1 && lck) {
|
||||||
/* find next more recent reader */
|
/* find next more recent reader */
|
||||||
@ -4122,15 +4123,20 @@ int mdbx_txn_info(MDBX_txn *txn, MDBX_txn_info *info, int scan_rlt) {
|
|||||||
lck->mti_readers[i].mr_snapshot_pages_retired) ||
|
lck->mti_readers[i].mr_snapshot_pages_retired) ||
|
||||||
snap_txnid != safe64_read(&lck->mti_readers[i].mr_txnid))
|
snap_txnid != safe64_read(&lck->mti_readers[i].mr_txnid))
|
||||||
goto retry;
|
goto retry;
|
||||||
if (snap_txnid > txn->mt_txnid && snap_txnid < next_reader) {
|
if (snap_txnid <= txn->mt_txnid) {
|
||||||
|
retired_next_reader = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (snap_txnid < next_reader) {
|
||||||
next_reader = snap_txnid;
|
next_reader = snap_txnid;
|
||||||
info->txn_space_dirty = pgno2bytes(
|
retired_next_reader = pgno2bytes(
|
||||||
env, (pgno_t)(snap_retired -
|
env, (pgno_t)(snap_retired -
|
||||||
txn->mt_ro_reader->mr_snapshot_pages_retired));
|
txn->mt_ro_reader->mr_snapshot_pages_retired));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
info->txn_space_dirty = retired_next_reader;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
info->txn_space_limit_soft = pgno2bytes(env, txn->mt_geo.now);
|
info->txn_space_limit_soft = pgno2bytes(env, txn->mt_geo.now);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user