Home
last modified time | relevance | path

Searched hist:16 (Results 1 – 25 of 309) sorted by last modified time

12345678910>>...13

/unit/src/ruby/
H A Dnxt_ruby.cdiff 1905:d66a5f909497 Thu Jul 01 11:16:00 UTC 2021 Oisin Canty <o.canty@f5.com> 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.
diff 1488:6976d36be926 Mon Mar 09 16:28:00 UTC 2020 Tiago Natel de Moura <t.nateldemoura@f5.com> 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.
/unit/docs/
H A Dchanges.xmldiff 2196:7009706269f0 Tue Sep 13 08:16:00 UTC 2022 Andrei Zeliankou <zelenkov@nginx.com> Reordered changes for 1.28.0 by significance (subjective).
diff 2110:048281cd3d73 Thu May 26 12:38:00 UTC 2022 Alejandro Colomar <alx.manpages@gmail.com> Var: Added $request_uri (as in NGINX).

This supports a new variable $request_uri that contains the path
and the query (See RFC 3986, section 3). Its contents are percent
encoded. This is useful for example to redirect HTTP to HTTPS:

{
"return": "301",
"location": "https://$host$request_uri"
}

When <http://example.com/foo%23bar?baz> is requested, the server
redirects to <https://example.com/foo%23bar?baz>.

===

Testing:

//diff --git a/src/nxt_http_return.c b/src/nxt_http_return.c
//index 82c9156..adeb3a1 100644
//--- a/src/nxt_http_return.c
//+++ b/src/nxt_http_return.c
//@@ -196,6 +196,7 @@ nxt_http_return_send_ready(nxt_task_t *task,
void *obj, void *data)
// field->value = ctx->encoded.start;
// field->value_length = ctx->encoded.length;
// }
//+ fprintf(stderr, "ALX: target[%1$i]: <%2$.*1$s>\n",
(int)r->target.length, r->target.start);
//
// r->state = &nxt_http_return_send_state;
//

{
"listeners": {
"*:81": {
"pass": "routes/ru"
}
},

"routes": {
"ru": [{
"action": {
"return": 301,
"location": "$request_uri"
}
}]
}
}

