summaryrefslogtreecommitdiffhomepage
path: root/src/nxt_runtime.c (follow)
AgeCommit message (Collapse)AuthorFilesLines
2020-08-11Process structures refactoring in runtime and libunit.Max Romanov1-3/+0
Generic process-to-process shared memory exchange is no more required. Here, it is transformed into a router-to-application pattern. The outgoing shared memory segments collection is now the property of the application structure. The applications connect to the router only, and the process only needs to group the ports.
2020-08-11Changing router to application port exchange protocol.Max Romanov1-7/+0
The application process needs to request the port from the router instead of the latter pushing the port before sending a request to the application. This is required to simplify the communication between the router and the application and to prepare the router to use the application shared port and then the queue.
2020-07-23Fixing various router crashes on exit caused by runtime pool free.Max Romanov1-7/+18
Currently, the router exits without waiting for the worker threads to stop. There is a short gap between the runtime memory pool's free and the exit, during which a worker thread may try to access a runtime structure. In turn, this may cause a crash. For now, it is better to keep this memory allocated.
2020-05-28Added "rootfs" feature.Tiago Natel de Moura1-0/+1
2020-03-09Refactor of process management.Tiago Natel de Moura1-4/+56
The process abstraction has changed to: setup(task, process) start(task, process_data) prefork(task, process, mp) The prefork() occurs in the main process right before fork. The file src/nxt_main_process.c is completely free of process specific logic. The creation of a process now supports a PROCESS_CREATED state. The The setup() function of each process can set its state to either created or ready. If created, a MSG_PROCESS_CREATED is sent to main process, where external setup can be done (required for rootfs under container). The core processes (discovery, controller and router) doesn't need external setup, then they all proceeds to their start() function straight away. In the case of applications, the load of the module happens at the process setup() time and The module's init() function has changed to be the start() of the process. The module API has changed to: setup(task, process, conf) start(task, data) As a direct benefit of the PROCESS_CREATED message, the clone(2) of processes using pid namespaces now doesn't need to create a pipe to make the child block until parent setup uid/gid mappings nor it needs to receive the child pid.
2020-05-28Moving nxt_stream_ident to shared memory.Max Romanov1-0/+4
This aims to avoid stream id clashes after router restart.
2020-04-08Controller: improved handling of unix domain control socket.Valentin Bartenev1-1/+1
One of the ways to detect Unit's startup and subsequent readiness to accept commands relies on waiting for the control socket file to be created. Earlier, it was unreliable due to a race condition between the client's connect() and the daemon's listen() calls after the socket's bind() call. Now, unix domain listening sockets are created with a nxt_listen_socket_create() call as follows: s = socket(); unlink("path/to/socket.tmp") bind(s, "path/to/socket.tmp"); listen(s); rename("path/to/socket.tmp", "path/to/socket"); This eliminates a time-lapse when the socket file is already created but nobody is listening on it yet, which therefore prevents the condition described above. Also, it allows reliably detecting whether the socket is being used or simply wasn't cleaned after the daemon stopped abruptly. A successful connection to the socket file means the daemon has been started; otherwise, the file can be overwritten.
2020-04-08Removed unused code related to testing of address binding.Valentin Bartenev1-1/+1
2020-03-12Using disk file to store large request body.Max Romanov1-0/+18
This closes #386 on GitHub.
2019-12-06Moved credential-related code to nxt_credential.c.Tiago Natel1-1/+1
This is required to avoid include cycles, as some nxt_clone_* functions depend on the credential structures, but nxt_process depends on clone structures.
2019-11-26Refactor of process init.Tiago Natel1-2/+5
Introduces the functions nxt_process_init_create() and nxt_process_init_creds_set().
2019-10-29Process port refactoring.Hong Zhi Dao1-29/+42
- Introduced nxt_runtime_process_port_create(). - Moved nxt_process_use() into nxt_process.c from nxt_runtime.c. - Renamed nxt_runtime_process_remove_pid() as nxt_runtime_process_remove(). - Some public functions transformed to static. This closes #327 issue on GitHub.
2019-10-29Allocating process init struct from runtime memory pool.Max Romanov1-0/+4
This avoids memory leak reports from the address sanitizer.
2019-10-28Releasing the memory of removed thread pools at exit.Tiago Natel1-0/+2
2019-10-22Fixing idle connection close function.Max Romanov1-1/+1
There was a typo: nxt_queue_head() used instead of nxt_queue_first() in connection iteration loop. This prevents idle connection close on quit. This closes #334 issue on GitHub. Thanks to 洪志道 (Hong Zhi Dao).
2019-09-19Initial applications isolation support using Linux namespaces.Tiago de Bem Natel de Moura1-1/+13
2019-03-22Destroying pool in case of error.Max Romanov1-2/+1
This closes #233 issue on GitHub. Thanks to 洪志道 (Hong Zhi Dao).
2018-10-23Removed unused "--upstream" command line option.Valentin Bartenev1-14/+0
2018-10-09Renamed "go" application type to "external".Valentin Bartenev1-2/+2
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-20Controller: certificates storage interface.Valentin Bartenev1-0/+17
2018-08-10Stopping all application processes if router process dies.Max Romanov1-1/+1
Unit master process restarts the router if the router accidentally dies. New router process receives the configuration from controller and starts configured applications. The information of running applications cannot be transferred to router because currently there is no persistent application identifier. To avoid orphan application processes started by died router, master process stops all currently running applications once it receives SIGCHLD for router process.
2018-06-25Removed '\r' and '\n' artifact macros.Igor Sysoev1-1/+1
2018-06-25Introduced nxt_length() macro.Valentin Bartenev1-11/+11
2018-06-18Fixed exit status on start failure.Igor Sysoev1-9/+12
This and previous commit close #131 issue on GitHub.
2018-06-18Removing Unix control socket on start failure.Igor Sysoev1-2/+2
The bug had appeared in 5cc5002a788e when process type has been converted to bitmask. This commit reverts the type back to a number. This commit is related to #131 issue on GitHub.
2018-06-18Removed unused single process type.Igor Sysoev1-31/+1
2018-04-18Removed duplicating socket address parsing function.Valentin Bartenev1-279/+3
This also fixes #101 issue on GitHub. The function previously used to parse IPv6 address of control socket was broken. Now the working function is used instead.
2018-04-13Improved "unitd" command line help.Valentin Bartenev1-2/+5
2018-03-29nxt_lvlhsh_each() refactoring and nxt_lvlhsh_each_init().Igor Sysoev1-3/+1
2018-03-29Using nxt_lvlhsh_peek() for port hashes.Igor Sysoev1-8/+4
2018-03-29Removed unused macros and functions.Igor Sysoev1-7/+0
2018-03-05Reduced number of critical log levels.Valentin Bartenev1-20/+16
2018-01-24Fixed formatting in nxt_sprintf() and logging.Sergey Kandaurov1-1/+1
2017-11-20Fixing Coverity warnings.Max Romanov1-0/+3
CID 200496 CID 200494 CID 200490 CID 200489 CID 200483 CID 200482 CID 200472 CID 200465
2017-10-19Supporting concurrent shared memory fd receive in router.Max Romanov1-6/+6
Two different router threads may send different requests to single application worker. In this case shared memory fds from worker to router will be send over 2 different router ports. These fds will be received and processed by different threads in any order. This patch made possible to add incoming shared memory segments in arbitrary order. Additionally, array and memory pool are no longer used to store segments because of pool's single threaded nature. Custom array-like structure nxt_port_mmaps_t introduced.
2017-10-10Optimized application type handling.Valentin Bartenev1-1/+1
2017-10-05Improved applications versions handling.Valentin Bartenev1-1/+1
2017-10-04Introducing process use counter.Max Romanov1-16/+14
This helps to decouple process removal from port memory pool cleanups.
2017-10-04Return error codes for port_hash operations.Max Romanov1-2/+12
2017-10-04Introducing use counters for port and app. Thread safe port write.Max Romanov1-9/+27
Use counter helps to simplify logic around port and application free. Port 'post' function introduced to simplify post execution of particular function to original port engine's thread. Write message queue is protected by mutex which makes port write operation thread safe.
2017-10-04Using engine memiory pool for port write allocations.Max Romanov1-0/+1
To allow use port from different threads, the first step is to avoid using port's memory pool for temporary allocations required to send data through the port. Including but not limited by: - buffers for data; - send message structures; - new mmap fd notifications; It is still safe to use port memory pool for incoming buffers allocations because recieve operation bound to single thread.
2017-10-04Removing mem_pool from port_hash interface.Max Romanov1-5/+10
Memory pool is not used by port_hash and it was a mistake to pass it into 'add' and 'remove' functions. port_hash enrties are allocated from heap.
2017-09-22Removed fibers from compilation.Valentin Bartenev1-0/+2
It's not used anyway, but breaks building with musl. This closes issue #5 on GitHub.
2017-09-10Configuration persistence.Valentin Bartenev1-0/+40
Now configuration survives server reloads.
2017-09-06Style fixes.Igor Sysoev1-2/+3
2017-08-31Changed modules names format.Igor Sysoev1-1/+1
2017-08-31nginext has been renamed to unit.Igor Sysoev1-5/+5
2017-08-30Fixed pid_file pattern misprint introduced in 231:6832cdee961e.Max Romanov1-1/+1
2017-08-30Adding a missing slash to the tail of path set by --modulesIgor Sysoev1-3/+12
command line option.
2017-08-29The master process has been renamed to the main process.Igor Sysoev1-8/+8