1 # name : show_slave_status_nolock.patch
6 # Any small change to this file in the main branch
7 # should be done or reviewed by the maintainer!
8 diff -ruN a/patch_info/show_slave_status_nolock.patch b/patch_info/show_slave_status_nolock.patch
9 --- a/patch_info/show_slave_status_nolock.patch 1970-01-01 03:00:00.000000000 +0300
10 +++ b/patch_info/show_slave_status_nolock.patch 2010-12-29 20:38:13.000000000 +0300
12 +File=show_slave_status_nolock.patch
13 +Name= SHOW SLAVE STATUS NOLOCK
15 +Author=Percona <info@percona.com>
17 +Comment= Implement SHOW SLAVE STATUS without lock (STOP SLAVE lock the same mutex what lock SHOW SLAVE STATUS)
18 diff -ruN a/sql/lex.h b/sql/lex.h
19 --- a/sql/lex.h 2010-12-29 20:27:19.000000000 +0300
20 +++ b/sql/lex.h 2010-12-29 20:28:57.000000000 +0300
22 { "NONE", SYM(NONE_SYM)},
23 { "NOT", SYM(NOT_SYM)},
24 { "NO_WRITE_TO_BINLOG", SYM(NO_WRITE_TO_BINLOG)},
25 + { "NOLOCK", SYM(NOLOCK_SYM)},
26 { "NULL", SYM(NULL_SYM)},
27 { "NUMERIC", SYM(NUMERIC_SYM)},
28 { "NVARCHAR", SYM(NVARCHAR_SYM)},
29 diff -ruN a/sql/mysqld.cc b/sql/mysqld.cc
30 --- a/sql/mysqld.cc 2010-12-29 20:27:19.000000000 +0300
31 +++ b/sql/mysqld.cc 2010-12-29 20:29:19.000000000 +0300
33 {"show_relaylog_events", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_RELAYLOG_EVENTS]), SHOW_LONG_STATUS},
34 {"show_slave_hosts", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_SLAVE_HOSTS]), SHOW_LONG_STATUS},
35 {"show_slave_status", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_SLAVE_STAT]), SHOW_LONG_STATUS},
36 + {"show_slave_status_nolock", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_SLAVE_NOLOCK_STAT]), SHOW_LONG_STATUS},
37 {"show_status", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_STATUS]), SHOW_LONG_STATUS},
38 {"show_storage_engines", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_STORAGE_ENGINES]), SHOW_LONG_STATUS},
39 {"show_table_status", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_TABLE_STATUS]), SHOW_LONG_STATUS},
40 diff -ruN a/sql/sql_lex.h b/sql/sql_lex.h
41 --- a/sql/sql_lex.h 2010-12-29 20:27:19.000000000 +0300
42 +++ b/sql/sql_lex.h 2010-12-29 20:32:26.000000000 +0300
44 SQLCOM_SHOW_PROFILE, SQLCOM_SHOW_PROFILES,
45 SQLCOM_SIGNAL, SQLCOM_RESIGNAL,
46 SQLCOM_SHOW_RELAYLOG_EVENTS,
47 + /* SHOW SLAVE STATUS NOLOCK */
48 + SQLCOM_SHOW_SLAVE_NOLOCK_STAT,
50 When a command is added here, be sure it's also added in mysqld.cc
51 in "struct show_var_st status_vars[]= {" ...
52 diff -ruN a/sql/sql_parse.cc b/sql/sql_parse.cc
53 --- a/sql/sql_parse.cc 2010-12-29 20:27:19.000000000 +0300
54 +++ b/sql/sql_parse.cc 2010-12-29 20:34:50.000000000 +0300
56 sql_command_flags[SQLCOM_SHOW_CREATE]= CF_STATUS_COMMAND;
57 sql_command_flags[SQLCOM_SHOW_MASTER_STAT]= CF_STATUS_COMMAND;
58 sql_command_flags[SQLCOM_SHOW_SLAVE_STAT]= CF_STATUS_COMMAND;
59 + sql_command_flags[SQLCOM_SHOW_SLAVE_NOLOCK_STAT]= CF_STATUS_COMMAND;
60 sql_command_flags[SQLCOM_SHOW_CREATE_PROC]= CF_STATUS_COMMAND;
61 sql_command_flags[SQLCOM_SHOW_CREATE_FUNC]= CF_STATUS_COMMAND;
62 sql_command_flags[SQLCOM_SHOW_CREATE_TRIGGER]= CF_STATUS_COMMAND;
63 @@ -2262,12 +2263,16 @@
64 mysql_mutex_unlock(&LOCK_active_mi);
67 + case SQLCOM_SHOW_SLAVE_NOLOCK_STAT:
68 case SQLCOM_SHOW_SLAVE_STAT:
70 /* Accept one of two privileges */
71 if (check_global_access(thd, SUPER_ACL | REPL_CLIENT_ACL))
73 - mysql_mutex_lock(&LOCK_active_mi);
74 + if(SQLCOM_SHOW_SLAVE_NOLOCK_STAT != lex->sql_command)
76 + mysql_mutex_lock(&LOCK_active_mi);
78 if (active_mi != NULL)
80 res = show_master_info(thd, active_mi);
81 @@ -2278,7 +2283,10 @@
82 WARN_NO_MASTER_INFO, ER(WARN_NO_MASTER_INFO));
85 - mysql_mutex_unlock(&LOCK_active_mi);
86 + if(SQLCOM_SHOW_SLAVE_NOLOCK_STAT != lex->sql_command)
88 + mysql_mutex_unlock(&LOCK_active_mi);
92 case SQLCOM_SHOW_MASTER_STAT:
93 diff -ruN a/sql/sql_yacc.yy b/sql/sql_yacc.yy
94 --- a/sql/sql_yacc.yy 2010-12-29 20:27:19.000000000 +0300
95 +++ b/sql/sql_yacc.yy 2010-12-29 20:36:40.000000000 +0300
98 %token START_SYM /* SQL-2003-R */
100 +%token NOLOCK_SYM /* SHOW SLAVE STATUS NOLOCK */
101 %token STDDEV_SAMP_SYM /* SQL-2003-N */
104 @@ -11095,6 +11096,10 @@
106 Lex->sql_command = SQLCOM_SHOW_SLAVE_STAT;
108 + | SLAVE STATUS_SYM NOLOCK_SYM
110 + Lex->sql_command = SQLCOM_SHOW_SLAVE_NOLOCK_STAT; //SQLCOM_SHOW_SLAVE_NOLOCK_STAT;
112 | QUERY_RESPONSE_TIME_SYM wild_and_where
114 #ifdef HAVE_RESPONSE_TIME_DISTRIBUTION