nxt_controller.c (645:1c993ea13906) nxt_controller.c (662:053984ce0c4e)
1
2/*
3 * Copyright (C) Igor Sysoev
4 * Copyright (C) Valentin V. Bartenev
5 * Copyright (C) NGINX, Inc.
6 */
7
8#include <nxt_main.h>

--- 26 unchanged lines hidden (view full) ---

35 ssize_t offset;
36 nxt_uint_t line;
37 nxt_uint_t column;
38} nxt_controller_response_t;
39
40
41static void nxt_controller_process_new_port_handler(nxt_task_t *task,
42 nxt_port_recv_msg_t *msg);
1
2/*
3 * Copyright (C) Igor Sysoev
4 * Copyright (C) Valentin V. Bartenev
5 * Copyright (C) NGINX, Inc.
6 */
7
8#include <nxt_main.h>

--- 26 unchanged lines hidden (view full) ---

35 ssize_t offset;
36 nxt_uint_t line;
37 nxt_uint_t column;
38} nxt_controller_response_t;
39
40
41static void nxt_controller_process_new_port_handler(nxt_task_t *task,
42 nxt_port_recv_msg_t *msg);
43static void nxt_controller_send_current_conf(nxt_task_t *task);
44static void nxt_controller_router_ready_handler(nxt_task_t *task,
45 nxt_port_recv_msg_t *msg);
43static nxt_int_t nxt_controller_conf_default(void);
44static void nxt_controller_conf_init_handler(nxt_task_t *task,
45 nxt_port_recv_msg_t *msg, void *data);
46static nxt_int_t nxt_controller_conf_send(nxt_task_t *task,
47 nxt_conf_value_t *conf, nxt_port_rpc_handler_t handler, void *data);
48
49static void nxt_controller_conn_init(nxt_task_t *task, void *obj, void *data);
50static void nxt_controller_conn_read(nxt_task_t *task, void *obj, void *data);

--- 31 unchanged lines hidden (view full) ---

82static nxt_http_field_proc_t nxt_controller_request_fields[] = {
83 { nxt_string("Content-Length"),
84 &nxt_controller_request_content_length, 0 },
85};
86
87static nxt_lvlhsh_t nxt_controller_fields_hash;
88
89static nxt_uint_t nxt_controller_listening;
46static nxt_int_t nxt_controller_conf_default(void);
47static void nxt_controller_conf_init_handler(nxt_task_t *task,
48 nxt_port_recv_msg_t *msg, void *data);
49static nxt_int_t nxt_controller_conf_send(nxt_task_t *task,
50 nxt_conf_value_t *conf, nxt_port_rpc_handler_t handler, void *data);
51
52static void nxt_controller_conn_init(nxt_task_t *task, void *obj, void *data);
53static void nxt_controller_conn_read(nxt_task_t *task, void *obj, void *data);

--- 31 unchanged lines hidden (view full) ---

