Revision tags: 1.32.1-1, 1.32.0-1, 1.32.0 |
|
#
2609:f2a0806125dc |
| 13-Dec-2023 |
Andrew Clayton |
Ruby: Prevent a possible integer underflow
Coverity picked up a potential issue with the previous commit d9f5f1fb7 ("Ruby: Handle response field arrays") in that a size_t could wrap around to SIZE_M
Ruby: Prevent a possible integer underflow
Coverity picked up a potential issue with the previous commit d9f5f1fb7 ("Ruby: Handle response field arrays") in that a size_t could wrap around to SIZE_MAX - 1.
This would happen if we were given an empty array of header values.
Fixes: d9f5f1fb7 ("Ruby: Handle response field arrays") Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
show more ...
|
#
2608:2091b078cdf6 |
| 23-Oct-2023 |
Andrew Clayton |
Ruby: Handle response field arrays
@xeron on GitHub reported an issue whereby with a Rails 7.1 application they were getting the following error
2023/10/22 20:57:28 [error] 56#56 [unit] #8: Ruby:
Ruby: Handle response field arrays
@xeron on GitHub reported an issue whereby with a Rails 7.1 application they were getting the following error
2023/10/22 20:57:28 [error] 56#56 [unit] #8: Ruby: Wrong header entry 'value' from application 2023/10/22 20:57:28 [error] 56#56 [unit] #8: Ruby: Failed to run ruby script
After some back and forth debugging it turns out rack was trying to send back a header comprised of an array of values. E.g
app = Proc.new do |env| ["200", { "Content-Type" => "text/plain", "X-Array-Header" => ["Item-1", "Item-2"], }, ["Hello World\n"]] end
run app
It seems this became a possibility in rack v3.0[0]
So along with a header value type of T_STRING we need to also allow T_ARRAY.
If we get a T_ARRAY we need to build up the header field using the given values.
E.g
"X-Array-Header" => ["Item-1", "", "Item-3", "Item-4"],
becomes
X-Array-Header: Item-1; ; Item-3; Item-4
[0]: <https://github.com/rack/rack/blob/main/UPGRADE-GUIDE.md?plain=1#L26>
Reported-by: Ivan Larionov <xeron.oskom@gmail.com> Closes: <https://github.com/nginx/unit/issues/974> Link: <https://github.com/nginx/unit/pull/998> Tested-by: Timo Stark <t.stark@nginx.com> Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
show more ...
|
Revision tags: 1.31.1-1, 1.31.1, 1.31.0-1, 1.31.0, 1.30.0-1, 1.30.0, 1.29.1-1, 1.29.1, 1.29.0-1, 1.29.0 |
|
#
2210:f8b38206ccef |
| 03-Oct-2022 |
Andrew Clayton |
Ruby: used nxt_ruby_exception_log() in nxt_ruby_rack_init().
For consistency use nxt_ruby_exception_log() rather than nxt_alert() in nxt_ruby_rack_init().
Signed-off-by: Andrew Clayton <a.clayton@n
Ruby: used nxt_ruby_exception_log() in nxt_ruby_rack_init().
For consistency use nxt_ruby_exception_log() rather than nxt_alert() in nxt_ruby_rack_init().
Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
show more ...
|
#
2209:8a3994540aa8 |
| 28-Sep-2022 |
Zhidao HONG |
Ruby: added support for rack V3.
Ruby applications would fail to start if they were using rack v3
2022/09/28 15:48:46 [alert] 0#80912 [unit] Ruby: Failed to parse rack script 2022/09/28 15:48:4
Ruby: added support for rack V3.
Ruby applications would fail to start if they were using rack v3
2022/09/28 15:48:46 [alert] 0#80912 [unit] Ruby: Failed to parse rack script 2022/09/28 15:48:46 [notice] 80911#80911 app process 80912 exited with code 1
This was due to a change in the rack API
Rack V2
def self.load_file(path, opts = Server::Options.new) ... cfgfile.sub!(/^__END__\n.*\Z/m, '') app = new_from_string cfgfile, path
return app, options end
Rack V3
def self.load_file(path) ...
return new_from_string(config, path) end
This patch handles _both_ the above APIs by correctly handling the cases where we do and don't get an array returned from nxt_ruby_rack_parse_script().
Closes: <https://github.com/nginx/unit/issues/755> Tested-by: Andrew Clayton <a.clayton@nginx.com> Reviewed-by: Andrew Clayton <a.clayton@nginx.com> [ Andrew: Patch by Zhidao, commit message by me with input from Zhidao ] Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
show more ...
|
#
2208:26af8eadc943 |
| 29-Sep-2022 |
Andrew Clayton |
Renamed a couple of members of nxt_unit_request_t.
This is a preparatory patch that renames the 'local' and 'local_length' members of the nxt_unit_request_t structure to 'local_addr' and 'local_addr
Renamed a couple of members of nxt_unit_request_t.
This is a preparatory patch that renames the 'local' and 'local_length' members of the nxt_unit_request_t structure to 'local_addr' and 'local_addr_length' in preparation for the adding of 'local_port' and 'local_port_length' members.
Suggested-by: Zhidao HONG <z.hong@f5.com> Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
show more ...
|
Revision tags: 1.28.0-1, 1.28.0 |
|
#
2183:5f7bba4cc968 |
| 30-Aug-2022 |
Andrew Clayton |
Ruby: prevented a segfault on receiving SIGINT (^C).
As was reported[0] by @travisbell on GitHub, if running unit from the terminal in the foreground when hitting ^C to exit it, the ruby application
Ruby: prevented a segfault on receiving SIGINT (^C).
As was reported[0] by @travisbell on GitHub, if running unit from the terminal in the foreground when hitting ^C to exit it, the ruby application processes would segfault if they were using threads.
It's not 100% clear where the actual problem lies, but it _looks_ like it may be in ruby.
The simplest way to deal with this for now is to just ignore SIGINT in the ruby application processes. Unit will still receive and handle it, cleanly shutting everything down.
For people who want to handle SIGINT in their ruby application running under unit they can still trap SIGINT and it will override the ignore.
[0]: https://github.com/nginx/unit/issues/562#issuecomment-1223229585
Closes: https://github.com/nginx/unit/issues/562
show more ...
|
#
2164:52fbf5e84a42 |
| 28-Jul-2022 |
Zhidao HONG |
Ruby: fixed segfault on SIGTERM signal.
This closes #562 issue on GitHub.
|
#
2163:67d2d679509e |
| 09-Jun-2022 |
Alejandro Colomar |
Ruby: fixed contents of SCRIPT_NAME.
Having the basename of the script pathname was incorrect. While we don't have something more accurate, the best thing to do is to have it empty (which should be
Ruby: fixed contents of SCRIPT_NAME.
Having the basename of the script pathname was incorrect. While we don't have something more accurate, the best thing to do is to have it empty (which should be the right thing most of the time).
This closes #715 issue on GitHub.
The bug was introduced in git commit 0032543fa65f454c471c968998190b027c1ff270 'Ruby: added the Rack environment parameter "SCRIPT_NAME".'.
show more ...
|
Revision tags: 1.27.0-1, 1.27.0 |
|
#
2087:ce43da300a31 |
| 09-Mar-2022 |
Zhidao HONG |
Ruby: added the Rack environment parameter "SCRIPT_NAME".
|
Revision tags: 1.26.1-1, 1.26.1, 1.26.0-1, 1.26.0 |
|
#
1980:43553aa72111 |
| 28-Oct-2021 |
Max Romanov |
Moving request limit control to libunit.
Introducting application graceful stop. For now only used when application process reach request limit value.
This closes #585 issue on GitHub.
|
Revision tags: 1.25.0-1, 1.25.0 |
|
#
1910:b9e844d85f21 |
| 02-Jul-2021 |
Oisin Canty |
Ruby: process and thread lifecycle hooks.
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 conf
Ruby: process and thread lifecycle hooks.
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.
show more ...
|
#
1905:d66a5f909497 |
| 01-Jul-2021 |
Oisin Canty |
Ruby: improved logging of exceptions without backtraces.
If an exception was raised with a backtrace of zero length, the nxt_ruby_exception_log() routine would return without logging the exception c
Ruby: improved logging of exceptions without backtraces.
If an exception was raised with a backtrace of zero length, the nxt_ruby_exception_log() routine would return without logging the exception class and message. This commit fixes the issue.
show more ...
|
Revision tags: 1.24.0-1, 1.24.0, 1.23.0-1, 1.23.0 |
|
#
1814:05a8e3eb6244 |
| 15-Mar-2021 |
Valentin Bartenev |
Ruby: fixed encodings initialization.
The Ruby interpreter expects an explicit setlocale() call before initialization to pick up character encodings in the "Encoding" class from the environment.
Th
Ruby: fixed encodings initialization.
The Ruby interpreter expects an explicit setlocale() call before initialization to pick up character encodings in the "Encoding" class from the environment.
This closes #531 issue on GitHub.
show more ...
|
Revision tags: 1.22.0-1, 1.22.0 |
|
#
1738:4a7bb9e7678a |
| 07-Dec-2020 |
Max Romanov |
Ruby: fixed crash on thread start.
Ruby threads need to be created with GVL; otherwise, an attempt to access locked resources may occur, causing a crash.
The issue was occasionally reproduced on Ub
Ruby: fixed crash on thread start.
Ruby threads need to be created with GVL; otherwise, an attempt to access locked resources may occur, causing a crash.
The issue was occasionally reproduced on Ubuntu 18.04 with Ruby 2.5.1 while running test_ruby_application_threads.
show more ...
|
Revision tags: 1.21.0-1, 1.21.0 |
|
#
1691:a9d23e41c19b |
| 05-Nov-2020 |
Max Romanov |
Ruby: error checking during thread creation.
Application terminates in case of thread creation failure.
|
#
1687:b9d99e596725 |
| 04-Nov-2020 |
Max Romanov |
Ruby: request processing in multiple threads.
This closes #482 issue on GitHub.
|
#
1686:9f31e1ab6c19 |
| 04-Nov-2020 |
Max Romanov |
Ruby: reusing static constant references to string objects.
This shall save a couple of CPU cycles in request processing.
|
Revision tags: 1.20.0-1, 1.20.0, 1.19.0-1, 1.19.0 |
|
#
1532:4b4d0c3ce94b |
| 30-Jul-2020 |
Tiago Natel de Moura |
Isolation: fixed the generation of mounts table.
Since the introduction of rootfs feature, some language modules can't be configured multiple times.
Now the configure generates a separate nxt_<modu
Isolation: fixed the generation of mounts table.
Since the introduction of rootfs feature, some language modules can't be configured multiple times.
Now the configure generates a separate nxt_<module>_mounts.h for each module compiled.
show more ...
|
#
1503:c21230ef5a0e |
| 22-Jun-2020 |
Tiago Natel de Moura |
Isolation: fixed build when features aren't detected.
|
Revision tags: 1.18.0-1, 1.18.0 |
|
#
1489:4a3ec07f4b19 |
| 28-May-2020 |
Tiago Natel de Moura |
Added "rootfs" feature.
|
#
1488:6976d36be926 |
| 09-Mar-2020 |
Tiago Natel de Moura |
Refactor of process management.
The process abstraction has changed to:
setup(task, process) start(task, process_data) prefork(task, process, mp)
The prefork() occurs in the main process rig
Refactor of process management.
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.
show more ...
|
Revision tags: 1.17.0-1, 1.17.0, 1.16.0-1, 1.16.0, 1.15.0-1, 1.15.0 |
|
#
1337:2200adad4885 |
| 28-Jan-2020 |
Max Romanov |
Ruby: changing callback functions prototype for v2.7.
This closes #371 issue on GitHub.
|
Revision tags: 1.14.0-1, 1.14.0 |
|
#
1320:4e70411b9842 |
| 24-Dec-2019 |
Max Romanov |
Adding "limits/shm" configuration validation and parsing.
|
Revision tags: 1.13.0-1, 1.13.0 |
|
#
1258:f396f2421319 |
| 13-Nov-2019 |
Max Romanov |
Ruby: fixing initialization sequence.
There was a change (ruby/ruby@6c70fed) in Ruby 2.6 that moved RUBY_DESCRIPTION global constant definition out of Init_version(). Unit initialized Ruby incorrect
Ruby: fixing initialization sequence.
There was a change (ruby/ruby@6c70fed) in Ruby 2.6 that moved RUBY_DESCRIPTION global constant definition out of Init_version(). Unit initialized Ruby incorrectly, so the constant was not defined.
This closes #330 issue on GitHub.
show more ...
|
Revision tags: 1.12.0-1, 1.12.0, 1.11.0-2, 1.11.0-1, 1.11.0, 1.10.0-2, 1.10.0-1, 1.10.0, 1.9.0-1, 1.9.0 |
|
#
1011:0c41674ec79c |
| 21-Mar-2019 |
Max Romanov |
Adjusting request schema value according to connection tls state.
This closes #223 issue on GitHub.
|