diff options
author | Nirbhay Choubey <nirbhay@mariadb.com> | 2016-08-25 15:39:39 -0400 |
---|---|---|
committer | Nirbhay Choubey <nirbhay@mariadb.com> | 2016-08-25 15:39:39 -0400 |
commit | 90266e8a0eb46867c990930fa4d305d2424929ba (patch) | |
tree | 787918cf537c678ab4f7a949520c847fa3fd8442 /sql/wsrep_var.cc | |
parent | dfa3046db48d8439cf3eb02ba6623fe2f6e44f91 (diff) | |
parent | b506d9527b4303b91f69fe6b6f21f911e5bfef72 (diff) | |
download | mariadb-git-90266e8a0eb46867c990930fa4d305d2424929ba.tar.gz |
Merge branch '10.0-galera' into bb-10.1-serg
Diffstat (limited to 'sql/wsrep_var.cc')
-rw-r--r-- | sql/wsrep_var.cc | 73 |
1 files changed, 58 insertions, 15 deletions
diff --git a/sql/wsrep_var.cc b/sql/wsrep_var.cc index fb784cbcca3..56a799c97c1 100644 --- a/sql/wsrep_var.cc +++ b/sql/wsrep_var.cc @@ -167,6 +167,32 @@ void wsrep_start_position_init (const char* val) wsrep_set_local_position (val, false); } +static int get_provider_option_value(const char* opts, + const char* opt_name, + ulong* opt_value) +{ + int ret= 1; + ulong opt_value_tmp; + char *opt_value_str, *s, *opts_copy= my_strdup(opts, MYF(MY_WME)); + + if ((opt_value_str= strstr(opts_copy, opt_name)) == NULL) + goto end; + opt_value_str= strtok_r(opt_value_str, "=", &s); + if (opt_value_str == NULL) goto end; + opt_value_str= strtok_r(NULL, ";", &s); + if (opt_value_str == NULL) goto end; + + opt_value_tmp= strtoul(opt_value_str, NULL, 10); + if (errno == ERANGE) goto end; + + *opt_value= opt_value_tmp; + ret= 0; + +end: + my_free(opts_copy); + return ret; +} + static bool refresh_provider_options() { WSREP_DEBUG("refresh_provider_options: %s", @@ -174,9 +200,11 @@ static bool refresh_provider_options() char* opts= wsrep->options_get(wsrep); if (opts) { - if (wsrep_provider_options) my_free((void *)wsrep_provider_options); - wsrep_provider_options = (char*)my_memdup(opts, strlen(opts) + 1, - MYF(MY_WME)); + wsrep_provider_options_init(opts); + get_provider_option_value(wsrep_provider_options, + (char*)"repl.max_ws_size", + &wsrep_max_ws_size); + free(opts); } else { @@ -505,20 +533,10 @@ bool wsrep_desync_check (sys_var *self, THD* thd, set_var* var) ER_WRONG_VALUE_FOR_VAR, "'wsrep_desync' is already OFF."); } + return false; } - return 0; -} - -bool wsrep_desync_update (sys_var *self, THD* thd, enum_var_type type) -{ - if (wsrep == NULL) - { - my_message(ER_WRONG_ARGUMENTS, "WSREP (galera) not started", MYF(0)); - return true; - } - wsrep_status_t ret(WSREP_WARNING); - if (wsrep_desync) { + if (new_wsrep_desync) { ret = wsrep->desync (wsrep); if (ret != WSREP_OK) { WSREP_WARN ("SET desync failed %d for schema: %s, query: %s", ret, @@ -540,6 +558,31 @@ bool wsrep_desync_update (sys_var *self, THD* thd, enum_var_type type) return false; } +bool wsrep_desync_update (sys_var *self, THD* thd, enum_var_type type) +{ + if (wsrep == NULL) + { + my_message(ER_WRONG_ARGUMENTS, "WSREP (galera) not started", MYF(0)); + return true; + } + return false; +} + +bool wsrep_max_ws_size_update (sys_var *self, THD *thd, enum_var_type) +{ + char max_ws_size_opt[128]; + my_snprintf(max_ws_size_opt, sizeof(max_ws_size_opt), + "repl.max_ws_size=%d", wsrep_max_ws_size); + wsrep_status_t ret= wsrep->options_set(wsrep, max_ws_size_opt); + if (ret != WSREP_OK) + { + WSREP_ERROR("Set options returned %d", ret); + refresh_provider_options(); + return true; + } + return refresh_provider_options(); +} + static SHOW_VAR wsrep_status_vars[]= { {"connected", (char*) &wsrep_connected, SHOW_BOOL}, |