summaryrefslogtreecommitdiffhomepage
path: root/src/nxt_main_process.c (unfollow)
AgeCommit message (Collapse)AuthorFilesLines
2022-04-26Fixed indentation.Alejandro Colomar1-1/+1
Some lines (incorrectly) had an indentation of 3 or 5, or 7 or 9, or 11 or 13, or 15 or 17 spaces instead of 4, 8, 12, or 16. Fix them. Found with: $ find src -type f | xargs grep -n '^ [^ ]'; $ find src -type f | xargs grep -n '^ [^ *]'; $ find src -type f | xargs grep -n '^ [^ ]'; $ find src -type f | xargs grep -n '^ [^ *]'; $ find src -type f | xargs grep -n '^ [^ +]'; $ find src -type f | xargs grep -n '^ [^ *+]'; $ find src -type f | xargs grep -n '^ [^ +]'; $ find src -type f | xargs grep -n '^ [^ *+]';
2021-11-24Fixing zombie process appearance and hang up on shutdown.Max Romanov1-1/+3
After the c8790d2a89bb commit, the SIGCHLD handler may return before processing all awaiting PIDs. To avoid zombie processes and ensure successful main process termination, waitpid() must be called until an error is returned. This closes #600 issue on GitHub.
2021-11-24Fixing zombie process appearance and hang up on shutdown.Max Romanov1-1/+3
After the c8790d2a89bb commit, the SIGCHLD handler may return before processing all awaiting PIDs. To avoid zombie processes and ensure successful main process termination, waitpid() must be called until an error is returned. This closes #600 issue on GitHub.
2021-11-24Sending shared port to application prototype.Max Romanov1-4/+26
Application process started with shared port (and queue) already configured. But still waits for PORT_ACK message from router to start request processing (so-called "ready state"). Waiting for router confirmation is necessary. Otherwise, the application may produce response and send it to router before the router have the information about the application process. This is a subject of further optimizations.
2021-11-09Introducing application prototype processes.Tiago Natel de Moura1-18/+165
2021-11-09Changed nxt_process_* for reuse.Tiago Natel de Moura1-219/+52
This enables the reuse of process creation functions.
2021-11-09Introduced SCM_CREDENTIALS / SCM_CREDS in the socket control msgs.Tiago Natel de Moura1-2/+31
2021-10-28Moving request limit control to libunit.Max Romanov1-0/+7
Introducting application graceful stop. For now only used when application process reach request limit value. This closes #585 issue on GitHub.
2021-10-12Removed unused declarations.Zhidao HONG1-4/+0
Declarations became unused after 6976d36be926. No functional changes.
2021-10-09Configuration: automatic migration to the new "share" behavior.Zhidao HONG1-20/+45
2021-08-03Fixed dead assignments.Max Romanov1-2/+0
Found by Clang Static Analyzer.
2021-07-02Ruby: process and thread lifecycle hooks.Oisin Canty1-0/+5
This feature allows one to specify blocks of code that are called when certain lifecycle events occur. A user configures a "hooks" property on the app configuration that points to a script. This script will be evaluated on boot and should contain blocks of code that will be called on specific events. An example of configuration: { "type": "ruby", "processes": 2, "threads": 2, "user": "vagrant", "group": "vagrant", "script": "config.ru", "hooks": "hooks.rb", "working_directory": "/home/vagrant/unit/rbhooks", "environment": { "GEM_HOME": "/home/vagrant/.ruby" } } An example of a valid "hooks.rb" file follows: File.write("./hooks.#{Process.pid}", "hooks evaluated") on_worker_boot do File.write("./worker_boot.#{Process.pid}", "worker booted") end on_thread_boot do File.write("./thread_boot.#{Process.pid}.#{Thread.current.object_id}", "thread booted") end on_thread_shutdown do File.write("./thread_shutdown.#{Process.pid}.#{Thread.current.object_id}", "thread shutdown") end on_worker_shutdown do File.write("./worker_shutdown.#{Process.pid}", "worker shutdown") end This closes issue #535 on GitHub.
2021-05-20Python: support for multiple targets.Oisin Canty1-0/+6
2021-02-03Fixing possible NULL dereference.Max Romanov1-11/+12
For listen socket request reply port can be NULL if Router crashes immediately after issuing the request. Found by Coverity (CID 366310).
2021-02-03Using shared memory to pass configuration to main process.Max Romanov1-17/+52
This patch is required to remove fragmented messages functionality.
2020-12-22Python: multiple values in the "path" option.Valentin Bartenev1-1/+1
2020-11-10Python: supporting ASGI legacy protocol.Max Romanov1-0/+6
Introducing manual protocol selection for 'universal' apps and frameworks.
2020-11-05Perl: request processing in multiple threads.Max Romanov1-0/+12
This closes #486 issue on GitHub.
2020-11-05Ruby: request processing in multiple threads.Max Romanov1-0/+5
This closes #482 issue on GitHub.
2020-11-05Java: request processing in multiple threads.Max Romanov1-0/+10
This closes #458 issue on GitHub.
2020-11-05Python: request processing in multiple threads.Max Romanov1-0/+12
This closes #459 issue on GitHub.
2020-10-29Isolation: mounting of procfs by default when using "rootfs".Tiago Natel de Moura1-2/+8
2020-09-18Python: app module callable name configuration.Max Romanov1-0/+6
Now it is possible to specify the name of the application callable using optional parameter 'callable'. Default value is 'application'. This closes #290 issue on GitHub.
2020-08-25Isolation: added "automount" option.Tiago Natel de Moura1-0/+2
Now it's possible to disable default bind mounts of languages by setting: { "isolation": { "automount": { "language_deps": false } } } In this case, the user is responsible to provide a "rootfs" containing the language libraries and required files for the application.
2020-08-20Moved isolation related code to "nxt_isolation.c".Tiago Natel de Moura1-4/+2
2020-08-13Fixed error handling of prefork callback.Tiago Natel de Moura1-14/+21
Previously, an error during the prefork phase triggered assert: src/nxt_port.c:27 assertion failed: port->pair[0] == -1 and resulted in exiting of the main process. This could be easily reproduced by pushing a configuration with "rootfs", when daemon is running without required permissions.
2020-05-28Added "rootfs" feature.Tiago Natel de Moura1-5/+84
2020-03-09Refactor of process management.Tiago Natel de Moura1-798/+251
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-14PHP: implemented "targets" option.Valentin Bartenev1-15/+5
This allows to specify multiple subsequent targets inside PHP applications. For example: { "listeners": { "*:80": { "pass": "routes" } }, "routes": [ { "match": { "uri": "/info" }, "action": { "pass": "applications/my_app/phpinfo" } }, { "match": { "uri": "/hello" }, "action": { "pass": "applications/my_app/hello" } }, { "action": { "pass": "applications/my_app/rest" } } ], "applications": { "my_app": { "type": "php", "targets": { "phpinfo": { "script": "phpinfo.php", "root": "/www/data/admin", }, "hello": { "script": "hello.php", "root": "/www/data/test", }, "rest": { "root": "/www/data/example.com", "index": "index.php" }, } } } }
2019-12-24Adding "limits/shm" configuration validation and parsing.Max Romanov1-1/+31
2019-12-06Isolation: allowed the use of credentials with unpriv userns.Tiago Natel1-24/+189
The setuid/setgid syscalls requires root capabilities but if the kernel supports unprivileged user namespace then the child process has the full set of capabilities in the new namespace, then we can allow setting "user" and "group" in such cases (this is a common security use case). Tests were added to ensure user gets meaningful error messages for uid/gid mapping misconfigurations.
2019-12-06Moved credential-related code to nxt_credential.c.Tiago Natel1-3/+2
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-96/+217
Introduces the functions nxt_process_init_create() and nxt_process_init_creds_set().
2019-10-29Process port refactoring.Hong Zhi Dao1-15/+3
- 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-17/+10
This avoids memory leak reports from the address sanitizer.
2019-10-11Fixed passing false in namespace flags.Tiago Natel1-4/+2
This patch closes #328 in github.
2019-10-10Style fixes.Igor Sysoev1-4/+11
2019-09-30Fixed exiting if a signal arrives during discovery.Max Romanov1-35/+38
When Unit starts, the main process waits for module discovery message for a while. If a QUIT signal arrives at this time, the router and controller processes created by main and Unit stay running. Also, the main process doesn't stop them after the second QUIT signal is received in this case.
2019-09-20Removed linux/sched.h include.Tiago Natel1-4/+0
The <sched.h> is already included by nxt_unix.h. This closes #314 PR on GitHub.
2019-09-20Releasing init struct in case of errors.Tiago Natel1-4/+10
Found by Coverity (CID 349485).
2019-09-19Initial applications isolation support using Linux namespaces.Tiago de Bem Natel de Moura1-24/+183
2019-09-18Fixing master process crash after failed fork.Max Romanov1-2/+7
This closes #312 issue on GitHub.
2019-03-11Style.Andrey Zelenkov1-1/+1
2019-02-28Introducing Java Servlet Container beta.Max Romanov1-0/+26
2019-02-18Ignoring HUP signal in main process.Igor Sysoev1-0/+11
2019-01-21Fixed processing Unix listening socket failures.Igor Sysoev1-16/+13
This is related to issue #198 on GitHub.
2018-10-09Renamed "go" application type to "external".Valentin Bartenev1-21/+21
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-20Resetting init->stream for ready process.Max Romanov1-0/+4
Router requests application start by sending port message with application parameters to master. In response router gets application port. Stream id used to link request and response. If application process terminates unexpectedly (e.g. before ready state), it is required to notify router about application start failure. For this purpose stream id is stored in process initialization parameters. Stream id sequentially incremented and starts from 1 in case of router resurrection. New router application start stream id may coincide with stream id of currently running/terminating application processes. In such cases router may receive REMOVE_PID message with same stream id as used in application start request and mistakenly reports application start failure. This commit tries to avoid such errors by resetting stream for processes in ready state.
2018-09-20Controller: certificates storage interface.Valentin Bartenev1-16/+38
2018-09-07Misspelled variable names fixed.Max Romanov1-1/+1