summaryrefslogtreecommitdiffhomepage
AgeCommit message (Collapse)AuthorFilesLines
2020-12-29Libunit: processing single port message.Max Romanov3-69/+161
This partially reverts the optimisation introduced in 1d84b9e4b459 to avoid an unpredictable block in nxt_unit_process_port_msg(). Under high load, this function may never return control to its caller, and the external event loop (in Node.js and Python asyncio) won't be able to process other scheduled events. To reproduce the issue, two request processing types are needed: 'fast' and 'furious'. The 'fast' one simply returns a small response, while the 'furious' schedules asynchronous calls to external resources. Thus, if Unit is subjected to a large amount of 'fast' requests, the 'furious' request processing freezes until the high load ends. The issue was found by Wu Jian Ping (@wujjpp) during Node.js stream implementation discussion and relates to PR #502 on GitHub.
2020-12-29Node.js: ServerRequest and ServerResponse compliance to Stream API.Max Romanov5-89/+94
ServerRequest now inherit stream Readable object. ServerResponse provides 'writable' property. Thanks to Wu Jian Ping (@wujjpp). This closes #274, closes #317 issues and closes #502 PR on GitHub.
2020-12-28Packages: fixed building for Ubuntu 16.04 "xenial".Andrei Belov2-0/+79
Changes introduced in a27532e3a17b effectively broke building of the unit package due to missed dh_installsystemd script in older debhelper 9.x. Once Ubuntu 16.04 reach EOL, the following actions should be made: - this commit should be reverted; - minimal debhelper version should be increased to 11.
2020-12-24Packages: fixed an ability to override package version.Andrei Belov3-3/+6
This was broken since 00d8049418cf.
2020-12-24Version bump for unit modules.Andrei Belov1-0/+22
This is required in order to build Debian packages from current tip without making manual interventions. Moving forward, this should be a part of every version bump commit.
2020-12-23Packages: set the "--user" value to "nobody" for build-stage tests.Andrei Belov2-4/+4
This allows tests to pass well in cases when the default user specified in the ./configure parameters does not exist in the building environment.
2020-12-23Tests: ability to run unitd with specified "--user" option.Andrei Belov1-19/+27
2020-12-23Static: fixing request memory pool leakage in router.Max Romanov2-3/+27
When a static file larger than NXT_HTTP_STATIC_BUF_SIZE (128K) is served, two buffers are allocated and chained; each retains the whole request memory pool. Starting from 41331471eee7, the completion handler was called once for a linked buffer chain, but the second buffer got lost. This patch improves the completion handler's treatment of static buffers to handle all linked buffers.
2020-12-22Python: multiple values in the "path" option.Valentin Bartenev5-36/+124
2020-12-22Packages: check and create unit user on each post-script invocation.Konstantin Pavlov1-4/+4
2020-12-21Tests: introduced a separate cache directory for Go builds.Tiago Natel de Moura2-0/+5
The Go compiler can't detect changes to C header files when compiling CGO applications, and then this leads to Go test samples being linked with wrong libunit. This patch creates a new cache directory reused throughout the test suite.
2020-12-18Libunit: fixed shared memory waiting.Max Romanov2-1/+11
The nxt_unit_ctx_port_recv() function may return the NXT_UNIT_AGAIN code, in which case an attempt to reread the message should be made. The issue was reproduced in load testing with response sizes 16k and up. In the rare case of a NXT_UNIT_AGAIN result, a buffer of size -1 was processed, which triggered a 'message too small' alert; after that, the app process was terminated.
2020-12-18Limiting app queue notifications count in socket.Max Romanov3-7/+25
Under high load, a queue synchonization issue may occur, starting from the steady state when an app queue message is dequeued immediately after it has been enqueued. In this state, the router always puts the first message in the queue and is forced to notify the app about a new message in an empty queue using a socket pair. On the other hand, the application dequeues and processes the message without reading the notification from the socket, so the socket buffer overflows with notifications. The issue was reproduced during Unit load tests. After a socket buffer overflow, the router is unable to notify the app about a new first message. When another message is enqueued, a notification is not required, so the queue grows without being read by the app. As a result, request processing stops. This patch changes the notification algorithm by counting the notifications in the pipe instead of getting the number of messages in the queue.
2020-12-17Router: fixed crash in OOSM processing.Max Romanov2-3/+14
Multithreaded application may create different shared memory segments in different threads. The segments then passed to different router threads. Because of this multithreading, the order of adding incoming segments is not determined and there can be situation when some of the incoming segments are not initialized yet. This patch simply adds check for NULL to skip non-initialized segments. Crash reproduced during load tests with high number of simultaneous connections (1024 and more).
2020-12-17Packages: run non-privileged processes under "unit" user.Andrei Belov29-30/+58
2020-11-24Packages: added pcre2 to build depends.Konstantin Pavlov4-2/+18
While at it, propagate unit build depends to modules.
2020-11-24Packages: dropped support for non-systemd distributions.Konstantin Pavlov5-214/+9
2020-12-16Packages: eliminated debuild warning about debian/rules.Andrei Belov1-0/+1
2020-12-16Packages: the NOTICE file added to debian binaries.Andrei Belov1-1/+2
This resolves the following lintian error: https://lintian.debian.org/tags/missing-notice-file-for-apache-license.html While here, changed upstream changelog name to conform with the policy: https://lintian.debian.org/tags/wrong-name-for-upstream-changelog.html
2020-12-16Packages: introduced PYTEST_ARGS env variable for test targets.Andrei Belov2-4/+4
This is useful for running particular tests, e.g.: PYTEST_ARGS='test/test_respawn.py::TestRespawn::test_respawn_router' make test
2020-12-15Added a changelog for 5e6c2b8fb3fe.Tiago Natel de Moura1-0/+7
2020-12-15Tests: fixed bug that disabled isolation tests.Tiago Natel de Moura1-1/+1
2020-12-14Python: WSGI environment copying moved out of request processing.Valentin Bartenev1-12/+53
The WSGI environment dictionary contains a number of static items, that are pre-initialized on application start. Then it's copied for each request to be filled with request-related data. Now this dictionary copy operation will be done between processing of requests, which should save some CPU cycles during request processing and thus reduce response latency for non-peak load periods.
2020-12-14Isolation: fixed unmounting when mnt namespace is in place.Tiago Natel de Moura1-6/+0
The code had a wrong assumption that "mount namespaces" automatically unmounts process mounts when exits but this happens only with unprivileged mounts.
2020-12-12Tests: hyphen sign used unstead of underscore as more common.Andrei Zeliankou2-3/+3
2020-12-10Tests: added tests for PHP_AUTH_* variables.Andrei Zeliankou2-0/+65
2020-12-09Tests: TestUnit class removed.Andrei Zeliankou3-38/+35
Prerequisite checks moved to the fixture in conftest.py.
2020-12-09Tests: isolation check moved to the pytest_sessionstart().Andrei Zeliankou10-259/+197
This change eliminates the need for some classes to run Unit one more time before running tests.
2020-12-02Docker: creating tags and pushing to AWS ECR as well.Konstantin Pavlov1-0/+4
2020-12-07Ruby: fixed crash on thread start.Max Romanov2-1/+19
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.
2020-12-08Tests: fixed ruby isolation.Tiago Natel de Moura1-19/+8
While alternating between running priv and unpriv tests locally, it happens that unpriv tests can't bind mount or create sub directories inside directories created by root. This patch fixes this by pointing "rootfs" to temporary directory. Now the priv and unpriv test uses the same test function.
2020-12-08Tests: skip_alert() converted to the fixture.Andrei Zeliankou15-39/+32
2020-12-08Tests: utils module introduced.Andrei Zeliankou10-57/+59
2020-12-08Docs: special handling for empty "date" and "time" XML attributes.Andrei Belov4-21/+84
2020-12-08PHP: populating PHP_AUTH_* server variables.Valentin Bartenev6-0/+26
This closes #498 issue on GitHub.
2020-12-07HTTP: fixed status line format for unknown status codes.Valentin Bartenev2-17/+26
According to Section #3.1.2 of RFC 7230, after the status code there must be a space even if the reason phrase is empty. Also, only 3 digits allowed. This closes #507 issue on GitHub.
2020-12-07Node.js: avoided use of request struct for debug logging.Max Romanov1-3/+3
This fixes a crash on exit of Node.js application. The crash reproduced on Ubuntu 20.10 with Node.js v15.1.0. Tests 'test_node_websockets_two_clients' and 'test_node_websockets_7_13_1__7_13_2'. The reason of the crash is using request struct which was already freed. The issue was introduced in 5be509fda29e.
2020-12-06Tests: options moved to the separate class.Andrei Zeliankou39-41/+62
This change is necessary to separate the logic and prevent possible circular dependency.
2020-11-30Node.js: removing unnecessary warnings.Max Romanov1-18/+6
Warnings changed for debug messages.
2020-11-24Libunit: improved error logging around initialization env variable.Valentin Bartenev1-12/+31
2020-11-24Version bump.Valentin Bartenev2-2/+9
2020-11-19Added tag 1.21.0 for changeset f804aaf7eee1Valentin Bartenev1-0/+1
2020-11-19Generated Dockerfiles for Unit 1.21.0.1.21.0Valentin Bartenev9-9/+9
2020-11-19Added version 1.21.0 CHANGES.Valentin Bartenev2-0/+210
2020-11-17Router: matching regular expressions support.Axel Duch13-36/+572
2020-11-19Libunit: fixing read buffer leakage.Max Romanov1-0/+1
If shared queue is empty, allocated read buffer should be explicitly released. Found by Coverity (CID 363943). The issue was introduced in f5ba5973a0a3.
2020-11-19Tests: added tests for a "discard_unsafe_fields" option.Andrei Zeliankou2-0/+47
2020-11-19Tests: style.Andrei Zeliankou1-36/+40
2020-11-18Python: improving ASGI http send message processing.Max Romanov1-12/+13
2020-11-18Libunit: fixing read buffer allocations on exit.Max Romanov1-5/+5