From 18fbfc3d5027df68b7696afb16323c66f2582100 Mon Sep 17 00:00:00 2001 From: Igor Sysoev Date: Mon, 6 Jul 2020 15:32:20 +0300 Subject: Destroying temporary router configuration. The lifespan of a listening socket is longer than both router configuration's and temporary router configuration's lifespan, so the sockets should be stored in persistent queues. Safety is ensured by the fact that the router processes only one new configuration at any time. --- src/nxt_router.h | 6 ------ 1 file changed, 6 deletions(-) (limited to 'src/nxt_router.h') diff --git a/src/nxt_router.h b/src/nxt_router.h index 6004a459..d8e93be6 100644 --- a/src/nxt_router.h +++ b/src/nxt_router.h @@ -66,12 +66,6 @@ typedef struct { typedef struct { - nxt_queue_t creating; /* of nxt_socket_conf_t */ - nxt_queue_t pending; /* of nxt_socket_conf_t */ - nxt_queue_t updating; /* of nxt_socket_conf_t */ - nxt_queue_t keeping; /* of nxt_socket_conf_t */ - nxt_queue_t deleting; /* of nxt_socket_conf_t */ - #if (NXT_TLS) nxt_queue_t tls; /* of nxt_router_tlssock_t */ #endif -- cgit From 83595606121a821f9e3cef0f0b7e7fe87eb1e50a Mon Sep 17 00:00:00 2001 From: Max Romanov Date: Tue, 11 Aug 2020 19:20:15 +0300 Subject: Introducing the shared application port. This is the port shared between all application processes which use it to pass requests for processing. Using it significantly simplifies the request processing code in the router. The drawback is 2 more file descriptors per each configured application and more complex libunit message wait/read code. --- src/nxt_router.h | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'src/nxt_router.h') diff --git a/src/nxt_router.h b/src/nxt_router.h index d8e93be6..7e0dc7d7 100644 --- a/src/nxt_router.h +++ b/src/nxt_router.h @@ -101,18 +101,20 @@ typedef struct { struct nxt_app_s { - nxt_thread_mutex_t mutex; /* Protects ports queue. */ - nxt_queue_t ports; /* of nxt_port_t.app_link */ + nxt_thread_mutex_t mutex; /* Protects ports queue. */ + nxt_queue_t ports; /* of nxt_port_t.app_link */ + nxt_lvlhsh_t port_hash; /* of nxt_port_t */ nxt_queue_t spare_ports; /* of nxt_port_t.idle_link */ nxt_queue_t idle_ports; /* of nxt_port_t.idle_link */ nxt_work_t adjust_idle_work; nxt_event_engine_t *engine; - nxt_queue_t requests; /* of nxt_request_app_link_t */ - nxt_queue_t pending; /* of nxt_request_app_link_t */ nxt_str_t name; + uint32_t port_hash_count; + + uint32_t active_requests; uint32_t pending_processes; uint32_t processes; uint32_t idle_processes; @@ -120,7 +122,6 @@ struct nxt_app_s { uint32_t max_processes; uint32_t spare_processes; uint32_t max_pending_processes; - uint32_t max_pending_responses; uint32_t max_requests; nxt_msec_t timeout; @@ -139,6 +140,9 @@ struct nxt_app_s { nxt_atomic_t use_count; nxt_app_joint_t *joint; + nxt_port_t *shared_port; + + nxt_port_mmaps_t outgoing; }; -- cgit From 72475ee11c4254086e5d5648c86498833bf8e939 Mon Sep 17 00:00:00 2001 From: Max Romanov Date: Tue, 11 Aug 2020 19:20:28 +0300 Subject: Made router port message handlers into static functions. Mostly harmless. --- src/nxt_router.h | 6 ------ 1 file changed, 6 deletions(-) (limited to 'src/nxt_router.h') diff --git a/src/nxt_router.h b/src/nxt_router.h index 7e0dc7d7..ead8f292 100644 --- a/src/nxt_router.h +++ b/src/nxt_router.h @@ -217,12 +217,6 @@ struct nxt_router_access_log_s { }; -void nxt_router_new_port_handler(nxt_task_t *task, nxt_port_recv_msg_t *msg); -void nxt_router_conf_data_handler(nxt_task_t *task, nxt_port_recv_msg_t *msg); -void nxt_router_remove_pid_handler(nxt_task_t *task, nxt_port_recv_msg_t *msg); -void nxt_router_access_log_reopen_handler(nxt_task_t *task, - nxt_port_recv_msg_t *msg); - void nxt_router_process_http_request(nxt_task_t *task, nxt_http_request_t *r, nxt_app_t *app); void nxt_router_app_port_close(nxt_task_t *task, nxt_port_t *port); -- cgit From 09685e2b4143ec19afef7673a455cf7e4d1414b7 Mon Sep 17 00:00:00 2001 From: Max Romanov Date: Wed, 12 Aug 2020 15:25:29 +0300 Subject: Responding with error in case of first process start failure. After shared application port introducing, request queue in router was removed and requests may stuck forever waiting for another process start. --- src/nxt_router.h | 1 + 1 file changed, 1 insertion(+) (limited to 'src/nxt_router.h') diff --git a/src/nxt_router.h b/src/nxt_router.h index ead8f292..0b1147f8 100644 --- a/src/nxt_router.h +++ b/src/nxt_router.h @@ -138,6 +138,7 @@ struct nxt_app_s { nxt_str_t conf; nxt_atomic_t use_count; + nxt_queue_t ack_waiting_req; /* of nxt_http_request_t.app_link */ nxt_app_joint_t *joint; nxt_port_t *shared_port; -- cgit From 93146616cf56a94fc2979cb978c7b451c5592594 Mon Sep 17 00:00:00 2001 From: Valentin Bartenev Date: Thu, 13 Aug 2020 02:46:54 +0300 Subject: Basic variables support. --- src/nxt_router.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/nxt_router.h') diff --git a/src/nxt_router.h b/src/nxt_router.h index 0b1147f8..81b3538c 100644 --- a/src/nxt_router.h +++ b/src/nxt_router.h @@ -48,6 +48,7 @@ typedef struct { nxt_upstreams_t *upstreams; nxt_lvlhsh_t mtypes_hash; + nxt_lvlhsh_t apps_hash; nxt_router_access_log_t *access_log; } nxt_router_conf_t; @@ -221,9 +222,8 @@ struct nxt_router_access_log_s { void nxt_router_process_http_request(nxt_task_t *task, nxt_http_request_t *r, nxt_app_t *app); void nxt_router_app_port_close(nxt_task_t *task, nxt_port_t *port); -void nxt_router_listener_application(nxt_router_temp_conf_t *tmcf, +nxt_int_t nxt_router_listener_application(nxt_router_conf_t *rtcf, nxt_str_t *name, nxt_http_action_t *action); -void nxt_router_app_use(nxt_task_t *task, nxt_app_t *app, int i); void nxt_router_listen_event_release(nxt_task_t *task, nxt_listen_event_t *lev, nxt_socket_conf_joint_t *joint); void nxt_router_conf_release(nxt_task_t *task, nxt_socket_conf_joint_t *joint); -- cgit