summaryrefslogtreecommitdiffhomepage
path: root/src/nxt_router.c (follow)
AgeCommit message (Collapse)AuthorFilesLines
2019-02-18Fixed memory leak on response body sending failure.Igor Sysoev1-1/+1
2018-10-22Handling of timers with bias.Valentin Bartenev1-2/+2
Timers that don't require maximum precision (most of them, actually) can be triggered earlier or later within the bias interval. To reduce wakeups by timers, the expire function now triggers not only all timers that fall within the elapsed time, but also those whose bias falls within this interval.
2018-10-09Renamed "go" application type to "external".Valentin Bartenev1-1/+1
There's nothing specific to Go language. This type of application object can be used to run any external application that utilizes libunit API.
2018-09-20Preventing port from release in asynchronous operations.Max Romanov1-0/+12
Router reconfiguration may lead to starting new application processes, opening listen ports etc. These actions are asynchronous and require message exchange with master process. Router stores reference for controller (response) port in structure associated with reconfiguration process (tmcf). The port used to provide reconfiguration response (either success or failed) to controller. This commit increases response port use counter to make sure port structure not freed while router waits for result of asynchronous operations.
2018-09-20Controller: certificates storage interface.Valentin Bartenev1-0/+136
2018-09-20Added SSL/TLS support on connection level.Igor Sysoev1-0/+18
2018-09-19Initializing application structure with 0 to avoid crash.Max Romanov1-2/+7
Attribute 'application' is optional in listener object. This commit adds missing code to reset 'lscf' to avoid garbage and crash when the attribute is absent.
2018-08-10Introducing app joint to accurate app release.Max Romanov1-86/+157
For accurate app descriptor release, it is required to count the number of use counts. Use count increased when: - app linked to configuration app queue; - socket conf stores pointer to app; - request for start app process posted to router service thread; Application port has pointer to app, but it does not increase use count to avoid use count loop. Timer needs a pointer to nxt_timer_t which is stored in engine timers tree. nxt_timer_t now resides in nxt_app_joint_t and does not lock the application. Start process port RPC handlers is also linked to nxt_app_joint_t. App joint (nxt_app_joint_t) is a 'weak pointer': - single threaded; - use countable; - store pointer to nxt_app_t (which can be NULL); nxt_app_t has pointer to nxt_app_joint_t and update its pointer to app.
2018-08-06Unit application library.Max Romanov1-360/+295
Library now used in all language modules. Old 'nxt_app_*' code removed. See src/test/nxt_unit_app_test.c for usage sample.
2018-07-09Controller: added "settings" configuration object.Valentin Bartenev1-1/+1
It has the following structure and default values: { "http": { "header_read_timeout": 30, "body_read_timeout": 30, "send_timeout": 30, "idle_timeout": 180, "max_body_size": 8388608 } }
2018-07-09Router: increased HTTP connection related limits.Valentin Bartenev1-5/+5
2018-07-05PHP: fixed request body processing.Valentin Bartenev1-19/+3
The implementation of module was based on the assumption that PHP reads request body and headers in the particular order. For the POST request the body goes before headers and vice versa for all other requests. But as it appeared later, this order is unspecified and depends on many factors, including the particular code of PHP application. Among other factors those can affect ordering: - presence of "Content-Type" header; - "variables_order" php.ini setting; - "enable_post_data_reading" php.ini setting; - reading php://input by application; and this list can be incomplete. As a temporary workaround, request body now is always put before headers and it is gracefully skipped whenever PHP wants to get headers. This closes #144 issue on GitHub.
2018-06-25Introduced nxt_length() macro.Valentin Bartenev1-3/+3
2018-05-30Fixed keep-alive hanging after reconfiguration.Igor Sysoev1-60/+30
2018-04-27Eliminating possible NULL pointer dereference.Max Romanov1-1/+3
Found by Coverity (CID 276138).
2018-04-26Controller waits READY message from router.Max Romanov1-0/+34
This required to avoid racing condition when controller receive router port before router receives controller port.
2018-04-19Router: fixed race condition while access log reopening.Valentin Bartenev1-2/+21
In order to reopen access log, the router process creates a memory pool and allocates a buffer to send RPC message for the main process. Previously, the memory pool was destroyed when RPC response handler was called. It appeared, that the buffer completion handler could be not triggered by that time and still remained in a queue. Now the memory pool is destroyed only after both events are happen.
2018-04-18Added missing cleanup when nxt_port_socket_write() failed.Valentin Bartenev1-13/+39
2018-04-17Added missing checks if nxt_port_rpc_register_handler() failed.Valentin Bartenev1-1/+1
This closes #97 issue on GitHub. Thanks to 洪志道 (Hong Zhi Dao).
2018-04-11Access log reopening.Valentin Bartenev1-0/+113
2018-04-11Initial access log support.Valentin Bartenev1-5/+298
2018-04-05Handling error return from application 'run()' function.Max Romanov1-3/+7
Server error response generated or connection closed.
2018-04-05Stopping timed out application process.Max Romanov1-9/+88
2018-04-03HTTP: using r->mem_pool retention counter for response buffers.Igor Sysoev1-9/+8
2018-03-28Using more expressive name for field.Igor Sysoev1-18/+19
2018-03-21Added Ruby support.Alexander Borisov1-0/+88
2018-03-15Skipping idle state when port already closed.Max Romanov1-1/+1
2018-03-14Ignoring response for already terminated request.Max Romanov1-0/+3
Request can be terminated because of invalid response headers and content should be ignored in this case.
2018-03-13Releasing application on configuration failure.Max Romanov1-0/+15
2018-03-07Socket configuration should retain application.Max Romanov1-0/+8
This retains application during reconfiguration if an incoming connection was already established before the reconfiguration, but no request was yet created for the connection and thus no application was yet assigned to the request.
2018-03-05Reduced number of critical log levels.Valentin Bartenev1-15/+14
2018-02-20Removed unwanted assertions.Max Romanov1-11/+19
2018-02-09Made nxt_assert() statements to be compiled only with debug.Valentin Bartenev1-2/+12
2018-02-09Changed the default number of spare processes to 0.Valentin Bartenev1-1/+1
2018-02-08Router: fixed freed memory access race condition.Igor Sysoev1-6/+8
2018-02-07Style fixes.Andrey Zelenkov1-1/+1
2018-02-07Fixed processing of application response in router.Max Romanov1-1/+4
If the first buffer contained only header and there were other buffers in chain, those buffers were not processed. In particular, this broke Perl application responses with empty body.
2018-01-31Added Perl support.Alexander Borisov1-4/+93
2018-01-29Introducing extended app process management.Max Romanov1-85/+545
- Pre-fork 'processes.spare' application processes; - fork more processes to keep 'processes.spare' idle processes; - fork on-demand up to 'processes.max' count; - scale down idle application processes above 'processes.spare' after 'processes.idle_timeout'; - number of concurrently started application processes also limited by 'processes.spare' (or 1, if spare is 0).
2018-01-24Fixed formatting in nxt_sprintf() and logging.Sergey Kandaurov1-3/+3
2018-01-24Using size_t for the field width type of the "%*s" specifier.Sergey Kandaurov1-3/+3
2017-12-28Fixing memory leak introduced in changeset 5817734dd9b9.Igor Sysoev1-1/+4
2017-12-28HTTP keep-alive connections support.Igor Sysoev1-640/+120
2017-12-28Changed nxt_mp_retain() and nxt_mp_release() interfaces.Igor Sysoev1-4/+13
2017-12-27Implementing worker stop after limits.requests.Max Romanov1-4/+13
2017-12-27Rescheduling of pending request after configured timeout.Max Romanov1-83/+214
New optional configuration parameter introduced: limits.reschedule_timeout. Default value 1 second. In the case when request is written to the port socket 'in advance', it is called 'pending'. On every completed request, the head of pending request is checked against reschedule timeout. If this request waiting for execution longer than timeout, it is cancelled, new port selected for this request.
2017-12-27Fixing code style.Max Romanov1-16/+16
2017-12-27Fixing application timeout.Max Romanov1-89/+318
Application timeout limits maximum time of worker response in processing particular request. Not including the time required to start worker, time in request queue etc.
2017-12-27Changing worker selection precedence.Max Romanov1-22/+47
This patch increase precedence of non-started worker over busy worker. 1. idle worker; 2. start new worker; 3. busy worker, but can accept request in advance;
2017-12-27Implementing the ability to cancel request before worker starts processing it.Max Romanov1-131/+103