Commit Graph

1354 Commits

Author SHA1 Message Date
Max Romanov
c6f9ca79e6 Fixing body fd access racing condition.
To avoid closing the body fd prematurely, the fd value is moved from
the request struct to the app link.  The body fd should not be closed
immediately after the request is sent to the application due to possible
request rescheduling.
2020-03-17 14:44:11 +03:00
Max Romanov
efbcd517fc Checking sendfile() availability in configure.
Removing SF_NODISKIO flag for FreeBSD sendfile() check because it
is not used yet and to support DragonFlyBSD.

This closes #414 issue on GitHub.
2020-03-17 14:44:06 +03:00
Valentin Bartenev
b7f0e09de0 Version bump. 2020-03-16 13:27:10 +03:00
Konstantin Pavlov
3b94102f20 Added checksum generation to make dist target.
While at it, clean up dist artifacts on make clean.
2020-03-13 17:42:08 +03:00
Konstantin Pavlov
7181a661c5 Added a target to export docker images as tarballs 2020-03-13 17:35:47 +03:00
Andrei Zeliankou
baf9230398 Tests: skip "close failed" alert in test_proxy_parallel test. 2020-03-12 17:14:16 +00:00
Valentin Bartenev
b3c8a7b33a Added tag 1.16.0 for changeset 8bab088952dd 2020-03-12 18:35:33 +03:00
Valentin Bartenev
8f397c8ae5 Generated Dockerfiles for Unit 1.16.0. 2020-03-12 18:13:08 +03:00
Valentin Bartenev
f6d53f69b8 Added version 1.16.0 CHANGES. 2020-03-12 18:13:07 +03:00
Max Romanov
5296be0b82 Using disk file to store large request body.
This closes #386 on GitHub.
2020-03-12 17:54:29 +03:00
Max Romanov
08b65721e2 Moving request memory pool retain call after RPC data allocation.
If the call is done only after a successful RPC data allocation, its
corresponding release call is not missed, which avoids a potential leak.
2020-03-12 17:54:24 +03:00
Max Romanov
0b5aabfc3f Checking Content-Length value right after header parse.
The check was moved from the request body read stage.
2020-03-12 17:54:19 +03:00
Max Romanov
f3e6726098 Tests: added Python input readline and iterator tests. 2020-03-12 17:54:15 +03:00
Max Romanov
7c4db34b88 Python: implementing input readline and line iterator. 2020-03-12 17:54:11 +03:00
Max Romanov
2454dfe876 Introducing readline function in libunit.
Ruby and Java modules now use this function instead of own
implementations.
2020-03-12 17:54:05 +03:00
Andrei Zeliankou
23636ce02c Tests: fixed race in USR1 signal tests.
Also, minor style fixes applied.
2020-03-12 13:48:54 +00:00
Andrei Zeliankou
1d75277767 Tests: round robin upstream tests. 2020-03-12 13:47:43 +00:00
Andrei Zeliankou
961674af42 Tests: skip "last message send failed" alerts globally. 2020-03-12 13:44:30 +00:00
Igor Sysoev
7935ea4543 Round robin upstream added. 2020-03-06 18:28:54 +03:00
Igor Sysoev
794248090a Legacy upstream code removed. 2020-03-04 14:04:08 +03:00
Igor Sysoev
643d4383fa Refactored nxt_http_action. 2020-03-04 14:03:32 +03:00
Andrei Zeliankou
b214b7c690 Tests: more routing tests with negative rules. 2020-01-31 18:12:16 +00:00
Axel Duch
f302ed0670 Fixed negative patterns combined with address rules. 2020-03-11 14:18:39 +00:00
Andrei Zeliankou
f092b093f5 Tests: use blocking to print unit.log files. 2020-03-10 18:13:47 +00:00
Andrei Zeliankou
f36f0f2461 Tests: redirect tests output to the stdout. 2020-03-10 18:10:42 +00:00
Valentin Bartenev
810b8dbb67 Tests: unitd stderr output redirected to unit.log.
A part of the debug log was printed to stderr before the log file was opened.
Now, this output is redirected to the same log file.
2020-03-06 20:08:38 +03:00
Valentin Bartenev
3617d4ed03 Tests: simplified unitd process running.
There are no reasons to wrap the Unit daemon in a separate Python process.
2020-03-06 20:08:29 +03:00
Tiago Natel de Moura
36578c7b43 PHP: fixed log format in alert.
Found by Coverity: CID 354832 and CID 354833.
2020-03-04 13:42:08 +00:00
Igor Sysoev
2d0dca5243 The kqueue EOF flag might be ignored on some conditions.
If kqueue reported both the EVFILT_READ and the EVFILT_WRITE events
for the socket but only the former had the EV_EOF flag set, the flag
was silently ignored.
2020-03-04 14:03:30 +03:00
Valentin Bartenev
afa2f86ecf PHP: added ZTS indication to ./configure output. 2020-03-04 15:24:27 +03:00
Valentin Bartenev
75cb2a947d PHP: rearranged feature checks in ./configure.
Now it prints version even if PHP was built without embed SAPI.
2020-03-04 15:24:27 +03:00
Tiago Natel de Moura
80763b3e64 Tests: chdir() and open() for PHP module.
These tests ensure optimizations in the chdir calls don't break
SAPI semantics.
2020-03-03 18:53:26 +00:00
Andrei Zeliankou
293b0da520 Tests: added tests for "fallback" option for the "share" action. 2020-03-03 18:17:31 +00:00
Andrei Zeliankou
3b7b2fae54 Tests: check unique options in "action" object. 2020-03-03 17:54:02 +00:00
Valentin Bartenev
a98de7f705 Added a "fallback" option to be used with the "share" action.
It allows proceeding to another action if a file isn't available.

