Controller: correct handling of missing router port.

There's no router port if the router process is just crashed
or hasn't started yet.
This commit is contained in:
Valentin Bartenev
2017-08-30 03:09:06 +03:00
parent cdc7e4479f
commit e21dbf89e6

View File

@@ -646,8 +646,16 @@ nxt_controller_process_request(nxt_task_t *task, nxt_controller_request_t *req)
req->conf.root = value;
req->conf.pool = mp;
if (nxt_controller_conf_apply(task, req) != NXT_OK) {
rc = nxt_controller_conf_apply(task, req);
if (nxt_slow_path(rc != NXT_OK)) {
nxt_mp_destroy(mp);
if (rc == NXT_DECLINED) {
goto no_router;
}
/* rc == NXT_ERROR */
goto alloc_fail;
}
@@ -705,8 +713,16 @@ nxt_controller_process_request(nxt_task_t *task, nxt_controller_request_t *req)
req->conf.root = value;
req->conf.pool = mp;
if (nxt_controller_conf_apply(task, req) != NXT_OK) {
rc = nxt_controller_conf_apply(task, req);
if (nxt_slow_path(rc != NXT_OK)) {
nxt_mp_destroy(mp);
if (rc == NXT_DECLINED) {
goto no_router;
}
/* rc == NXT_ERROR */
goto alloc_fail;
}
@@ -720,15 +736,6 @@ nxt_controller_process_request(nxt_task_t *task, nxt_controller_request_t *req)
nxt_controller_response(task, req, &resp);
return;
alloc_fail:
resp.status = 500;
resp.title = (u_char *) "Memory allocation failed.";
resp.offset = -1;
nxt_controller_response(task, req, &resp);
return;
not_found:
resp.status = 404;
@@ -744,6 +751,24 @@ invalid_conf:
resp.title = (u_char *) "Invalid configuration.";
resp.offset = -1;
nxt_controller_response(task, req, &resp);
return;
alloc_fail:
resp.status = 500;
resp.title = (u_char *) "Memory allocation failed.";
resp.offset = -1;
nxt_controller_response(task, req, &resp);
return;
no_router:
resp.status = 500;
resp.title = (u_char *) "Router process isn't available.";
resp.offset = -1;
nxt_controller_response(task, req, &resp);
return;
}
@@ -762,6 +787,11 @@ nxt_controller_conf_apply(nxt_task_t *task, nxt_controller_request_t *req)
rt = task->thread->runtime;
router_port = rt->port_by_type[NXT_PROCESS_ROUTER];
if (nxt_slow_path(router_port == NULL)) {
return NXT_DECLINED;
}
controller_port = rt->port_by_type[NXT_PROCESS_CONTROLLER];
size = nxt_conf_json_length(req->conf.root, NULL);