$ curl -i http://localhost:81/*foo%2Abar?baz#arg
HTTP/1.1 301 Moved Permanently
Location: /*foo%2Abar?baz
Server: Unit/1.27.0
Date: Mon, 30 May 2022 16:04:30 GMT
Content-Length: 0

$ sudo cat /usr/local/unit.log | grep ALX
ALX: target[15]: </*foo%2Abar?baz>
diff 2019:8fcb7e44c663 Thu Nov 25 16:58:00 UTC 2021 Valentin Bartenev <vbart@nginx.com> PHP: fixed crash when calling module functions in OPcache preload.

In PHP, custom fastcgi_finish_request() and overloaded chdir() functions can be
invoked by an OPcache preloading script (it runs when php_module_startup() is
called in the app process setup handler). In this case, there was no runtime
context set so trying to access it caused a segmentation fault.

This closes #602 issue on GitHub.
diff 1955:e834792ed4e3 Tue Sep 14 16:35:00 UTC 2021 Max Romanov <max.romanov@nginx.com> Fixing build with glibc 2.34.

Explicitly using the sysconf() call to obtain the minimum thread stack size
instead of the PTHREAD_STACK_MIN macro.

This closes #576 PR on GitHub.
diff 1936:953434450ea9 Thu Aug 12 08:23:00 UTC 2021 Oisin Canty <o.canty@f5.com> Router: client IP address replacement.

This commit introduces the replacement of the client address based on the value
of a specified HTTP header. This is intended for use when Unit is placed
behind a reverse proxy like nginx or a CDN.

You must specify the source addresses of the trusted proxies. This can be
accomplished with any valid IP pattern supported by Unit's match block:

["10.0.0.1", "10.4.0.0/16", "!192.168.1.1"]

The feature is configured per listener.

The client address replacement functionality only operates when there is a
source IP match and the specified header is present. Typically this would be
an 'X-Forwarded-For' header.

{
"listeners": {
"127.0.0.1:8080": {
"client_ip": {
"header": "X-Forwarded-For",
"source": [
"10.0.0.0/8"
]
},
"pass": "applications/my_app"
},
}
}

If a request occurs and Unit receives a header like below:

"X-Forwarded-For: 84.123.23.23"

By default, Unit trusts the last rightmost IP in the header, so REMOTE_ADDR
will be set to 84.123.23.23 if the connection originated from 10.0.0.0/8.

If Unit runs behind consecutive reverse proxies and receives a header similar
to the following:

"X-Forwarded-For: 84.123.23.23, 10.0.0.254"

You will need to enable "recursive" checking, which walks the header from
last address to first and chooses the first non-trusted address it finds.

{
"listeners": {
"127.0.0.1:8080": {
"client_ip": {
"header": "X-Forwarded-For",
"source": [
"10.0.0.0/8"
]
"recursive": true,
},
"pass": "applications/my_app"
},
}
}

If a connection from 10.0.0.0/8 occurs, the chain is walked. Here, 10.0.0.254
is also a trusted address so the client address will be replaced with
84.123.23.23.

If all IP addresses in the header are trusted, the client address is set to
the first address in the header:

If 10.0.0.0/8 is trusted and "X-Forwarded-For: 10.0.0.3, 10.0.0.2, 10.0.0.1",
the client address will be replaced with 10.0.0.3.
diff 1930:fb8b29aac7a1 Thu Aug 05 16:00:00 UTC 2021 Oisin Canty <o.canty@f5.com> Router: fixed crash when matching an empty address pattern array.

A crash would occur when the router tried to match an
against an empty address pattern array.

The following configuration was used to reproduce the
issue:

{
"listeners": {
"127.0.0.1:8082": {
"pass": "routes"
}
},
"routes": [
{
"match": {
"source": []
},
"action": {
"return": 200
}
}
]
}
diff 1926:6e85d6c0b8bb Thu Jul 29 16:50:00 UTC 2021 Max Romanov <max.romanov@nginx.com> Application restart introduced.

When processing a restart request, the router sends a QUIT message to all
existing processes of the application. Then, a new shared application port is
created to ensure that new requests won't be handled by the old processes of
the application.
diff 1896:19eee884bd0b Fri May 28 15:16:00 UTC 2021 Valentin Bartenev <vbart@nginx.com> Version bump.
diff 1882:65e7dcdd7be4 Wed May 26 16:48:00 UTC 2021 Oisin Canty <o.canty@f5.com> MIME: added PHP.
diff 1811:cac57293c5c5 Tue Mar 02 16:33:00 UTC 2021 Max Romanov <max.romanov@nginx.com> Closing app outgoing shared memory file descriptor.

This fixes file descriptor leakage in router. Shared memory file used to
send data from router to application. These files are shared among all
processes of same application and router keeps the opened file descriptor since
06017e6e3a5f commit.
/unit/src/python/
H A Dnxt_python_asgi.cdiff 2176:7f691279f318 Tue Aug 16 02:11:00 UTC 2022 Andrei Zeliankou <zelenkov@nginx.com> Fixed UNIX sockets support for ASGI.

This change was forgotten in the original implementation 282123ba4f7b.
diff 1767:582a004c73f8 Tue Dec 29 16:01:00 UTC 2020 Max Romanov <max.romanov@nginx.com> Libunit: processing single port message.

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.
/unit/src/perl/
H A Dnxt_perl_psgi.cdiff 2078:0996dd223cdd Sat Dec 18 23:58:00 UTC 2021 Alejandro Colomar <alx.manpages@gmail.com> Fixed indentation.

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 '^ [^ *+]';
diff 1488:6976d36be926 Mon Mar 09 16:28:00 UTC 2020 Tiago Natel de Moura <t.nateldemoura@f5.com> 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.
/unit/src/
H A Dnxt_runtime.cdiff 1548:a745db447e56 Tue Aug 11 16:20:00 UTC 2020 Max Romanov <max.romanov@nginx.com> Process structures refactoring in runtime and libunit.

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.
diff 1545:78836321a126 Tue Aug 11 16:20:00 UTC 2020 Max Romanov <max.romanov@nginx.com> Changing router to application port exchange protocol.

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.
diff 1488:6976d36be926 Mon Mar 09 16:28:00 UTC 2020 Tiago Natel de Moura <t.nateldemoura@f5.com> 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.
diff 1302:d4c6a91f7091 Tue Nov 26 16:26:00 UTC 2019 Tiago Natel <t.nateldemoura@f5.com> Refactor of process init.

Introduces the functions nxt_process_init_create() and
nxt_process_init_creds_set().
diff 754:c8e0f350f0d4 Fri Aug 10 16:27:00 UTC 2018 Max Romanov <max.romanov@nginx.com> Stopping all application processes if router process dies.

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.
diff 494:7c83ddcc1c42 Wed Jan 24 12:16:00 UTC 2018 Sergey Kandaurov <pluknet@nginx.com> Fixed formatting in nxt_sprintf() and logging.
diff 356:b6c89a2f537b Tue Oct 10 16:15:00 UTC 2017 Valentin Bartenev <vbart@nginx.com> Optimized application type handling.
diff 226:d0364583ae84 Thu Aug 24 16:51:00 UTC 2017 Valentin Bartenev <vbart@nginx.com> Fixed building by GCC after 924c70e5fd1f.
diff 211:6738bb76ae0a Wed Aug 16 11:16:00 UTC 2017 Ruslan Ermilov <ru@nginx.com> Corrected path to nxt_socket.h in comments.
diff 211:6738bb76ae0a Wed Aug 16 11:16:00 UTC 2017 Ruslan Ermilov <ru@nginx.com> Corrected path to nxt_socket.h in comments.
H A Dnxt_router.cdiff 2132:34d63ed988dc Mon Jun 20 05:16:00 UTC 2022 Zhidao HONG <z.hong@f5.com> Router: introduced nxt_http_forward_t.

This makes the replacement of forwarded request header
like client_ip and protocol more generic.
It's a prerequirement for protocol replacement.

No functional changes.
diff 1936:953434450ea9 Thu Aug 12 08:23:00 UTC 2021 Oisin Canty <o.canty@f5.com> Router: client IP address replacement.

This commit introduces the replacement of the client address based on the value
of a specified HTTP header. This is intended for use when Unit is placed
behind a reverse proxy like nginx or a CDN.

You must specify the source addresses of the trusted proxies. This can be
accomplished with any valid IP pattern supported by Unit's match block:

["10.0.0.1", "10.4.0.0/16", "!192.168.1.1"]

The feature is configured per listener.

The client address replacement functionality only operates when there is a
source IP match and the specified header is present. Typically this would be
an 'X-Forwarded-For' header.

{
"listeners": {
"127.0.0.1:8080": {
"client_ip": {
"header": "X-Forwarded-For",
"source": [
"10.0.0.0/8"
]
},
"pass": "applications/my_app"
},
}
}

If a request occurs and Unit receives a header like below:

"X-Forwarded-For: 84.123.23.23"

By default, Unit trusts the last rightmost IP in the header, so REMOTE_ADDR
will be set to 84.123.23.23 if the connection originated from 10.0.0.0/8.

If Unit runs behind consecutive reverse proxies and receives a header similar
to the following:

"X-Forwarded-For: 84.123.23.23, 10.0.0.254"

You will need to enable "recursive" checking, which walks the header from
last address to first and chooses the first non-trusted address it finds.

{
"listeners": {
"127.0.0.1:8080": {
"client_ip": {
"header": "X-Forwarded-For",
"source": [
"10.0.0.0/8"
]
"recursive": true,
},
"pass": "applications/my_app"
},
}
}

If a connection from 10.0.0.0/8 occurs, the chain is walked. Here, 10.0.0.254
is also a trusted address so the client address will be replaced with
84.123.23.23.

If all IP addresses in the header are trusted, the client address is set to
the first address in the header:

If 10.0.0.0/8 is trusted and "X-Forwarded-For: 10.0.0.3, 10.0.0.2, 10.0.0.1",
the client address will be replaced with 10.0.0.3.
diff 1926:6e85d6c0b8bb Thu Jul 29 16:50:00 UTC 2021 Max Romanov <max.romanov@nginx.com> Application restart introduced.

When processing a restart request, the router sends a QUIT message to all
existing processes of the application. Then, a new shared application port is
created to ensure that new requests won't be handled by the old processes of
the application.
diff 1829:8fb5cbfe761a Thu Mar 25 11:16:00 UTC 2021 Max Romanov <max.romanov@nginx.com> Releasing shm buffers for large body requests.

This fixes memory and shm file descriptor leakage that occurred when a large
request body was passed via shared memory. The leakage was caught with the
"test_settings_body_buffer_size" test. The main condition is the
"body_buffer_size" value exceeding 10 Mb (a shm segment). Thus, the router was
forced to split the body into several shm segments, but these buffers were not
freed because of dummy completion handlers.
diff 1754:c21309052895 Thu Dec 17 16:27:00 UTC 2020 Max Romanov <max.romanov@nginx.com> Router: fixed crash in OOSM processing.

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).
diff 1555:1d84b9e4b459 Tue Aug 11 16:20:00 UTC 2020 Max Romanov <max.romanov@nginx.com> Introducing application and port shared memory queues.

The goal is to minimize the number of syscalls needed to deliver a message.
diff 1552:a363564c527c Tue Aug 11 16:20:00 UTC 2020 Max Romanov <max.romanov@nginx.com> Made router port message handlers into static functions.

Mostly harmless.
diff 1549:cad592a06086 Tue Aug 11 16:20:00 UTC 2020 Max Romanov <max.romanov@nginx.com> Adding debug messages to catch process management issues.
diff 1547:cbcd76704c90 Tue Aug 11 16:20:00 UTC 2020 Max Romanov <max.romanov@nginx.com> Introducing the shared application port.

This is the port shared between all application processes which use it to pass
requests for processing. Using it significantly simplifies the request
processing code in the router. The drawback is 2 more file descriptors per each
configured application and more complex libunit message wait/read code.
diff 1546:06017e6e3a5f Tue Aug 11 16:20:00 UTC 2020 Max Romanov <max.romanov@nginx.com> Changing router to application shared memory exchange protocol.

The application process needs to request the shared memory segment from the
router instead of the latter pushing the segment 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 for using the application
shared port and then the queue.
H A Dnxt_php_sapi.cdiff 2019:8fcb7e44c663 Thu Nov 25 16:58:00 UTC 2021 Valentin Bartenev <vbart@nginx.com> PHP: fixed crash when calling module functions in OPcache preload.

In PHP, custom fastcgi_finish_request() and overloaded chdir() functions can be
invoked by an OPcache preloading script (it runs when php_module_startup() is
called in the app process setup handler). In this case, there was no runtime
context set so trying to access it caused a segmentation fault.

This closes #602 issue on GitHub.
diff 1488:6976d36be926 Mon Mar 09 16:28:00 UTC 2020 Tiago Natel de Moura <t.nateldemoura@f5.com> 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.
diff 1345:e40027481af0 Tue Jan 28 16:18:00 UTC 2020 Valentin Bartenev <vbart@nginx.com> PHP: added check for the ".php" extension.

A check for the ".php" extension is added to prevent execution of files
with arbitrary extensions in cases where "index" and "script" options
aren't used.
diff 1102:29421134ed99 Tue Jul 16 14:58:00 UTC 2019 Valentin Bartenev <vbart@nginx.com> PHP: fixed script filename setting, broken after 2a71417d297f.
diff 579:ff307638c27d Fri Mar 16 15:19:00 UTC 2018 Valentin Bartenev <vbart@nginx.com> PHP: fixed segfault on initialization.

PHP SAPI can call log handler while initializing. Particularly, that happens
if there's a problem in loading some extension specified in php.ini file.
On this stage server context is empty, so now nxt_thread_log_error() is used.
diff 261:950d8bee6b3d Thu Aug 31 12:16:00 UTC 2017 Sergey Kandaurov <pluknet@nginx.com> PHP SAPI: typo fixed.
diff 94:48a31f768f5e Mon Jun 26 16:58:00 UTC 2017 Max Romanov <max.romanov@nginx.com> PHP post body processing fixed, default index name introduced.
diff 86:3b77edf46701 Fri Jun 23 16:20:00 UTC 2017 Max Romanov <max.romanov@nginx.com> PHP app request processing.
diff 65:10688b89aa16 Tue Jun 20 16:49:00 UTC 2017 Igor Sysoev <igor@sysoev.ru> Using new memory pool implementation.
H A Dnxt_controller.cdiff 1926:6e85d6c0b8bb Thu Jul 29 16:50:00 UTC 2021 Max Romanov <max.romanov@nginx.com> Application restart introduced.

When processing a restart request, the router sends a QUIT message to all
existing processes of the application. Then, a new shared application port is
created to ensure that new requests won't be handled by the old processes of
the application.
diff 1488:6976d36be926 Mon Mar 09 16:28:00 UTC 2020 Tiago Natel de Moura <t.nateldemoura@f5.com> 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.
diff 1459:358b957ca294 Thu Apr 16 14:09:00 UTC 2020 Max Romanov <max.romanov@nginx.com> Using malloc/free for the http fields hash.

This is required due to lack of a graceful shutdown: there is a small gap
between the runtime's memory pool release and router process's exit. Thus, a
worker thread may start processing a request between these two operations,
which may result in an http fields hash access and subsequent crash.

To simplify issue reproduction, it makes sense to add a 2 sec sleep before
exit() in nxt_runtime_exit().
diff 1167:a49ee872e83d Mon Sep 16 17:17:00 UTC 2019 Valentin Bartenev <vbart@nginx.com> Configuration: added ability to access object members with slashes.

Now URI encoding can be used to escape "/" in the request path:

GET /config/listeners/unix:%2Fpath%2Fto%2Fsocket/
diff 357:b80698152fcd Tue Oct 10 16:46:00 UTC 2017 Valentin Bartenev <vbart@nginx.com> Basic validation errors.
diff 337:854a1a440616 Wed Sep 27 16:22:00 UTC 2017 Igor Sysoev <igor@sysoev.ru> Event engine memory cache for nxt_sockaddr_t.

Introducing event engine memory cache and using the cache for
nxt_sockaddr_t structures.
diff 312:c156aea91063 Thu Sep 14 15:16:00 UTC 2017 Igor Sysoev <igor@sysoev.ru> Fixed textual socket name lengths and Unix domain sockaddr length.
diff 208:7d1017bd0f6c Fri Aug 11 16:54:00 UTC 2017 Valentin Bartenev <vbart@nginx.com> Controller: more HTTP headers and detailed JSON parsing errors.
diff 103:88fc973fd7a2 Wed Jun 28 12:16:00 UTC 2017 Igor Sysoev <igor@sysoev.ru> Setting listen socket fields lost in changeset 10688b89aa16.
diff 65:10688b89aa16 Tue Jun 20 16:49:00 UTC 2017 Igor Sysoev <igor@sysoev.ru> Using new memory pool implementation.
H A Dnxt_conn.hdiff 337:854a1a440616 Wed Sep 27 16:22:00 UTC 2017 Igor Sysoev <igor@sysoev.ru> Event engine memory cache for nxt_sockaddr_t.

Introducing event engine memory cache and using the cache for
nxt_sockaddr_t structures.
diff 93:8c66fdbc526b Mon Jun 26 16:58:00 UTC 2017 Max Romanov <max.romanov@nginx.com> Build on Solaris 11 fixed.
diff 88:c6879c7b5bdf Fri Jun 23 16:20:00 UTC 2017 Max Romanov <max.romanov@nginx.com> Added basic HTTP request processing in router.

- request to connection mapping in engine;
- requests queue in connection;
- engine port creation;
- connected ports hash for each process;
- engine port data messages processing (app responses);
diff 65:10688b89aa16 Tue Jun 20 16:49:00 UTC 2017 Igor Sysoev <igor@sysoev.ru> Using new memory pool implementation.
H A Dnxt_http_request.cdiff 2139:99d792169ffb Thu Jun 16 01:00:00 UTC 2022 Andrew Clayton <andrew@digital-domain.net> Constified numerous function parameters.

As was pointed out by the cppcheck[0] static code analysis utility we
can mark numerous function parameters as 'const'. This acts as a hint to
the compiler about our intentions and the compiler will tell us when we
deviate from them.

[0]: https://cppcheck.sourceforge.io/
diff 2132:34d63ed988dc Mon Jun 20 05:16:00 UTC 2022 Zhidao HONG <z.hong@f5.com> Router: introduced nxt_http_forward_t.

This makes the replacement of forwarded request header
like client_ip and protocol more generic.
It's a prerequirement for protocol replacement.

No functional changes.
diff 1936:953434450ea9 Thu Aug 12 08:23:00 UTC 2021 Oisin Canty <o.canty@f5.com> Router: client IP address replacement.

This commit introduces the replacement of the client address based on the value
of a specified HTTP header. This is intended for use when Unit is placed
behind a reverse proxy like nginx or a CDN.

You must specify the source addresses of the trusted proxies. This can be
accomplished with any valid IP pattern supported by Unit's match block:

["10.0.0.1", "10.4.0.0/16", "!192.168.1.1"]

The feature is configured per listener.

The client address replacement functionality only operates when there is a
source IP match and the specified header is present. Typically this would be
an 'X-Forwarded-For' header.

{
"listeners": {
"127.0.0.1:8080": {
"client_ip": {
"header": "X-Forwarded-For",
"source": [
"10.0.0.0/8"
]
},
"pass": "applications/my_app"
},
}
}

If a request occurs and Unit receives a header like below:

"X-Forwarded-For: 84.123.23.23"

By default, Unit trusts the last rightmost IP in the header, so REMOTE_ADDR
will be set to 84.123.23.23 if the connection originated from 10.0.0.0/8.

If Unit runs behind consecutive reverse proxies and receives a header similar
to the following:

"X-Forwarded-For: 84.123.23.23, 10.0.0.254"

You will need to enable "recursive" checking, which walks the header from
last address to first and chooses the first non-trusted address it finds.

{
"listeners": {
"127.0.0.1:8080": {
"client_ip": {
"header": "X-Forwarded-For",
"source": [
"10.0.0.0/8"
]
"recursive": true,
},
"pass": "applications/my_app"
},
}
}

If a connection from 10.0.0.0/8 occurs, the chain is walked. Here, 10.0.0.254
is also a trusted address so the client address will be replaced with
84.123.23.23.

If all IP addresses in the header are trusted, the client address is set to
the first address in the header:

If 10.0.0.0/8 is trusted and "X-Forwarded-For: 10.0.0.3, 10.0.0.2, 10.0.0.1",
the client address will be replaced with 10.0.0.3.
diff 1459:358b957ca294 Thu Apr 16 14:09:00 UTC 2020 Max Romanov <max.romanov@nginx.com> Using malloc/free for the http fields hash.

This is required due to lack of a graceful shutdown: there is a small gap
between the runtime's memory pool release and router process's exit. Thus, a
worker thread may start processing a request between these two operations,
which may result in an http fields hash access and subsequent crash.

To simplify issue reproduction, it makes sense to add a 2 sec sleep before
exit() in nxt_runtime_exit().
diff 1009:1c310945f81f Mon Mar 18 16:55:00 UTC 2019 Max Romanov <max.romanov@nginx.com> Setting request error flag in error handler.

Absence of this flag is the reason of memory leak in case when client
disconnected before receiving all response data.
diff 493:745222d540a2 Wed Jan 24 12:16:00 UTC 2018 Sergey Kandaurov <pluknet@nginx.com> Using size_t for the field width type of the "%*s" specifier.
H A Dnxt_unit.cdiff 2143:52dda4e05868 Thu Jun 16 01:01:00 UTC 2022 Andrew Clayton <andrew@digital-domain.net> Unit: removed a useless assignment.

As was pointed out by the cppcheck[0] static code analysis utility there
was a useless assignment in nxt_unit_request_read(). The size parameter
is passed in by value and was being modified without being used again.

[0]: https://cppcheck.sourceforge.io/
diff 2142:0729b05c45d4 Thu Jun 16 01:00:00 UTC 2022 Andrew Clayton <andrew@digital-domain.net> Unit: avoided needlessly setting lib in nxt_unit_shm_open().

As was pointed out by the cppcheck[0] static code analysis utility, lib
was being set in nxt_unit_shm_open() regardless of platform when in fact
it's only used when (NXT_HAVE_MEMFD_CREATE || NXT_HAVE_SHM_OPEN).

Move the variable declaration & definition to be within the

#if (NXT_HAVE_MEMFD_CREATE || NXT_HAVE_SHM_OPEN)

block.

[0]: https://cppcheck.sourceforge.io/
diff 2139:99d792169ffb Thu Jun 16 01:00:00 UTC 2022 Andrew Clayton <andrew@digital-domain.net> Constified numerous function parameters.

As was pointed out by the cppcheck[0] static code analysis utility we
can mark numerous function parameters as 'const'. This acts as a hint to
the compiler about our intentions and the compiler will tell us when we
deviate from them.

[0]: https://cppcheck.sourceforge.io/
diff 2078:0996dd223cdd Sat Dec 18 23:58:00 UTC 2021 Alejandro Colomar <alx.manpages@gmail.com> Fixed indentation.

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 '^ [^ *+]';
diff 1767:582a004c73f8 Tue Dec 29 16:01:00 UTC 2020 Max Romanov <max.romanov@nginx.com> Libunit: processing single port message.

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.
diff 1756:72e75ce3c99f Thu Dec 17 21:25:00 UTC 2020 Max Romanov <max.romanov@nginx.com> Libunit: fixed shared memory waiting.

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.
diff 1631:73a1935e3899 Tue Oct 06 16:06:00 UTC 2020 Max Romanov <max.romanov@nginx.com> Removing a meaningless warning message.

Data in the queue and the socket are transmitted independently; special
READ_QUEUE and READ_SOCKET message types are used for synchronization.

The warning was accidentally committed with changeset 1d84b9e4b459.
diff 1590:b479e8ec1e36 Wed Sep 09 21:16:00 UTC 2020 Max Romanov <max.romanov@nginx.com> Fixing WebSocket frame retain function.

Some of the pointers were not adjusted after frame's memory re-allocation.
Fortunately, this function was not used and the bug has no effect.
diff 1556:2f09c86168d9 Tue Aug 11 16:20:00 UTC 2020 Max Romanov <max.romanov@nginx.com> Wrapping close() call in libunit for logging.
diff 1555:1d84b9e4b459 Tue Aug 11 16:20:00 UTC 2020 Max Romanov <max.romanov@nginx.com> Introducing application and port shared memory queues.

The goal is to minimize the number of syscalls needed to deliver a message.
/unit/src/nodejs/unit-http/
H A Dunit.cppdiff 1767:582a004c73f8 Tue Dec 29 16:01:00 UTC 2020 Max Romanov <max.romanov@nginx.com> Libunit: processing single port message.

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.
diff 1766:9ec17030b67e Tue Dec 29 16:00:00 UTC 2020 Max Romanov <max.romanov@nginx.com> Node.js: ServerRequest and ServerResponse compliance to Stream API.

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.
diff 1547:cbcd76704c90 Tue Aug 11 16:20:00 UTC 2020 Max Romanov <max.romanov@nginx.com> Introducing the shared application port.

This is the port shared between all application processes which use it to pass
requests for processing. Using it significantly simplifies the request
processing code in the router. The drawback is 2 more file descriptors per each
configured application and more complex libunit message wait/read code.
diff 1543:42f27153db91 Tue Aug 11 16:19:00 UTC 2020 Max Romanov <max.romanov@nginx.com> Libunit refactoring: port management.

- Changed the port management callbacks to notifications, which e. g. avoids
the need to call the libunit function
- Added context and library instance reference counts for a safer resource
release
- Added the router main port initialization
diff 1038:77fb332f214a Wed Apr 17 16:15:00 UTC 2019 Max Romanov <max.romanov@nginx.com> Node.js: using low-case header names as key in req.headers.

Node.js modules (body-parser, row-body) search low-cased names
('content-length', 'content-type' etc.) to properly assemble request body.

This closes #246 issue on GitHub.
diff 830:85a1832ad45c Thu Nov 01 16:10:00 UTC 2018 Andrey Zelenkov <zelenkov@nginx.com> Node.js: fixed typo in naming rawHeaders() method of request.
/unit/test/
H A Dtest_routing.pydiff 1930:fb8b29aac7a1 Thu Aug 05 16:00:00 UTC 2021 Oisin Canty <o.canty@f5.com> Router: fixed crash when matching an empty address pattern array.

A crash would occur when the router tried to match an
against an empty address pattern array.

The following configuration was used to reproduce the
issue:

{
"listeners": {
"127.0.0.1:8082": {
"pass": "routes"
}
},
"routes": [
{
"match": {
"source": []
},
"action": {
"return": 200
}
}
]
}
diff 1730:44912af5b3e6 Sun Dec 06 16:01:00 UTC 2020 Andrei Zeliankou <zelenkov@nginx.com> Tests: options moved to the separate class.

This change is necessary to separate the logic
and prevent possible circular dependency.
diff 1596:b7e2d4d92624 Wed Sep 16 20:31:00 UTC 2020 Andrei Zeliankou <zelenkov@nginx.com> Tests: migrated to the pytest.
972:77f134858092 Wed Feb 27 16:46:00 UTC 2019 Andrey Zelenkov <zelenkov@nginx.com> Tests: routing.
H A Dtest_tls.pydiff 1863:98a5801c01ba Fri May 07 16:42:00 UTC 2021 Andrei Zeliankou <zelenkov@nginx.com> Tests: added test for TLS with empty Subject field.
diff 1850:839024ce4a6a Thu Apr 08 16:11:00 UTC 2021 Max Romanov <max.romanov@nginx.com> Tests: preserving unit.log when run without restart.

Introducing "unit.log.Log" class for "unit.log" file management.
Moving "findall()" function into TestApplicationProto.
Using "os.kill()" to send signals.
diff 1730:44912af5b3e6 Sun Dec 06 16:01:00 UTC 2020 Andrei Zeliankou <zelenkov@nginx.com> Tests: options moved to the separate class.

This change is necessary to separate the logic
and prevent possible circular dependency.
diff 1706:a1da56837554 Mon Nov 16 17:37:00 UTC 2020 Max Romanov <max.romanov@nginx.com> Tests: fixing tests interrupt in terminal.

KeyboardInterrupt re-raised.
diff 1596:b7e2d4d92624 Wed Sep 16 20:31:00 UTC 2020 Andrei Zeliankou <zelenkov@nginx.com> Tests: migrated to the pytest.
diff 970:2f4376c8f358 Wed Feb 27 16:15:00 UTC 2019 Andrey Zelenkov <zelenkov@nginx.com> Tests: added "Host" and "Connetion" headers where necessary.

Also minor header organizing.
H A Dtest_python_application.pydiff 1850:839024ce4a6a Thu Apr 08 16:11:00 UTC 2021 Max Romanov <max.romanov@nginx.com> Tests: preserving unit.log when run without restart.

Introducing "unit.log.Log" class for "unit.log" file management.
Moving "findall()" function into TestApplicationProto.
Using "os.kill()" to send signals.
diff 1804:ed698edaaf1e Wed Feb 10 16:34:00 UTC 2021 Andrei Zeliankou <zelenkov@nginx.com> Tests: increased timeout in wait_for_record().
diff 1730:44912af5b3e6 Sun Dec 06 16:01:00 UTC 2020 Andrei Zeliankou <zelenkov@nginx.com> Tests: options moved to the separate class.

This change is necessary to separate the logic
and prevent possible circular dependency.
diff 1706:a1da56837554 Mon Nov 16 17:37:00 UTC 2020 Max Romanov <max.romanov@nginx.com> Tests: fixing tests interrupt in terminal.

KeyboardInterrupt re-raised.
diff 1596:b7e2d4d92624 Wed Sep 16 20:31:00 UTC 2020 Andrei Zeliankou <zelenkov@nginx.com> Tests: migrated to the pytest.
diff 970:2f4376c8f358 Wed Feb 27 16:15:00 UTC 2019 Andrey Zelenkov <zelenkov@nginx.com> Tests: added "Host" and "Connetion" headers where necessary.

Also minor header organizing.
diff 753:0f0094dc0f51 Fri Aug 10 16:27:00 UTC 2018 Max Romanov <max.romanov@nginx.com> Introducing app joint to accurate app release.

For accurate app descriptor release, it is required to count the number of
use counts. Use count increased when:
- app linked to configuration app queue;
- socket conf stores pointer to app;
- request for start app process posted to router service thread;

Application port has pointer to app, but it does not increase use count
to avoid use count loop.

Timer needs a pointer to nxt_timer_t which is stored in engine timers tree.
nxt_timer_t now resides in nxt_app_joint_t and does not lock the application.

Start process port RPC handlers is also linked to nxt_app_joint_t.

App joint (nxt_app_joint_t) is a 'weak pointer':
- single threaded;
- use countable;
- store pointer to nxt_app_t (which can be NULL);

nxt_app_t has pointer to nxt_app_joint_t and update its pointer to app.
diff 684:8d2796b77db8 Wed May 30 16:29:00 UTC 2018 Andrey Zelenkov <zelenkov@nginx.com> Tests: added keep-alive with reconfiguration test.
diff 504:e9ebde982898 Tue Jan 30 13:16:00 UTC 2018 Andrey Zelenkov <zelenkov@nginx.com> Tests: added methods to manage unit configuration.
diff 503:d7eb78307759 Tue Jan 30 13:16:00 UTC 2018 Andrey Zelenkov <zelenkov@nginx.com> Tests: small fixes.
H A Dtest_php_application.pydiff 2054:357dee5c1861 Sat Dec 11 00:16:00 UTC 2021 Andrei Zeliankou <zelenkov@nginx.com> Tests: added more OPcache tests.
diff 1850:839024ce4a6a Thu Apr 08 16:11:00 UTC 2021 Max Romanov <max.romanov@nginx.com> Tests: preserving unit.log when run without restart.

Introducing "unit.log.Log" class for "unit.log" file management.
Moving "findall()" function into TestApplicationProto.
Using "os.kill()" to send signals.
diff 1730:44912af5b3e6 Sun Dec 06 16:01:00 UTC 2020 Andrei Zeliankou <zelenkov@nginx.com> Tests: options moved to the separate class.

This change is necessary to separate the logic
and prevent possible circular dependency.
diff 1596:b7e2d4d92624 Wed Sep 16 20:31:00 UTC 2020 Andrei Zeliankou <zelenkov@nginx.com> Tests: migrated to the pytest.
diff 1092:f148d4caca98 Mon Jul 08 16:23:00 UTC 2019 Andrey Zelenkov <zelenkov@nginx.com> Tests: added PATH_INFO variable test.
diff 970:2f4376c8f358 Wed Feb 27 16:15:00 UTC 2019 Andrey Zelenkov <zelenkov@nginx.com> Tests: added "Host" and "Connetion" headers where necessary.

Also minor header organizing.
diff 721:bcda74754da9 Wed Jul 11 16:35:00 UTC 2018 Andrey Zelenkov <zelenkov@nginx.com> Tests: more php.ini options tests.
H A Dtest_proxy.pydiff 1730:44912af5b3e6 Sun Dec 06 16:01:00 UTC 2020 Andrei Zeliankou <zelenkov@nginx.com> Tests: options moved to the separate class.

This change is necessary to separate the logic
and prevent possible circular dependency.
diff 1596:b7e2d4d92624 Wed Sep 16 20:31:00 UTC 2020 Andrei Zeliankou <zelenkov@nginx.com> Tests: migrated to the pytest.
/unit/
H A Dversiondiff 1896:19eee884bd0b Fri May 28 15:16:00 UTC 2021 Valentin Bartenev <vbart@nginx.com> Version bump.
diff 1806:e26d14bc48da Tue Feb 16 15:54:00 UTC 2021 Valentin Bartenev <vbart@nginx.com> Version bump.
diff 1412:778a83d86d9d Mon Mar 16 10:27:00 UTC 2020 Valentin Bartenev <vbart@nginx.com> Version bump.
diff 1362:a15179da7e86 Wed Feb 19 16:13:00 UTC 2020 Valentin Bartenev <vbart@nginx.com> Version bump.
H A DCHANGESdiff 1722:8d987b7880f9 Thu Nov 19 16:59:00 UTC 2020 Valentin Bartenev <vbart@nginx.com> Added version 1.21.0 CHANGES.
diff 1643:0e985b300673 Thu Oct 08 16:04:00 UTC 2020 Valentin Bartenev <vbart@nginx.com> Updated 1.20.0 CHANGES to include pytest migration.
diff 1570:41371bb77803 Thu Aug 13 16:22:00 UTC 2020 Valentin Bartenev <vbart@nginx.com> Added version 1.19.0 CHANGES.
diff 1460:e44039667c3e Thu Apr 16 14:49:00 UTC 2020 Valentin Bartenev <vbart@nginx.com> Added version 1.17.0 CHANGES.
diff 1284:7cdcbdd3ec34 Thu Nov 14 16:23:00 UTC 2019 Valentin Bartenev <vbart@nginx.com> Added version 1.13.0 CHANGES.
diff 1069:3dae65a81e8f Thu May 30 14:16:00 UTC 2019 Valentin Bartenev <vbart@nginx.com> Added version 1.9 CHANGES.
diff 886:9d30c80a7935 Thu Dec 20 16:17:00 UTC 2018 Valentin Bartenev <vbart@nginx.com> Added version 1.7 CHANGES.
diff 885:aae620f3dc68 Thu Dec 20 16:17:00 UTC 2018 Valentin Bartenev <vbart@nginx.com> Fixed style in CHANGES.
diff 639:2122fd672fd7 Thu Apr 12 16:47:00 UTC 2018 Valentin Bartenev <vbart@nginx.com> Added version 1.0 CHANGES.
diff 539:4ae0b7b989e3 Fri Feb 09 16:07:00 UTC 2018 Valentin Bartenev <vbart@nginx.com> Added version 0.6 CHANGES.
/unit/pkg/docker/
H A DDockerfile.minimaldiff 1645:29efab062b4e Thu Oct 08 16:19:00 UTC 2020 Andrei Belov <defan@nginx.com> Merged with the default branch.
diff 1573:79f364e9aa90 Thu Aug 13 16:28:00 UTC 2020 Andrei Belov <defan@nginx.com> Merged with the default branch.
diff 1571:86cdf66f8274 Thu Aug 13 16:22:00 UTC 2020 Valentin Bartenev <vbart@nginx.com> Generated Dockerfiles for Unit 1.19.0.
diff 1463:e0658022962c Thu Apr 16 15:27:00 UTC 2020 Andrei Belov <defan@nginx.com> Merged with the default branch.
diff 1461:4b13438632bc Thu Apr 16 14:49:00 UTC 2020 Valentin Bartenev <vbart@nginx.com> Generated Dockerfiles for Unit 1.17.0.
diff 1287:439bd957eeb4 Thu Nov 14 16:29:00 UTC 2019 Andrei Belov <defan@nginx.com> Merged with the default branch.
diff 1285:3313bf222e6e Thu Nov 14 16:24:00 UTC 2019 Valentin Bartenev <vbart@nginx.com> Generated Dockerfiles for Unit 1.13.0.
diff 1188:282c8f9fe43c Thu Sep 19 16:04:00 UTC 2019 Konstantin Pavlov <thresh@nginx.com> Merged with the default branch.
diff 1070:dda6319de785 Thu May 30 14:16:00 UTC 2019 Valentin Bartenev <vbart@nginx.com> Generated Dockerfiles for Unit 1.9.0.
diff 887:784b45adb0fe Thu Dec 20 16:17:00 UTC 2018 Valentin Bartenev <vbart@nginx.com> Generated Dockerfiles for Unit 1.7.
H A DMakefilediff 1957:7a0ec2889c37 Tue Sep 21 11:03:00 UTC 2021 Konstantin Pavlov <thresh@nginx.com> Docker: bumped versions.
Minimal image now uses Debian 11 "Bullseye" as a base.

Language versions are bumped to:
- Go 1.17
- Node 16
- Perl 5.34
- Ruby 3.0
diff 1645:29efab062b4e Thu Oct 08 16:19:00 UTC 2020 Andrei Belov <defan@nginx.com> Merged with the default branch.
diff 1463:e0658022962c Thu Apr 16 15:27:00 UTC 2020 Andrei Belov <defan@nginx.com> Merged with the default branch.
diff 1421:88c84fb7ac0f Thu Mar 19 10:16:00 UTC 2020 Konstantin Pavlov <thresh@nginx.com> Fixed filepath in the image checksum file.
diff 534:51e5b0a89e82 Thu Feb 08 16:38:00 UTC 2018 Andrei Belov <defan@nginx.com> Docker: typo fixed.
/unit/pkg/rpm/
H A Dunit.spec.indiff 2103:6e61a013417e Mon May 16 13:22:00 UTC 2022 Konstantin Pavlov <thresh@nginx.com> Packages: ship README.md and CONTRIBUTING.md.
H A DMakefile.python37diff 1310:706597aedbb1 Tue Dec 10 16:35:00 UTC 2019 Andrei Belov <defan@nginx.com> Packages: added Python 3 support on Amazon Linux 2 (LTS).
H A DMakefile.python27diff 1310:706597aedbb1 Tue Dec 10 16:35:00 UTC 2019 Andrei Belov <defan@nginx.com> Packages: added Python 3 support on Amazon Linux 2 (LTS).
H A DMakefilediff 2103:6e61a013417e Mon May 16 13:22:00 UTC 2022 Konstantin Pavlov <thresh@nginx.com> Packages: ship README.md and CONTRIBUTING.md.
diff 1748:080737161d83 Wed Dec 16 06:55:00 UTC 2020 Andrei Belov <defan@nginx.com> Packages: introduced PYTEST_ARGS env variable for test targets.

This is useful for running particular tests, e.g.:
PYTEST_ARGS='test/test_respawn.py::TestRespawn::test_respawn_router' make test
diff 1645:29efab062b4e Thu Oct 08 16:19:00 UTC 2020 Andrei Belov <defan@nginx.com> Merged with the default branch.
diff 1596:b7e2d4d92624 Wed Sep 16 20:31:00 UTC 2020 Andrei Zeliankou <zelenkov@nginx.com> Tests: migrated to the pytest.
diff 1573:79f364e9aa90 Thu Aug 13 16:28:00 UTC 2020 Andrei Belov <defan@nginx.com> Merged with the default branch.
diff 1501:b83465063582 Tue Jun 16 12:02:00 UTC 2020 Andrei Belov <defan@nginx.com> Packages: added Fedora 32 support.
diff 1310:706597aedbb1 Tue Dec 10 16:35:00 UTC 2019 Andrei Belov <defan@nginx.com> Packages: added Python 3 support on Amazon Linux 2 (LTS).

12345678910>>...13