summaryrefslogtreecommitdiff
path: root/src/third_party/wiredtiger/src/session/session_api.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/third_party/wiredtiger/src/session/session_api.c')
-rw-r--r--src/third_party/wiredtiger/src/session/session_api.c263
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;