MXS-1883 Maintenance is now the only user-modifiable bit for a monitored server

The request to turn maintenance off/on is a separate flag, although the actual
status is still contained in the status bitfield.
This commit is contained in:
Esa Korhonen
2018-05-24 13:47:56 +03:00
parent 2f48d079db
commit c039821467
11 changed files with 182 additions and 40 deletions

View File

@ -476,7 +476,6 @@ void MariaDBMonitor::main_loop()
auto new_status = mon_srv->pending_status;
auto srv = mon_srv->server;
srv->status = new_status;
srv->status_pending = new_status;
}
/* Check if monitor events need to be launched. */

View File

@ -22,6 +22,7 @@
#include <maxscale/protocol.h>
#include <maxscale/protocol/mysql.h>
#include <maxscale/router.h>
#include <maxscale/server.hh>
#include <maxscale/utils.h>
/*
@ -329,7 +330,7 @@ static void handle_error_response(DCB *dcb, GWBUF *buffer)
"mode.", dcb->server->name,
dcb->server->address, dcb->server->port);
server_set_status(dcb->server, SERVER_MAINT);
mxs::server_set_status(dcb->server, SERVER_MAINT, NULL);
}
else if (errcode == ER_ACCESS_DENIED_ERROR ||
errcode == ER_DBACCESS_DENIED_ERROR ||

View File

@ -46,7 +46,7 @@
#include <maxscale/maxscale.h>
#include <maxscale/modulecmd.h>
#include <maxscale/router.h>
#include <maxscale/server.h>
#include <maxscale/server.hh>
#include <maxscale/service.h>
#include <maxscale/spinlock.h>
#include <maxscale/users.h>
@ -2233,7 +2233,11 @@ set_server(DCB *dcb, SERVER *server, char *bit)
if ((bitvalue = server_map_status(bit)) != 0)
{
server_set_status(server, bitvalue);
std::string errmsg;
if (!mxs::server_set_status(server, bitvalue, &errmsg))
{
dcb_printf(dcb, "%s\n", errmsg.c_str());
}
}
else
{
@ -2256,7 +2260,11 @@ clear_server(DCB *dcb, SERVER *server, char *bit)
if ((bitvalue = server_map_status(bit)) != 0)
{
server_clear_status(server, bitvalue);
std::string errmsg;
if (!mxs::server_clear_status(server, bitvalue, &errmsg))
{
dcb_printf(dcb, "%s", errmsg.c_str());
}
}
else
{

View File

@ -41,6 +41,7 @@
#include <maxscale/modutil.h>
#include <maxscale/resultset.h>
#include <maxscale/router.h>
#include <maxscale/server.hh>
#include <maxscale/service.h>
#include <maxscale/spinlock.h>
#include <maxscale/version.h>
@ -392,8 +393,15 @@ void exec_set_server(DCB *dcb, MAXINFO_TREE *tree)
int status = server_map_status(tree->right->value);
if (status != 0)
{
server_set_status(server, status);
maxinfo_send_ok(dcb);
std::string errmsgs;
if (mxs::server_set_status(server, status, &errmsgs))
{
maxinfo_send_ok(dcb);
}
else
{
maxinfo_send_error(dcb, 0, errmsgs.c_str());
}
}
else
{
@ -473,8 +481,15 @@ void exec_clear_server(DCB *dcb, MAXINFO_TREE *tree)
int status = server_map_status(tree->right->value);
if (status != 0)
{
server_clear_status(server, status);
maxinfo_send_ok(dcb);
std::string errmsgs;
if (mxs::server_clear_status(server, status, &errmsgs))
{
maxinfo_send_ok(dcb);
}
else
{
maxinfo_send_error(dcb, 0, errmsgs.c_str());
}
}
else
{