diff options
Diffstat (limited to 'src/third_party/wiredtiger/src/session/session_api.c')
-rw-r--r-- | src/third_party/wiredtiger/src/session/session_api.c | 263 |
1 files changed, 262 insertions, 1 deletions
diff --git a/src/third_party/wiredtiger/src/session/session_api.c b/src/third_party/wiredtiger/src/session/session_api.c index f9eefc9e536..38bafdae4b0 100644 --- a/src/third_party/wiredtiger/src/session/session_api.c +++ b/src/third_party/wiredtiger/src/session/session_api.c @@ -450,6 +450,25 @@ err: } /* + * __session_reconfigure_notsup -- + * WT_SESSION->reconfigure method; not supported version. + */ +static int +__session_reconfigure_notsup(WT_SESSION *wt_session, const char *config) +{ + WT_DECL_RET; + WT_SESSION_IMPL *session; + + WT_UNUSED(config); + + session = (WT_SESSION_IMPL *)wt_session; + SESSION_API_CALL_NOCONF(session, reconfigure); + ret = __wt_session_notsup(session); +err: + API_END_RET(session, ret); +} + +/* * __session_open_cursor_int -- * Internal version of WT_SESSION::open_cursor, with second cursor arg. */ @@ -619,6 +638,19 @@ __session_open_cursor(WT_SESSION *wt_session, const char *uri, WT_CURSOR *to_dup session = (WT_SESSION_IMPL *)wt_session; SESSION_API_CALL(session, open_cursor, config, cfg); + /* + * Check for early usage of a user session to collect statistics. If the connection is not fully + * ready but can be used, then only allow a cursor uri of "statistics:" only. The conditional is + * complicated. Allow the cursor to open if any of these conditions are met: + * - The connection is ready + * - The session is an internal session + * - The connection is minimally ready and the URI is "statistics:" + */ + if (!F_ISSET(S2C(session), WT_CONN_READY) && !F_ISSET(session, WT_SESSION_INTERNAL) && + (!F_ISSET(S2C(session), WT_CONN_MINIMAL) || strcmp(uri, "statistics:") != 0)) + WT_ERR_MSG( + session, EINVAL, "cannot open a non-statistics cursor before connection is opened"); + statjoin = (to_dup != NULL && uri != NULL && strcmp(uri, "statistics:join") == 0); if (!statjoin) { if ((to_dup == NULL && uri == NULL) || (to_dup != NULL && uri != NULL)) @@ -1074,6 +1106,23 @@ err: } /* + * __session_reset_notsup -- + * WT_SESSION->reset method; not supported version. + */ +static int +__session_reset_notsup(WT_SESSION *wt_session) +{ + WT_DECL_RET; + WT_SESSION_IMPL *session; + + session = (WT_SESSION_IMPL *)wt_session; + SESSION_API_CALL_NOCONF(session, reset); + ret = __wt_session_notsup(session); +err: + API_END_RET(session, ret); +} + +/* * __session_drop -- * WT_SESSION->drop method. */ @@ -1278,6 +1327,28 @@ err: } /* + * __session_join_notsup -- + * WT_SESSION->join method; not supported version. + */ +static int +__session_join_notsup( + WT_SESSION *wt_session, WT_CURSOR *join_cursor, WT_CURSOR *ref_cursor, const char *config) +{ + WT_DECL_RET; + WT_SESSION_IMPL *session; + + WT_UNUSED(join_cursor); + WT_UNUSED(ref_cursor); + WT_UNUSED(config); + + session = (WT_SESSION_IMPL *)wt_session; + SESSION_API_CALL_NOCONF(session, join); + ret = __wt_session_notsup(session); +err: + API_END_RET(session, ret); +} + +/* * __session_salvage_worker -- * Wrapper function for salvage processing. */ @@ -1639,6 +1710,26 @@ err: } /* + * __session_verify_notsup -- + * WT_SESSION->verify method; not supported version. + */ +static int +__session_verify_notsup(WT_SESSION *wt_session, const char *uri, const char *config) +{ + WT_DECL_RET; + WT_SESSION_IMPL *session; + + WT_UNUSED(uri); + WT_UNUSED(config); + + session = (WT_SESSION_IMPL *)wt_session; + SESSION_API_CALL_NOCONF(session, verify); + ret = __wt_session_notsup(session); +err: + API_END_RET(session, ret); +} + +/* * __session_begin_transaction -- * WT_SESSION->begin_transaction method. */ @@ -1662,6 +1753,25 @@ err: } /* + * __session_begin_transaction_notsup -- + * WT_SESSION->begin_transaction method; not supported version. + */ +static int +__session_begin_transaction_notsup(WT_SESSION *wt_session, const char *config) +{ + WT_DECL_RET; + WT_SESSION_IMPL *session; + + WT_UNUSED(config); + + session = (WT_SESSION_IMPL *)wt_session; + SESSION_API_CALL_NOCONF(session, begin_transaction); + ret = __wt_session_notsup(session); +err: + API_END_RET(session, ret); +} + +/* * __session_commit_transaction -- * WT_SESSION->commit_transaction method. */ @@ -1714,6 +1824,25 @@ err: } /* + * __session_commit_transaction_notsup -- + * WT_SESSION->commit_transaction method; not supported version. + */ +static int +__session_commit_transaction_notsup(WT_SESSION *wt_session, const char *config) +{ + WT_DECL_RET; + WT_SESSION_IMPL *session; + + WT_UNUSED(config); + + session = (WT_SESSION_IMPL *)wt_session; + SESSION_API_CALL_NOCONF(session, commit_transaction); + ret = __wt_session_notsup(session); +err: + API_END_RET(session, ret); +} + +/* * __session_prepare_transaction -- * WT_SESSION->prepare_transaction method. */ @@ -1792,6 +1921,25 @@ err: } /* + * __session_rollback_transaction_notsup -- + * WT_SESSION->rollback_transaction method; not supported version. + */ +static int +__session_rollback_transaction_notsup(WT_SESSION *wt_session, const char *config) +{ + WT_DECL_RET; + WT_SESSION_IMPL *session; + + WT_UNUSED(config); + + session = (WT_SESSION_IMPL *)wt_session; + SESSION_API_CALL_NOCONF(session, rollback_transaction); + ret = __wt_session_notsup(session); +err: + API_END_RET(session, ret); +} + +/* * __session_timestamp_transaction -- * WT_SESSION->timestamp_transaction method. Also see __session_timestamp_transaction_uint if * config parsing is a performance issue. @@ -1816,6 +1964,25 @@ err: } /* + * __session_timestamp_transaction_notsup -- + * WT_SESSION->timestamp_transaction method; not supported version. + */ +static int +__session_timestamp_transaction_notsup(WT_SESSION *wt_session, const char *config) +{ + WT_DECL_RET; + WT_SESSION_IMPL *session; + + WT_UNUSED(config); + + session = (WT_SESSION_IMPL *)wt_session; + SESSION_API_CALL_NOCONF(session, timestamp_transaction); + ret = __wt_session_notsup(session); +err: + API_END_RET(session, ret); +} + +/* * __session_timestamp_transaction_uint -- * WT_SESSION->timestamp_transaction_uint method. */ @@ -1834,6 +2001,27 @@ err: } /* + * __session_timestamp_transaction_uint_notsup -- + * WT_SESSION->timestamp_transaction_uint_ method; not supported version. + */ +static int +__session_timestamp_transaction_uint_notsup( + WT_SESSION *wt_session, WT_TS_TXN_TYPE which, uint64_t ts) +{ + WT_DECL_RET; + WT_SESSION_IMPL *session; + + WT_UNUSED(which); + WT_UNUSED(ts); + + session = (WT_SESSION_IMPL *)wt_session; + SESSION_API_CALL_NOCONF(session, timestamp_transaction_uint); + ret = __wt_session_notsup(session); +err: + API_END_RET(session, ret); +} + +/* * __session_query_timestamp -- * WT_SESSION->query_timestamp method. */ @@ -1852,6 +2040,26 @@ err: } /* + * __session_query_timestamp_notsup -- + * WT_SESSION->query_timestamp method; not supported version. + */ +static int +__session_query_timestamp_notsup(WT_SESSION *wt_session, char *hex_timestamp, const char *config) +{ + WT_DECL_RET; + WT_SESSION_IMPL *session; + + WT_UNUSED(hex_timestamp); + WT_UNUSED(config); + + session = (WT_SESSION_IMPL *)wt_session; + SESSION_API_CALL_NOCONF(session, query_timestamp); + ret = __wt_session_notsup(session); +err: + API_END_RET(session, ret); +} + +/* * __session_reset_snapshot -- * WT_SESSION->reset_snapshot method. */ @@ -1880,6 +2088,23 @@ __session_reset_snapshot(WT_SESSION *wt_session) } /* + * __session_reset_snapshot_notsup -- + * WT_SESSION->reset_snapshot method; not supported version. + */ +static int +__session_reset_snapshot_notsup(WT_SESSION *wt_session) +{ + WT_DECL_RET; + WT_SESSION_IMPL *session; + + session = (WT_SESSION_IMPL *)wt_session; + SESSION_API_CALL_NOCONF(session, reset_snapshot); + ret = __wt_session_notsup(session); +err: + API_END_RET(session, ret); +} + +/* * __session_transaction_pinned_range -- * WT_SESSION->transaction_pinned_range method. */ @@ -1912,6 +2137,25 @@ err: } /* + * __session_transaction_pinned_range_notsup -- + * WT_SESSION->transaction_pinned_range method; not supported version. + */ +static int +__session_transaction_pinned_range_notsup(WT_SESSION *wt_session, uint64_t *prange) +{ + WT_DECL_RET; + WT_SESSION_IMPL *session; + + WT_UNUSED(prange); + + session = (WT_SESSION_IMPL *)wt_session; + SESSION_API_CALL_NOCONF(session, transaction_pinned_range); + ret = __wt_session_notsup(session); +err: + API_END_RET(session, ret); +} + +/* * __session_get_rollback_reason -- * WT_SESSION->get_rollback_reason method. */ @@ -2069,6 +2313,19 @@ __open_session(WT_CONNECTION_IMPL *conn, WT_EVENT_HANDLER *event_handler, const __session_query_timestamp, __session_timestamp_transaction, __session_timestamp_transaction_uint, __session_checkpoint, __session_reset_snapshot, __session_transaction_pinned_range, __session_get_rollback_reason, __wt_session_breakpoint}, + stds_min = {NULL, NULL, __session_close, __session_reconfigure_notsup, + __session_flush_tier_readonly, __wt_session_strerror, __session_open_cursor, + __session_alter_readonly, __session_create_readonly, __wt_session_compact_readonly, + __session_drop_readonly, __session_join_notsup, __session_log_flush_readonly, + __session_log_printf_readonly, __session_rename_readonly, __session_reset_notsup, + __session_salvage_readonly, __session_truncate_readonly, __session_upgrade_readonly, + __session_verify_notsup, __session_begin_transaction_notsup, + __session_commit_transaction_notsup, __session_prepare_transaction_readonly, + __session_rollback_transaction_notsup, __session_query_timestamp_notsup, + __session_timestamp_transaction_notsup, __session_timestamp_transaction_uint_notsup, + __session_checkpoint_readonly, __session_reset_snapshot_notsup, + __session_transaction_pinned_range_notsup, __session_get_rollback_reason, + __wt_session_breakpoint}, stds_readonly = {NULL, NULL, __session_close, __session_reconfigure, __session_flush_tier_readonly, __wt_session_strerror, __session_open_cursor, __session_alter_readonly, __session_create_readonly, __wt_session_compact_readonly, @@ -2115,7 +2372,11 @@ __open_session(WT_CONNECTION_IMPL *conn, WT_EVENT_HANDLER *event_handler, const if (i >= conn->session_cnt) /* Defend against off-by-one errors. */ conn->session_cnt = i + 1; - session_ret->iface = F_ISSET(conn, WT_CONN_READONLY) ? stds_readonly : stds; + /* Find the set of methods appropriate to this session. */ + if (F_ISSET(conn, WT_CONN_MINIMAL) && !F_ISSET(session, WT_SESSION_INTERNAL)) + session_ret->iface = stds_min; + else + session_ret->iface = F_ISSET(conn, WT_CONN_READONLY) ? stds_readonly : stds; session_ret->iface.connection = &conn->iface; session_ret->name = NULL; |