85static nxt_http_field_proc_t nxt_controller_request_fields[] = {
86 { nxt_string("Content-Length"),
87 &nxt_controller_request_content_length, 0 },
88};
89
90static nxt_lvlhsh_t nxt_controller_fields_hash;
91
92static nxt_uint_t nxt_controller_listening;
93static nxt_uint_t nxt_controller_router_ready;
90static nxt_controller_conf_t nxt_controller_conf;
91static nxt_queue_t nxt_controller_waiting_requests;
92
93
94static const nxt_event_conn_state_t nxt_controller_conn_read_state;
95static const nxt_event_conn_state_t nxt_controller_conn_body_read_state;
96static const nxt_event_conn_state_t nxt_controller_conn_write_state;
97static const nxt_event_conn_state_t nxt_controller_conn_close_state;
98
99
100nxt_port_handlers_t nxt_controller_process_port_handlers = {
94static nxt_controller_conf_t nxt_controller_conf;
95static nxt_queue_t nxt_controller_waiting_requests;
96
97
98static const nxt_event_conn_state_t nxt_controller_conn_read_state;
99static const nxt_event_conn_state_t nxt_controller_conn_body_read_state;
100static const nxt_event_conn_state_t nxt_controller_conn_write_state;
101static const nxt_event_conn_state_t nxt_controller_conn_close_state;
102
103
104nxt_port_handlers_t nxt_controller_process_port_handlers = {
101 .quit = nxt_worker_process_quit_handler,
102 .new_port = nxt_controller_process_new_port_handler,
103 .change_file = nxt_port_change_log_file_handler,
104 .mmap = nxt_port_mmap_handler,
105 .data = nxt_port_data_handler,
106 .remove_pid = nxt_port_remove_pid_handler,
107 .rpc_ready = nxt_port_rpc_handler,
108 .rpc_error = nxt_port_rpc_handler,
105 .quit = nxt_worker_process_quit_handler,
106 .new_port = nxt_controller_process_new_port_handler,
107 .change_file = nxt_port_change_log_file_handler,
108 .mmap = nxt_port_mmap_handler,
109 .process_ready = nxt_controller_router_ready_handler,
110 .data = nxt_port_data_handler,
111 .remove_pid = nxt_port_remove_pid_handler,
112 .rpc_ready = nxt_port_rpc_handler,
113 .rpc_error = nxt_port_rpc_handler,
109};
110
111
112nxt_int_t
113nxt_controller_start(nxt_task_t *task, void *data)
114{
115 nxt_mp_t *mp;
116 nxt_int_t ret;

--- 80 unchanged lines hidden (view full) ---

197 return NXT_OK;
198}
199
200
201static void
202nxt_controller_process_new_port_handler(nxt_task_t *task,
203 nxt_port_recv_msg_t *msg)
204{
114};
115
116
117nxt_int_t
118nxt_controller_start(nxt_task_t *task, void *data)
119{
120 nxt_mp_t *mp;
121 nxt_int_t ret;

--- 80 unchanged lines hidden (view full) ---

202 return NXT_OK;
203}
204
205
206static void
207nxt_controller_process_new_port_handler(nxt_task_t *task,
208 nxt_port_recv_msg_t *msg)
209{
205 nxt_int_t rc;
206 nxt_runtime_t *rt;
207 nxt_conf_value_t *conf;
208
209 nxt_port_new_port_handler(task, msg);
210
210 nxt_port_new_port_handler(task, msg);
211
211 if (msg->u.new_port->type != NXT_PROCESS_ROUTER) {
212 if (msg->u.new_port->type != NXT_PROCESS_ROUTER
213 || !nxt_controller_router_ready)
214 {
212 return;
213 }
214
215 return;
216 }
217
218 nxt_controller_send_current_conf(task);
219}
220
221
222static void
223nxt_controller_send_current_conf(nxt_task_t *task)
224{
225 nxt_int_t rc;
226 nxt_runtime_t *rt;
227 nxt_conf_value_t *conf;
228
215 conf = nxt_controller_conf.root;
216
217 if (conf != NULL) {
218 rc = nxt_controller_conf_send(task, conf,
219 nxt_controller_conf_init_handler, NULL);
220
221 if (nxt_fast_path(rc == NXT_OK)) {
222 return;

--- 15 unchanged lines hidden (view full) ---

238 if (nxt_slow_path(nxt_listen_event(task, rt->controller_socket) == NULL)) {
239 nxt_abort();
240 }
241
242 nxt_controller_listening = 1;
243}
244
245
229 conf = nxt_controller_conf.root;
230
231 if (conf != NULL) {
232 rc = nxt_controller_conf_send(task, conf,
233 nxt_controller_conf_init_handler, NULL);
234
235 if (nxt_fast_path(rc == NXT_OK)) {
236 return;

--- 15 unchanged lines hidden (view full) ---

252 if (nxt_slow_path(nxt_listen_event(task, rt->controller_socket) == NULL)) {
253 nxt_abort();
254 }
255
256 nxt_controller_listening = 1;
257}
258
259
260static void
261nxt_controller_router_ready_handler(nxt_task_t *task,
262 nxt_port_recv_msg_t *msg)
263{
264 nxt_port_t *router_port;
265 nxt_runtime_t *rt;
266
267 rt = task->thread->runtime;
268
269 router_port = rt->port_by_type[NXT_PROCESS_ROUTER];
270
271 nxt_controller_router_ready = 1;
272
273 if (router_port != NULL) {
274 nxt_controller_send_current_conf(task);
275 }
276}
277
278
246static nxt_int_t
247nxt_controller_conf_default(void)
248{
249 nxt_mp_t *mp;
250 nxt_conf_value_t *conf;
251
252 static const nxt_str_t json
253 = nxt_string("{ \"listeners\": {}, \"applications\": {} }");

--- 57 unchanged lines hidden (view full) ---

311 nxt_buf_t *b;
312 nxt_port_t *router_port, *controller_port;
313 nxt_runtime_t *rt;
314
315 rt = task->thread->runtime;
316
317 router_port = rt->port_by_type[NXT_PROCESS_ROUTER];
318
279static nxt_int_t
280nxt_controller_conf_default(void)
281{
282 nxt_mp_t *mp;
283 nxt_conf_value_t *conf;
284
285 static const nxt_str_t json
286 = nxt_string("{ \"listeners\": {}, \"applications\": {} }");

--- 57 unchanged lines hidden (view full) ---

344 nxt_buf_t *b;
345 nxt_port_t *router_port, *controller_port;
346 nxt_runtime_t *rt;
347
348 rt = task->thread->runtime;
349
350 router_port = rt->port_by_type[NXT_PROCESS_ROUTER];
351
319 if (nxt_slow_path(router_port == NULL)) {
352 if (nxt_slow_path(router_port == NULL || !nxt_controller_router_ready)) {
320 return NXT_DECLINED;
321 }
322
323 controller_port = rt->port_by_type[NXT_PROCESS_CONTROLLER];
324
325 size = nxt_conf_json_length(conf, NULL);
326
327 b = nxt_port_mmap_get_buf(task, router_port, size);

--- 974 unchanged lines hidden ---
353 return NXT_DECLINED;
354 }
355
356 controller_port = rt->port_by_type[NXT_PROCESS_CONTROLLER];
357
358 size = nxt_conf_json_length(conf, NULL);
359
360 b = nxt_port_mmap_get_buf(task, router_port, size);

--- 974 unchanged lines hidden ---