Commit 6dfa1d37 authored by Oleksandr Byelkin's avatar Oleksandr Byelkin

MDEV-8931: (server part of) session state tracking

Postreview fixes.
New MySQL tests fixes.
parent 0ee3e64c
...@@ -95,7 +95,7 @@ enum enum_session_state_type ...@@ -95,7 +95,7 @@ enum enum_session_state_type
SESSION_TRACK_GTIDS, SESSION_TRACK_GTIDS,
SESSION_TRACK_TRANSACTION_CHARACTERISTICS, SESSION_TRACK_TRANSACTION_CHARACTERISTICS,
SESSION_TRACK_TRANSACTION_STATE, SESSION_TRACK_TRANSACTION_STATE,
SESSION_TRACK_END SESSION_TRACK_always_at_the_end
}; };
my_bool my_net_init(NET *net, Vio* vio, void *thd, unsigned int my_flags); my_bool my_net_init(NET *net, Vio* vio, void *thd, unsigned int my_flags);
void my_net_local_init(NET *net); void my_net_local_init(NET *net);
......
...@@ -559,13 +559,13 @@ enum enum_session_state_type ...@@ -559,13 +559,13 @@ enum enum_session_state_type
SESSION_TRACK_GTIDS, SESSION_TRACK_GTIDS,
SESSION_TRACK_TRANSACTION_CHARACTERISTICS, /* Transaction chistics */ SESSION_TRACK_TRANSACTION_CHARACTERISTICS, /* Transaction chistics */
SESSION_TRACK_TRANSACTION_STATE, /* Transaction state */ SESSION_TRACK_TRANSACTION_STATE, /* Transaction state */
SESSION_TRACK_END /* must be last */ SESSION_TRACK_always_at_the_end /* must be last */
}; };
#define SESSION_TRACK_BEGIN SESSION_TRACK_SYSTEM_VARIABLES #define SESSION_TRACK_BEGIN SESSION_TRACK_SYSTEM_VARIABLES
#define IS_SESSION_STATE_TYPE(T) \ #define IS_SESSION_STATE_TYPE(T) \
(((int)(T) >= SESSION_TRACK_BEGIN) && ((T) < SESSION_TRACK_END)) (((int)(T) >= SESSION_TRACK_BEGIN) && ((T) < SESSION_TRACK_always_at_the_end))
#define net_new_transaction(net) ((net)->pkt_nr=0) #define net_new_transaction(net) ((net)->pkt_nr=0)
......
...@@ -1172,8 +1172,7 @@ bool ...@@ -1172,8 +1172,7 @@ bool
net_send_ok(THD *thd, net_send_ok(THD *thd,
uint server_status, uint statement_warn_count, uint server_status, uint statement_warn_count,
ulonglong affected_rows, ulonglong id, const char *message, ulonglong affected_rows, ulonglong id, const char *message,
bool unused1, bool, bool)
bool unused2)
{ {
DBUG_ENTER("emb_net_send_ok"); DBUG_ENTER("emb_net_send_ok");
MYSQL_DATA *data; MYSQL_DATA *data;
......
...@@ -909,7 +909,11 @@ The following options may be given as the first argument: ...@@ -909,7 +909,11 @@ The following options may be given as the first argument:
--session-track-state-change --session-track-state-change
Track changes to the session state. Track changes to the session state.
--session-track-system-variables=name --session-track-system-variables=name
Track changes in registered system variables. Track changes in registered system variables. For
compatibility with MySQL defaults this variable should be
set to "autocommit, character_set_client,
character_set_connection, character_set_results,
time_zone"
--session-track-transaction-info=name --session-track-transaction-info=name
Track changes to the transaction attributes. OFF to Track changes to the transaction attributes. OFF to
disable; STATE to track just transaction state (Is there disable; STATE to track just transaction state (Is there
...@@ -1403,7 +1407,7 @@ secure-file-priv (No default value) ...@@ -1403,7 +1407,7 @@ secure-file-priv (No default value)
server-id 1 server-id 1
session-track-schema TRUE session-track-schema TRUE
session-track-state-change FALSE session-track-state-change FALSE
session-track-system-variables autocommit,character_set_client,character_set_connection,character_set_results,time_zone session-track-system-variables
session-track-transaction-info OFF session-track-transaction-info OFF
show-slave-auth-info FALSE show-slave-auth-info FALSE
silent-startup FALSE silent-startup FALSE
......
...@@ -5,25 +5,25 @@ ...@@ -5,25 +5,25 @@
# Global - default # Global - default
SELECT @@global.session_track_system_variables; SELECT @@global.session_track_system_variables;
@@global.session_track_system_variables @@global.session_track_system_variables
autocommit,character_set_client,character_set_connection,character_set_results,time_zone
# Session - default # Session - default
SELECT @@session.session_track_system_variables; SELECT @@session.session_track_system_variables;
@@session.session_track_system_variables @@session.session_track_system_variables
autocommit,character_set_client,character_set_connection,character_set_results,time_zone
# via INFORMATION_SCHEMA.GLOBAL_VARIABLES # via INFORMATION_SCHEMA.GLOBAL_VARIABLES
SELECT * FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME LIKE 'session_track%' ORDER BY VARIABLE_NAME; SELECT * FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME LIKE 'session_track%' ORDER BY VARIABLE_NAME;
VARIABLE_NAME VARIABLE_VALUE VARIABLE_NAME VARIABLE_VALUE
SESSION_TRACK_SCHEMA ON SESSION_TRACK_SCHEMA ON
SESSION_TRACK_STATE_CHANGE OFF SESSION_TRACK_STATE_CHANGE OFF
SESSION_TRACK_SYSTEM_VARIABLES autocommit,character_set_client,character_set_connection,character_set_results,time_zone SESSION_TRACK_SYSTEM_VARIABLES
SESSION_TRACK_TRANSACTION_INFO OFF SESSION_TRACK_TRANSACTION_INFO OFF
# via INFORMATION_SCHEMA.SESSION_VARIABLES # via INFORMATION_SCHEMA.SESSION_VARIABLES
SELECT * FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME LIKE 'session_track%' ORDER BY VARIABLE_NAME; SELECT * FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME LIKE 'session_track%' ORDER BY VARIABLE_NAME;
VARIABLE_NAME VARIABLE_VALUE VARIABLE_NAME VARIABLE_VALUE
SESSION_TRACK_SCHEMA ON SESSION_TRACK_SCHEMA ON
SESSION_TRACK_STATE_CHANGE OFF SESSION_TRACK_STATE_CHANGE OFF
SESSION_TRACK_SYSTEM_VARIABLES autocommit,character_set_client,character_set_connection,character_set_results,time_zone SESSION_TRACK_SYSTEM_VARIABLES
SESSION_TRACK_TRANSACTION_INFO OFF SESSION_TRACK_TRANSACTION_INFO OFF
SET @global_saved_tmp = @@global.session_track_system_variables; SET @global_saved_tmp = @@global.session_track_system_variables;
...@@ -34,7 +34,7 @@ SELECT @@global.session_track_system_variables; ...@@ -34,7 +34,7 @@ SELECT @@global.session_track_system_variables;
autocommit autocommit
SELECT @@session.session_track_system_variables; SELECT @@session.session_track_system_variables;
@@session.session_track_system_variables @@session.session_track_system_variables
autocommit,character_set_client,character_set_connection,character_set_results,time_zone
# Altering session variable's value # Altering session variable's value
SET @@session.session_track_system_variables='autocommit'; SET @@session.session_track_system_variables='autocommit';
...@@ -72,25 +72,25 @@ SET @@session.session_track_system_variables = DEFAULT; ...@@ -72,25 +72,25 @@ SET @@session.session_track_system_variables = DEFAULT;
SELECT @@global.session_track_system_variables; SELECT @@global.session_track_system_variables;
@@global.session_track_system_variables @@global.session_track_system_variables
autocommit,character_set_client,character_set_connection,character_set_results,time_zone
SELECT @@session.session_track_system_variables; SELECT @@session.session_track_system_variables;
@@session.session_track_system_variables @@session.session_track_system_variables
autocommit,character_set_client,character_set_connection,character_set_results,time_zone
# Variables' values in a new session (con2). # Variables' values in a new session (con2).
connect con2,"127.0.0.1",root,,test,$MASTER_MYPORT,; connect con2,"127.0.0.1",root,,test,$MASTER_MYPORT,;
SELECT @@global.session_track_system_variables; SELECT @@global.session_track_system_variables;
@@global.session_track_system_variables @@global.session_track_system_variables
autocommit,character_set_client,character_set_connection,character_set_results,time_zone
SELECT @@session.session_track_system_variables; SELECT @@session.session_track_system_variables;
@@session.session_track_system_variables @@session.session_track_system_variables
autocommit,character_set_client,character_set_connection,character_set_results,time_zone
# Altering session should not affect global. # Altering session should not affect global.
SET @@session.session_track_system_variables = 'sql_mode'; SET @@session.session_track_system_variables = 'sql_mode';
SELECT @@global.session_track_system_variables; SELECT @@global.session_track_system_variables;
@@global.session_track_system_variables @@global.session_track_system_variables
autocommit,character_set_client,character_set_connection,character_set_results,time_zone
SELECT @@session.session_track_system_variables; SELECT @@session.session_track_system_variables;
@@session.session_track_system_variables @@session.session_track_system_variables
sql_mode sql_mode
...@@ -104,7 +104,7 @@ SELECT @@global.session_track_system_variables; ...@@ -104,7 +104,7 @@ SELECT @@global.session_track_system_variables;
sql_mode sql_mode
SELECT @@session.session_track_system_variables; SELECT @@session.session_track_system_variables;
@@session.session_track_system_variables @@session.session_track_system_variables
autocommit,character_set_client,character_set_connection,character_set_results,time_zone
# Switching to the default connection. # Switching to the default connection.
connection default; connection default;
......
...@@ -3818,13 +3818,13 @@ ENUM_VALUE_LIST OFF,ON ...@@ -3818,13 +3818,13 @@ ENUM_VALUE_LIST OFF,ON
READ_ONLY NO READ_ONLY NO
COMMAND_LINE_ARGUMENT OPTIONAL COMMAND_LINE_ARGUMENT OPTIONAL
VARIABLE_NAME SESSION_TRACK_SYSTEM_VARIABLES VARIABLE_NAME SESSION_TRACK_SYSTEM_VARIABLES
SESSION_VALUE autocommit,character_set_client,character_set_connection,character_set_results,time_zone SESSION_VALUE
GLOBAL_VALUE autocommit,character_set_client,character_set_connection,character_set_results,time_zone GLOBAL_VALUE
GLOBAL_VALUE_ORIGIN COMPILE-TIME GLOBAL_VALUE_ORIGIN COMPILE-TIME
DEFAULT_VALUE autocommit,character_set_client,character_set_connection,character_set_results,time_zone DEFAULT_VALUE
VARIABLE_SCOPE SESSION VARIABLE_SCOPE SESSION
VARIABLE_TYPE VARCHAR VARIABLE_TYPE VARCHAR
VARIABLE_COMMENT Track changes in registered system variables. VARIABLE_COMMENT Track changes in registered system variables. For compatibility with MySQL defaults this variable should be set to "autocommit, character_set_client, character_set_connection, character_set_results, time_zone"
NUMERIC_MIN_VALUE NULL NUMERIC_MIN_VALUE NULL
NUMERIC_MAX_VALUE NULL NUMERIC_MAX_VALUE NULL
NUMERIC_BLOCK_SIZE NULL NUMERIC_BLOCK_SIZE NULL
......
This diff is collapsed.
...@@ -62,8 +62,8 @@ class State_tracker ...@@ -62,8 +62,8 @@ class State_tracker
/** /**
Is tracking enabled for a particular session state type ? Is tracking enabled for a particular session state type ?
@note: It is cache to avoid virtual functions and checking thd @note: it is a cache of the corresponding thd->variables.session_track_xxx
when we want mark tracker as changed. variable
*/ */
bool m_enabled; bool m_enabled;
......
...@@ -2981,8 +2981,10 @@ sp_lex_keeper::reset_lex_and_exec_core(THD *thd, uint *nextp, ...@@ -2981,8 +2981,10 @@ sp_lex_keeper::reset_lex_and_exec_core(THD *thd, uint *nextp,
#ifndef EMBEDDED_LIBRARY #ifndef EMBEDDED_LIBRARY
/* /*
if there was instruction which changed tracking state before, result If there was instruction which changed tracking state,
can go with this command OK packet, so better do not cache the result. the result of changed tracking state send to client in OK packed.
So it changes result sent to client and probably can be different
independent on query text. So we can't cache such results.
*/ */
if ((thd->client_capabilities & CLIENT_SESSION_TRACK) && if ((thd->client_capabilities & CLIENT_SESSION_TRACK) &&
(thd->server_status & SERVER_SESSION_STATE_CHANGED)) (thd->server_status & SERVER_SESSION_STATE_CHANGED))
......
...@@ -566,16 +566,6 @@ class String ...@@ -566,16 +566,6 @@ class String
return Ptr+ old_length; /* Area to use */ return Ptr+ old_length; /* Area to use */
} }
inline bool prep_alloc(uint32 arg_length, uint32 step_alloc)
{
uint32 new_length= arg_length + str_length;
if (new_length > Alloced_length)
{
if (realloc(new_length + step_alloc))
return true;
}
return false;
}
inline bool append(const char *s, uint32 arg_length, uint32 step_alloc) inline bool append(const char *s, uint32 arg_length, uint32 step_alloc)
{ {
......
...@@ -5393,10 +5393,12 @@ static Sys_var_ulong Sys_log_tc_size( ...@@ -5393,10 +5393,12 @@ static Sys_var_ulong Sys_log_tc_size(
static Sys_var_sesvartrack Sys_track_session_sys_vars( static Sys_var_sesvartrack Sys_track_session_sys_vars(
"session_track_system_variables", "session_track_system_variables",
"Track changes in registered system variables.", "Track changes in registered system variables. "
"For compatibility with MySQL defaults this variable should be set to "
"\"autocommit, character_set_client, character_set_connection, "
"character_set_results, time_zone\"",
CMD_LINE(REQUIRED_ARG), IN_SYSTEM_CHARSET, CMD_LINE(REQUIRED_ARG), IN_SYSTEM_CHARSET,
DEFAULT("autocommit,character_set_client,character_set_connection," DEFAULT(""),
"character_set_results,time_zone"),
NO_MUTEX_GUARD); NO_MUTEX_GUARD);
static bool update_session_track_schema(sys_var *self, THD *thd, static bool update_session_track_schema(sys_var *self, THD *thd,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment