mirror of
https://git.openldap.org/openldap/openldap.git
synced 2026-02-03 20:40:05 -05:00
Also support NOMETASYNC on txn_begin
This commit is contained in:
parent
3368d1f5e2
commit
8bb541bc40
2 changed files with 7 additions and 2 deletions
|
|
@ -932,6 +932,8 @@ int mdb_env_set_assert(MDB_env *env, MDB_assert_func *func);
|
|||
* This transaction will not perform any write operations.
|
||||
* <li>#MDB_NOSYNC
|
||||
* Don't flush system buffers to disk when committing this transaction.
|
||||
* <li>#MDB_NOMETASYNC
|
||||
* Flush system buffers but omit metadata flush when committing this transaction.
|
||||
* </ul>
|
||||
* @param[out] txn Address where the new #MDB_txn handle will be stored
|
||||
* @return A non-zero error value on failure and 0 on success. Some possible
|
||||
|
|
|
|||
|
|
@ -1085,6 +1085,7 @@ struct MDB_txn {
|
|||
#define MDB_TXN_DIRTY 0x04 /**< must write, even if dirty list is empty */
|
||||
#define MDB_TXN_SPILLS 0x08 /**< txn or a parent has spilled pages */
|
||||
#define MDB_TXN_NOSYNC 0x10 /**< don't sync this txn on commit */
|
||||
#define MDB_TXN_NOMETASYNC 0x20 /**< don't sync meta for this txn on commit */
|
||||
/** @} */
|
||||
unsigned int mt_flags; /**< @ref mdb_txn */
|
||||
/** #dirty_list room: Array size - \#dirty pages visible to this txn.
|
||||
|
|
@ -2758,6 +2759,8 @@ mdb_txn_begin(MDB_env *env, MDB_txn *parent, unsigned int flags, MDB_txn **ret)
|
|||
} else {
|
||||
if (flags & MDB_NOSYNC)
|
||||
txn->mt_flags |= MDB_TXN_NOSYNC;
|
||||
if (flags & MDB_NOMETASYNC)
|
||||
txn->mt_flags |= MDB_TXN_NOMETASYNC;
|
||||
txn->mt_cursors = (MDB_cursor **)(txn->mt_dbs + env->me_maxdbs);
|
||||
if (parent) {
|
||||
txn->mt_dbiseqs = parent->mt_dbiseqs;
|
||||
|
|
@ -3688,7 +3691,7 @@ mdb_env_write_meta(MDB_txn *txn)
|
|||
__sync_synchronize();
|
||||
#endif
|
||||
mp->mm_txnid = txn->mt_txnid;
|
||||
if (F_ISSET(txn->mt_flags, MDB_TXN_NOSYNC))
|
||||
if (txn->mt_flags & (MDB_TXN_NOSYNC|MDB_TXN_NOMETASYNC))
|
||||
goto done;
|
||||
if (!(env->me_flags & (MDB_NOMETASYNC|MDB_NOSYNC))) {
|
||||
unsigned meta_size = env->me_psize;
|
||||
|
|
@ -3727,7 +3730,7 @@ mdb_env_write_meta(MDB_txn *txn)
|
|||
|
||||
/* Write to the SYNC fd */
|
||||
mfd = ((env->me_flags & (MDB_NOSYNC|MDB_NOMETASYNC)) ||
|
||||
(txn->mt_flags & MDB_TXN_NOSYNC)) ?
|
||||
(txn->mt_flags & (MDB_TXN_NOSYNC|MDB_TXN_NOMETASYNC))) ?
|
||||
env->me_fd : env->me_mfd;
|
||||
#ifdef _WIN32
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in a new issue