summaryrefslogtreecommitdiff
path: root/src/session/session_api.c
diff options
context:
space:
mode:
authorAlex Gorrod <alexg@wiredtiger.com>2014-10-27 11:04:17 +1100
committerAlex Gorrod <alexg@wiredtiger.com>2014-10-27 11:04:17 +1100
commitad7743846f5e9216400bef74a58c6d0cc1dd4570 (patch)
tree64cb4f31d1a390329f6410e32243ef4226c61173 /src/session/session_api.c
parent8d810882480c8f50d342a5aa9ada8693d32d7d43 (diff)
downloadmongo-ad7743846f5e9216400bef74a58c6d0cc1dd4570.tar.gz
Add a new WT_SESSION::transaction_range_pin method.
Can be used by applications to identify sessions that are keeping transaction IDs pinned.
Diffstat (limited to 'src/session/session_api.c')
-rw-r--r--src/session/session_api.c27
1 files changed, 26 insertions, 1 deletions
diff --git a/src/session/session_api.c b/src/session/session_api.c
index 092bcad3f73..3fb1d444d9d 100644
--- a/src/session/session_api.c
+++ b/src/session/session_api.c
@@ -772,6 +772,30 @@ err: API_END_RET(session, ret);
}
/*
+ * __session_transaction_range_pin --
+ * WT_SESSION->transaction_range_pin method.
+ */
+static int
+__session_transaction_range_pin(WT_SESSION *wt_session, uint64_t *prange)
+{
+ WT_SESSION_IMPL *session;
+ WT_TXN_STATE *txn_state;
+
+ session = (WT_SESSION_IMPL *)wt_session;
+
+ *prange = 0;
+ txn_state = WT_SESSION_TXN_STATE(session);
+ if (txn_state->snap_min == 0 && txn_state->id == 0)
+ return (0);
+
+ *prange = S2C(session)->txn_global.current -
+ WT_MIN(txn_state->snap_min, txn_state->id);
+
+ return (0);
+
+}
+
+/*
* __session_checkpoint --
* WT_SESSION->checkpoint method.
*/
@@ -916,7 +940,8 @@ __wt_open_session(WT_CONNECTION_IMPL *conn,
__session_begin_transaction,
__session_commit_transaction,
__session_rollback_transaction,
- __session_checkpoint
+ __session_checkpoint,
+ __session_transaction_range_pin
};
WT_DECL_RET;
WT_SESSION_IMPL *session, *session_ret;