Backport: Add force option to set endpoint
The new `force=yes` option closes all connections to the server that is being put into maintenance mode. This will immediately close all open connections to the server without allowing results to return.
This commit is contained in:
parent
7fb840ac9e
commit
0cb15976e8
@ -124,6 +124,7 @@ extern const char CN_FIELDS[];
|
||||
extern const char CN_FILTERS[];
|
||||
extern const char CN_FILTER[];
|
||||
extern const char CN_FILTER_DIAGNOSTICS[];
|
||||
extern const char CN_FORCE[];
|
||||
extern const char CN_FUNCTIONS[];
|
||||
extern const char CN_GATEWAY[];
|
||||
extern const char CN_HAS_WHERE_CLAUSE[];
|
||||
@ -202,6 +203,7 @@ extern const char CN_VERSION_STRING[];
|
||||
extern const char CN_WEIGHTBY[];
|
||||
extern const char CN_WRITEQ_HIGH_WATER[];
|
||||
extern const char CN_WRITEQ_LOW_WATER[];
|
||||
extern const char CN_YES[];
|
||||
|
||||
/*
|
||||
* Global configuration items that are read (or pre_parsed) to be available for
|
||||
|
@ -17,6 +17,12 @@ exports.desc = 'Set object state'
|
||||
exports.handler = function() {}
|
||||
exports.builder = function(yargs) {
|
||||
yargs
|
||||
.group(['force'], 'Set options:')
|
||||
.option('force', {
|
||||
describe: 'Forcefully close all connections to the target server',
|
||||
type: 'boolean',
|
||||
default: false
|
||||
})
|
||||
.command('server <server> <state>', 'Set server state', function(yargs) {
|
||||
return yargs.epilog('If <server> is monitored by a monitor, this command should ' +
|
||||
'only be used to set the server into the `maintenance` state. ' +
|
||||
@ -27,6 +33,9 @@ exports.builder = function(yargs) {
|
||||
.usage('Usage: set server <server> <state>')
|
||||
}, function(argv) {
|
||||
var target = 'servers/' + argv.server + '/set?state=' + argv.state
|
||||
if (argv.force) {
|
||||
target += '&force=yes'
|
||||
}
|
||||
maxctrl(argv, function(host) {
|
||||
return doRequest(host, target, null, {method: 'PUT'})
|
||||
})
|
||||
|
@ -105,6 +105,7 @@ const char CN_FIELDS[] = "fields";
|
||||
const char CN_FILTERS[] = "filters";
|
||||
const char CN_FILTER[] = "filter";
|
||||
const char CN_FILTER_DIAGNOSTICS[] = "filter_diagnostics";
|
||||
const char CN_FORCE[] = "force";
|
||||
const char CN_FUNCTIONS[] = "functions";
|
||||
const char CN_GATEWAY[] = "gateway";
|
||||
const char CN_HAS_WHERE_CLAUSE[] = "has_where_clause";
|
||||
@ -186,6 +187,7 @@ const char CN_VERSION_STRING[] = "version_string";
|
||||
const char CN_WEIGHTBY[] = "weightby";
|
||||
const char CN_WRITEQ_HIGH_WATER[] = "writeq_high_water";
|
||||
const char CN_WRITEQ_LOW_WATER[] = "writeq_low_water";
|
||||
const char CN_YES[] = "yes";
|
||||
|
||||
|
||||
extern const char CN_LOGDIR[] = "logdir";
|
||||
|
@ -774,6 +774,11 @@ HttpResponse cb_set_server(const HttpRequest& request)
|
||||
string errmsg;
|
||||
if (mxs::server_set_status(server, opt, &errmsg))
|
||||
{
|
||||
if (status_is_in_maint(opt) && request.get_option(CN_FORCE) == CN_YES)
|
||||
{
|
||||
dcb_hangup_foreach(server);
|
||||
}
|
||||
|
||||
return HttpResponse(MHD_HTTP_NO_CONTENT);
|
||||
}
|
||||
else
|
||||
|
Loading…
x
Reference in New Issue
Block a user