An example:

    {
        "share": "/data/www/",

        "fallback": {
            "pass": "applications/php"
        }
    }

In the example above, an attempt is made first to serve a request with
a file from the "/data/www/" directory.  If there's no such file, the
request is passed to the "php" application.

Fallback actions may be nested:

    {
        "share": "/data/www/",

        "fallback": {
            "share": "/data/cache/",

            "fallback": {
                "proxy": "http://127.0.0.1:9000"
            }
        }
    }
2020-03-03 20:37:47 +03:00
Valentin Bartenev
a60f856ce2 Improved validation of the "action" object.
Now it enforces the mutual exclusivity of "pass", "proxy", and "share" options.
2020-03-03 20:37:47 +03:00
Tiago Natel de Moura
f99d20ad39 PHP: optimization to avoid surplus chdir(2) calls.
For each request, the worker calls the php_execute_script function
from libphp that changes to the script directory before doing its
work and then restores the process directory before returning.  The
chdir(2) calls it performs are unnecessary in Unit design.  In simple
benchmarks, profiling shows that the chdir syscall code path (syscall,
FS walk, etc.) is where the CPU spends most of its time.

PHP SAPI semantics requires the script to be run from the script
directory.  In Unit's PHP implementation, we have two use cases:

- script
- arbitrary path

The "script" configuration doesn't have much need for a working
directory change: it can be changed once at module initialization.
The module needs to chdir again only if the user's PHP script also
calls chdir to switch to another directory during execution.

If "script" is not used in Unit configuration, we must ensure the
script is run from its directory (thus calling chdir before exec),
but there's no need to restore the working directory later.

Our implementation disables mandatory chdir calls with the SAPI
option SAPI_OPTION_NO_CHDIR, instead calling chdir only when needed.

To detect the user's calls to chdir, a simple "unit" extension is
added that hooks the built-in chdir() PHP call.
2020-03-03 14:38:08 +00:00
Max Romanov
9e295fa314 Fixing request_app_link reference counting for delayed requests.
Router built with debug may stop with assertion during stalled requests
re-schedule.  This was caused by missing reference counting increment
before nxt_router_port_select() call.
2020-03-03 18:28:26 +03:00
Max Romanov
c74f3a6c56 Java: fixing Spring applications start.
This closes #403 issue on GitHub.
2020-03-03 18:28:20 +03:00
Max Romanov
004ab48a9e Node.js: fixing x86 warning about the signed/unsigned comparison. 2020-03-03 18:28:16 +03:00
Andrei Zeliankou
f68947bc60 Tests: truncated huge messages while logging. 2020-03-02 13:10:38 +00:00
Andrei Zeliankou
5d67879a50 Tests: added "-r" option to print unit.log on failures. 2020-02-27 18:41:24 +00:00
Andrei Zeliankou
fbc72d7fec Tests: added test with invalid IPv6 address in routing block. 2020-02-27 01:37:54 +00:00
Tiago Natel de Moura
98c0ce6cc4 PHP: fixed php >= 7.4 with zts enabled. 2020-02-25 15:55:31 +00:00
Andrei Zeliankou
f519e31e2d Tests: more static tests. 2020-02-21 15:08:38 +00:00
Andrei Zeliankou
5406d1e320 Tests: added PHP test with invalid index extension only. 2020-02-20 21:06:56 +00:00
Andrei Zeliankou
1f2445b01b Tests: added proxy test with large body. 2020-02-20 21:06:31 +00:00
Andrei Zeliankou
fcca366392 Tests: more tests with "max_body_size". 2020-02-20 20:33:49 +00:00
Valentin Bartenev
d198a105eb Configuration: removing UTF-8 BOM from the input JSON.
Some editors can add it to JSON files.
2020-02-20 17:58:24 +03:00
Valentin Bartenev
044b3afcda Configuration: stripping comments from the input JSON.
This allows to have JavaScript-like comments in the uploading JSON.
2020-02-20 17:58:24 +03:00