summaryrefslogtreecommitdiffhomepage
path: root/src/stream/ngx_stream_upstream_zone_module.c (follow)
AgeCommit message (Collapse)AuthorFilesLines
2024-11-07Upstream: copy upstream zone DNS valid time during config reload.Mini Hawthorne1-1/+11
Previously, all upstream DNS entries would be immediately re-resolved on config reload. With a large number of upstreams, this creates a spike of DNS resolution requests. These spikes can overwhelm the DNS server or cause drops on the network. This patch retains the TTL of previous resolutions across reloads by copying each upstream's name's expiry time across configuration cycles. As a result, no additional resolutions are needed.
2024-11-07Upstream: pre-resolve servers on reload.Ruslan Ermilov1-7/+194
After configuration is reloaded, it may take some time for the re-resolvable upstream servers to resolve and become available as peers. During this time, client requests might get dropped. Such servers are now pre-resolved using the "cache" of already resolved peers from the old shared memory zone.
2024-11-07Upstream: construct upstream peers from DNS SRV records.Dmitry Volyntsev1-29/+155
2024-11-07Upstream: re-resolvable servers.Ruslan Ermilov1-1/+361
Specifying the upstream server by a hostname together with the "resolve" parameter will make the hostname to be periodically resolved, and upstream servers added/removed as necessary. This requires a "resolver" at the "http" configuration block. The "resolver_timeout" parameter also affects when the failed DNS requests will be attempted again. Responses with NXDOMAIN will be attempted again in 10 seconds. Upstream has a configuration generation number that is incremented each time servers are added/removed to the primary/backup list. This number is remembered by the peer.init method, and if peer.get detects a change in configuration, it returns NGX_BUSY. Each server has a reference counter. It is incremented by peer.get and decremented by peer.free. When a server is removed, it is removed from the list of servers and is marked as "zombie". The memory allocated by a zombie peer is freed only when its reference count becomes zero. Co-authored-by: Roman Arutyunyan <arut@nginx.com> Co-authored-by: Sergey Kandaurov <pluknet@nginx.com> Co-authored-by: Vladimir Homutov <vl@nginx.com>
2017-09-22Do not use the obsolete NGX_SOCKADDRLEN macro.Ruslan Ermilov1-1/+1
The change in ac120e797d28 re-used the macro which was made obsolete in adf25b8d0431.
2017-08-04Upstream: copy peer data in shared memory.Ruslan Ermilov1-8/+69
This, in addition to 1eb753aa8e5e, fixes "upstream zone" on Windows.
2017-08-01Upstream zone: store peers->name and its data in shared memory.Ruslan Ermilov1-0/+18
The shared objects should generally be allocated from shared memory. While peers->name and the data it points to allocated from cf->pool happened to work on UNIX, it broke on Windows. On UNIX this worked only because the shared memory zone for upstreams is re-created for every new configuration. But on Windows, a worker process does not inherit the address space of the master process, so the peers->name pointed to data allocated from cf->pool by the master process, and was invalid.
2016-07-12Stream: style.Vladimir Homutov1-1/+1
2016-06-15Stream: added preconfiguration step.Vladimir Homutov1-0/+1
2015-07-16Fixed strict aliasing warnings with old GCC versions.Ruslan Ermilov1-1/+1
2015-06-16Upstream: fixed shared upstreams on win32.Ruslan Ermilov1-12/+31
2015-06-09Stream: added postconfiguration method to stream modules.Vladimir Homutov1-0/+2
2015-04-22Upstream: allow multiple upstreams to use the same shared zone.Ruslan Ermilov1-42/+56
2015-04-20Stream: port from NGINX+.Ruslan Ermilov1-0/+207