diff options
Diffstat (limited to 'sql/wsrep_notify.cc')
-rw-r--r-- | sql/wsrep_notify.cc | 77 |
1 files changed, 28 insertions, 49 deletions
diff --git a/sql/wsrep_notify.cc b/sql/wsrep_notify.cc index 92bcc8eda43..ad94aecb6b4 100644 --- a/sql/wsrep_notify.cc +++ b/sql/wsrep_notify.cc @@ -18,22 +18,8 @@ #include "wsrep_priv.h" #include "wsrep_utils.h" - -static const char* _status_str(wsrep_member_status_t status) -{ - switch (status) - { - case WSREP_MEMBER_UNDEFINED: return "Undefined"; - case WSREP_MEMBER_JOINER: return "Joiner"; - case WSREP_MEMBER_DONOR: return "Donor"; - case WSREP_MEMBER_JOINED: return "Joined"; - case WSREP_MEMBER_SYNCED: return "Synced"; - default: return "Error(?)"; - } -} - -void wsrep_notify_status (wsrep_member_status_t status, - const wsrep_view_info_t* view) +void wsrep_notify_status(enum wsrep::server_state::state status, + const wsrep::view* view) { if (!wsrep_notify_cmd || 0 == strlen(wsrep_notify_cmd)) { @@ -42,51 +28,44 @@ void wsrep_notify_status (wsrep_member_status_t status, } char cmd_buf[1 << 16]; // this can be long - long cmd_len = sizeof(cmd_buf) - 1; - char* cmd_ptr = cmd_buf; - long cmd_off = 0; + long cmd_len= sizeof(cmd_buf) - 1; + char* cmd_ptr= cmd_buf; + long cmd_off= 0; cmd_off += snprintf (cmd_ptr + cmd_off, cmd_len - cmd_off, "%s", wsrep_notify_cmd); - if (status >= WSREP_MEMBER_UNDEFINED && status < WSREP_MEMBER_ERROR) - { - cmd_off += snprintf (cmd_ptr + cmd_off, cmd_len - cmd_off, " --status %s", - _status_str(status)); - } - else - { - /* here we preserve provider error codes */ - cmd_off += snprintf (cmd_ptr + cmd_off, cmd_len - cmd_off, - " --status 'Error(%d)'", status); - } + cmd_off += snprintf (cmd_ptr + cmd_off, cmd_len - cmd_off, " --status %s", + to_c_string(status)); - if (0 != view) + if (view != NULL) { - char uuid_str[40]; - - wsrep_uuid_print (&view->state_id.uuid, uuid_str, sizeof(uuid_str)); + std::ostringstream uuid; + uuid << view->state_id().id(); cmd_off += snprintf (cmd_ptr + cmd_off, cmd_len - cmd_off, - " --uuid %s", uuid_str); + " --uuid %s", uuid.str().c_str()); cmd_off += snprintf (cmd_ptr + cmd_off, cmd_len - cmd_off, - " --primary %s", view->view >= 0 ? "yes" : "no"); + " --primary %s", view->view_seqno().get() >= 0 ? "yes" : "no"); cmd_off += snprintf (cmd_ptr + cmd_off, cmd_len - cmd_off, - " --index %d", view->my_idx); + " --index %ld", view->own_index()); - if (view->memb_num) + const std::vector<wsrep::view::member>& members(view->members()); + if (members.size()) { - cmd_off += snprintf (cmd_ptr + cmd_off, cmd_len - cmd_off, " --members"); - - for (int i = 0; i < view->memb_num; i++) - { - wsrep_uuid_print (&view->members[i].id, uuid_str, sizeof(uuid_str)); - cmd_off += snprintf (cmd_ptr + cmd_off, cmd_len - cmd_off, - "%c%s/%s/%s", i > 0 ? ',' : ' ', - uuid_str, view->members[i].name, - view->members[i].incoming); - } + cmd_off += snprintf (cmd_ptr + cmd_off, cmd_len - cmd_off, " --members"); + + for (unsigned int i= 0; i < members.size(); i++) + { + std::ostringstream id; + id << members[i].id(); + cmd_off += snprintf(cmd_ptr + cmd_off, cmd_len - cmd_off, + "%c%s/%s/%s", i > 0 ? ',' : ' ', + id.str().c_str(), + members[i].name().c_str(), + members[i].incoming().c_str()); + } } } @@ -100,7 +79,7 @@ void wsrep_notify_status (wsrep_member_status_t status, wsp::process p(cmd_ptr, "r", NULL); p.wait(); - int err = p.error(); + int err= p.error(); if (err) { |