Skip to content

Commit b626000

Browse files
author
V S Murthy Sidagam
committed
Bug#35078445 Please do not alter an existing service API
Revert extension of the mysql_command_factory service introduced in WL#15396 (methods init_thread and deinit_thread). Instead, declare a new service mysql_command_thread containing the two methods. Change-Id: I675f40ca4080adcf0ca464c3f3d9ff7fe8150479
1 parent c8cd053 commit b626000

File tree

5 files changed

+56
-36
lines changed

5 files changed

+56
-36
lines changed

include/mysql/components/services/mysql_command_services.h

+25-17
Original file line numberDiff line numberDiff line change
@@ -82,23 +82,6 @@ BEGIN_SERVICE_DEFINITION(mysql_command_factory)
8282
*/
8383
DECLARE_BOOL_METHOD(init, (MYSQL_H * mysql_h));
8484

85-
/**
86-
Calls srv_session_init_thread() to initialize a thread to use the session
87-
service.
88-
89-
@param[in] plugin A plugin structure pointer.
90-
91-
@retval true failure
92-
@retval false success
93-
*/
94-
DECLARE_BOOL_METHOD(init_thread, (void *plugin));
95-
96-
/**
97-
Calls srv_session_deinit_thread() to deinitialize a thread that has been using
98-
the session service.
99-
*/
100-
DECLARE_METHOD(void, deinit_thread, ());
101-
10285
/**
10386
Calls mysql_real_connect api to connects to a MySQL server.
10487
@@ -163,6 +146,31 @@ DECLARE_BOOL_METHOD(autocommit, (MYSQL_H mysql_h, bool mode));
163146
DECLARE_BOOL_METHOD(rollback, (MYSQL_H mysql_h));
164147
END_SERVICE_DEFINITION(mysql_command_factory)
165148

149+
/**
150+
@ingroup group_components_services_inventory
151+
152+
A service that provides the apis for mysql command session thread init and
153+
thread end.
154+
155+
*/
156+
BEGIN_SERVICE_DEFINITION(mysql_command_thread)
157+
158+
/**
159+
Calls session init_thread() to initialize a thread to use the session
160+
service.
161+
162+
@retval true failure
163+
@retval false success
164+
*/
165+
DECLARE_BOOL_METHOD(init, (void));
166+
167+
/**
168+
Calls session deinit_thread() to deinitialize a thread that has been using
169+
the session service.
170+
*/
171+
DECLARE_METHOD(void, end, (void));
172+
END_SERVICE_DEFINITION(mysql_command_thread)
173+
166174
/**
167175
@ingroup group_components_services_inventory
168176

sql/server_component/mysql_command_services_imp.cc

+11-11
Original file line numberDiff line numberDiff line change
@@ -78,25 +78,25 @@ DEFINE_BOOL_METHOD(mysql_command_services_imp::init, (MYSQL_H * mysql_h)) {
7878
return ret;
7979
}
8080

81+
static MYSQL_LEX_CSTRING dummy_plugin{"server_service",
82+
sizeof("server_service")};
8183
/**
82-
Calls srv_session_init_thread() to initialize a thread to use the session
84+
Calls session init_thread() to initialize a physical thread to use the session
8385
service.
8486
85-
@param[in] plugin A plugin structure pointer.
86-
87-
@retval true failure
88-
@retval false success
87+
@retval true failure
88+
@retval false success
8989
*/
90-
DEFINE_BOOL_METHOD(mysql_command_services_imp::init_thread, (void *plugin)) {
91-
return srv_session_init_thread(plugin);
90+
DEFINE_BOOL_METHOD(mysql_command_services_imp::init, ()) {
91+
return Srv_session::init_thread(&dummy_plugin);
9292
}
9393

9494
/**
95-
Calls srv_session_deinit_thread() to deinitialize a thread that has been using
96-
the session service.
95+
Calls session deinit_thread() to deinitialize a physical thread that has been
96+
using the session service.
9797
*/
98-
DEFINE_METHOD(void, mysql_command_services_imp::deinit_thread, ()) {
99-
srv_session_deinit_thread();
98+
DEFINE_METHOD(void, mysql_command_services_imp::end, ()) {
99+
Srv_session::deinit_thread();
100100
}
101101

102102
/**

sql/server_component/mysql_command_services_imp.h

+4-2
Original file line numberDiff line numberDiff line change
@@ -84,15 +84,17 @@ class mysql_command_services_imp {
8484
public:
8585
/* mysql_command_factory service apis */
8686
static DEFINE_BOOL_METHOD(init, (MYSQL_H * mysql_h));
87-
static DEFINE_BOOL_METHOD(init_thread, (void *plugin));
88-
static DEFINE_METHOD(void, deinit_thread, ());
8987
static DEFINE_BOOL_METHOD(connect, (MYSQL_H mysql_h));
9088
static DEFINE_BOOL_METHOD(reset, (MYSQL_H mysql_h));
9189
static DEFINE_BOOL_METHOD(close, (MYSQL_H mysql_h));
9290
static DEFINE_BOOL_METHOD(commit, (MYSQL_H mysql_h));
9391
static DEFINE_BOOL_METHOD(autocommit, (MYSQL_H mysql_h, bool mode));
9492
static DEFINE_BOOL_METHOD(rollback, (MYSQL_H mysql_h));
9593

94+
/* mysql_command_thread service apis */
95+
static DEFINE_BOOL_METHOD(init, (void));
96+
static DEFINE_METHOD(void, end, (void));
97+
9698
/* mysql_command_options service apis */
9799
static DEFINE_BOOL_METHOD(set, (MYSQL_H mysql, int option, const void *arg));
98100
static DEFINE_BOOL_METHOD(get, (MYSQL_H mysql, int option, const void *arg));

sql/server_component/server_component.cc

+8-5
Original file line numberDiff line numberDiff line change
@@ -461,13 +461,15 @@ mysql_audit_print_service_double_data_source_imp::get
461461
END_SERVICE_IMPLEMENTATION();
462462

463463
BEGIN_SERVICE_IMPLEMENTATION(mysql_server, mysql_command_factory)
464-
mysql_command_services_imp::init, mysql_command_services_imp::init_thread,
465-
mysql_command_services_imp::deinit_thread,
466-
mysql_command_services_imp::connect, mysql_command_services_imp::reset,
467-
mysql_command_services_imp::close, mysql_command_services_imp::commit,
468-
mysql_command_services_imp::autocommit,
464+
mysql_command_services_imp::init, mysql_command_services_imp::connect,
465+
mysql_command_services_imp::reset, mysql_command_services_imp::close,
466+
mysql_command_services_imp::commit, mysql_command_services_imp::autocommit,
469467
mysql_command_services_imp::rollback END_SERVICE_IMPLEMENTATION();
470468

469+
BEGIN_SERVICE_IMPLEMENTATION(mysql_server, mysql_command_thread)
470+
mysql_command_services_imp::init,
471+
mysql_command_services_imp::end END_SERVICE_IMPLEMENTATION();
472+
471473
BEGIN_SERVICE_IMPLEMENTATION(mysql_server, mysql_command_options)
472474
mysql_command_services_imp::set,
473475
mysql_command_services_imp::get END_SERVICE_IMPLEMENTATION();
@@ -696,6 +698,7 @@ PROVIDES_SERVICE(mysql_server_path_filter, dynamic_loader_scheme_file),
696698
PROVIDES_SERVICE(mysql_server,
697699
mysql_audit_print_service_double_data_source),
698700
PROVIDES_SERVICE(mysql_server, mysql_command_factory),
701+
PROVIDES_SERVICE(mysql_server, mysql_command_thread),
699702
PROVIDES_SERVICE(mysql_server, mysql_command_options),
700703
PROVIDES_SERVICE(mysql_server, mysql_command_query),
701704
PROVIDES_SERVICE(mysql_server, mysql_command_query_result),

sql/srv_session.cc

+8-1
Original file line numberDiff line numberDiff line change
@@ -624,6 +624,10 @@ static void set_psi(THD *thd) {
624624
*/
625625
bool Srv_session::init_thread(const void *plugin) {
626626
char stack_start;
627+
628+
/* If not null, means its already initialized, so return success*/
629+
if (THR_srv_session_thread != nullptr) return false;
630+
627631
if (my_thread_init()) {
628632
connection_errors_internal++;
629633
return true;
@@ -679,7 +683,10 @@ static void close_all_sessions_of_plugin_if_any(const st_plugin_int *plugin) {
679683
*/
680684
void Srv_session::deinit_thread() {
681685
const st_plugin_int *plugin = THR_srv_session_thread;
682-
if (plugin) close_currently_attached_session_if_any(plugin);
686+
if (plugin)
687+
close_currently_attached_session_if_any(plugin);
688+
else
689+
return;
683690

684691
if (server_session_threads.remove(my_thread_self()))
685692
LogErr(ERROR_LEVEL, ER_FAILED_TO_DECREMENT_NUMBER_OF_THREADS);

0 commit comments

Comments
 (0)