Welcome! Log In Create A New Profile

Advanced

[PATCH 06 of 15] Configuration for tempfiles serving

Jiří Setnička via nginx-devel
January 28, 2022 11:50AM
# HG changeset patch
# User Jiří Setnička <jiri.setnicka@cdn77.com>
# Date 1643385660 -3600
# Fri Jan 28 17:01:00 2022 +0100
# Node ID 5e3013a56643a9f8d26ea0e5882a1aa986c51903
# Parent 76c1a836b1de47cb16b636b585526e25574e0f58
Configuration for tempfiles serving
New directives:
* proxy_cache_tempfile on/off -- activate the whole tempfile serving logic
* proxy_cache_tempfile_timeout 5s; -- how long to wait for tempfile before 504
* proxy_cache_tempfile_loop 50ms; -- loop time for check tempiles

* fastcgi_cache_tempfile on/off -- activate the whole tempfile serving logic
* fastcgi_cache_tempfile_timeout 5s; -- how long to wait for tempfile before 504
* fastcgi_cache_tempfile_loop 50ms; -- loop time for check tempiles

* scgi_cache_tempfile on/off -- activate the whole tempfile serving logic
* scgi_cache_tempfile_timeout 5s; -- how long to wait for tempfile before 504
* scgi_cache_tempfile_loop 50ms; -- loop time for check tempiles

* uwsgi_cache_tempfile on/off -- activate the whole tempfile serving logic
* uwsgi_cache_tempfile_timeout 5s; -- how long to wait for tempfile before 504
* uwsgi_cache_tempfile_loop 50ms; -- loop time for check tempiles

diff --git a/src/http/modules/ngx_http_fastcgi_module.c b/src/http/modules/ngx_http_fastcgi_module.c
--- a/src/http/modules/ngx_http_fastcgi_module.c
+++ b/src/http/modules/ngx_http_fastcgi_module.c
@@ -473,6 +473,27 @@ static ngx_command_t ngx_http_fastcgi_c
offsetof(ngx_http_fastcgi_loc_conf_t, upstream.cache_lock_age),
NULL },

+ { ngx_string("fastcgi_cache_tempfile"),
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
+ ngx_conf_set_flag_slot,
+ NGX_HTTP_LOC_CONF_OFFSET,
+ offsetof(ngx_http_fastcgi_loc_conf_t, upstream.cache_tempfile),
+ NULL },
+
+ { ngx_string("fastcgi_cache_tempfile_timeout"),
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
+ ngx_conf_set_msec_slot,
+ NGX_HTTP_LOC_CONF_OFFSET,
+ offsetof(ngx_http_fastcgi_loc_conf_t, upstream.cache_tempfile_timeout),
+ NULL },
+
+ { ngx_string("fastcgi_cache_tempfile_loop"),
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
+ ngx_conf_set_msec_slot,
+ NGX_HTTP_LOC_CONF_OFFSET,
+ offsetof(ngx_http_fastcgi_loc_conf_t, upstream.cache_tempfile_loop),
+ NULL },
+
{ ngx_string("fastcgi_cache_revalidate"),
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
ngx_conf_set_flag_slot,
@@ -2866,6 +2887,9 @@ ngx_http_fastcgi_create_loc_conf(ngx_con
conf->upstream.cache_lock = NGX_CONF_UNSET;
conf->upstream.cache_lock_timeout = NGX_CONF_UNSET_MSEC;
conf->upstream.cache_lock_age = NGX_CONF_UNSET_MSEC;
+ conf->upstream.cache_tempfile = NGX_CONF_UNSET;
+ conf->upstream.cache_tempfile_timeout = NGX_CONF_UNSET_MSEC;
+ conf->upstream.cache_tempfile_loop = NGX_CONF_UNSET_MSEC;
conf->upstream.cache_revalidate = NGX_CONF_UNSET;
conf->upstream.cache_background_update = NGX_CONF_UNSET;
#endif
@@ -3160,6 +3184,22 @@ ngx_http_fastcgi_merge_loc_conf(ngx_conf
ngx_conf_merge_msec_value(conf->upstream.cache_lock_age,
prev->upstream.cache_lock_age, 5000);

+ ngx_conf_merge_value(conf->upstream.cache_tempfile,
+ prev->upstream.cache_tempfile, 0);
+
+ ngx_conf_merge_msec_value(conf->upstream.cache_tempfile_timeout,
+ prev->upstream.cache_tempfile_timeout, 5000);
+
+ ngx_conf_merge_msec_value(conf->upstream.cache_tempfile_loop,
+ prev->upstream.cache_tempfile_loop, 50);
+
+ if (conf->upstream.cache_lock && conf->upstream.cache_tempfile) {
+ ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
+ "\"fastcgi_cache_lock\" and \"fastcgi_cache_tempfile\""
+ " cannot be used together");
+ return NGX_CONF_ERROR;
+ }
+
ngx_conf_merge_value(conf->upstream.cache_revalidate,
prev->upstream.cache_revalidate, 0);

diff --git a/src/http/modules/ngx_http_proxy_module.c b/src/http/modules/ngx_http_proxy_module.c
--- a/src/http/modules/ngx_http_proxy_module.c
+++ b/src/http/modules/ngx_http_proxy_module.c
@@ -590,6 +590,27 @@ static ngx_command_t ngx_http_proxy_com
offsetof(ngx_http_proxy_loc_conf_t, upstream.cache_lock_age),
NULL },

+ { ngx_string("proxy_cache_tempfile"),
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
+ ngx_conf_set_flag_slot,
+ NGX_HTTP_LOC_CONF_OFFSET,
+ offsetof(ngx_http_proxy_loc_conf_t, upstream.cache_tempfile),
+ NULL },
+
+ { ngx_string("proxy_cache_tempfile_timeout"),
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
+ ngx_conf_set_msec_slot,
+ NGX_HTTP_LOC_CONF_OFFSET,
+ offsetof(ngx_http_proxy_loc_conf_t, upstream.cache_tempfile_timeout),
+ NULL },
+
+ { ngx_string("proxy_cache_tempfile_loop"),
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
+ ngx_conf_set_msec_slot,
+ NGX_HTTP_LOC_CONF_OFFSET,
+ offsetof(ngx_http_proxy_loc_conf_t, upstream.cache_tempfile_loop),
+ NULL },
+
{ ngx_string("proxy_cache_revalidate"),
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
ngx_conf_set_flag_slot,
@@ -3384,6 +3405,9 @@ ngx_http_proxy_create_loc_conf(ngx_conf_
conf->upstream.cache_lock = NGX_CONF_UNSET;
conf->upstream.cache_lock_timeout = NGX_CONF_UNSET_MSEC;
conf->upstream.cache_lock_age = NGX_CONF_UNSET_MSEC;
+ conf->upstream.cache_tempfile = NGX_CONF_UNSET;
+ conf->upstream.cache_tempfile_timeout = NGX_CONF_UNSET_MSEC;
+ conf->upstream.cache_tempfile_loop = NGX_CONF_UNSET_MSEC;
conf->upstream.cache_revalidate = NGX_CONF_UNSET;
conf->upstream.cache_convert_head = NGX_CONF_UNSET;
conf->upstream.cache_background_update = NGX_CONF_UNSET;
@@ -3699,6 +3723,22 @@ ngx_http_proxy_merge_loc_conf(ngx_conf_t
ngx_conf_merge_msec_value(conf->upstream.cache_lock_age,
prev->upstream.cache_lock_age, 5000);

+ ngx_conf_merge_value(conf->upstream.cache_tempfile,
+ prev->upstream.cache_tempfile, 0);
+
+ ngx_conf_merge_msec_value(conf->upstream.cache_tempfile_timeout,
+ prev->upstream.cache_tempfile_timeout, 5000);
+
+ ngx_conf_merge_msec_value(conf->upstream.cache_tempfile_loop,
+ prev->upstream.cache_tempfile_loop, 50);
+
+ if (conf->upstream.cache_lock && conf->upstream.cache_tempfile) {
+ ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
+ "\"proxy_cache_lock\" and \"proxy_cache_tempfile\""
+ " cannot be used together");
+ return NGX_CONF_ERROR;
+ }
+
ngx_conf_merge_value(conf->upstream.cache_revalidate,
prev->upstream.cache_revalidate, 0);

diff --git a/src/http/modules/ngx_http_scgi_module.c b/src/http/modules/ngx_http_scgi_module.c
--- a/src/http/modules/ngx_http_scgi_module.c
+++ b/src/http/modules/ngx_http_scgi_module.c
@@ -321,6 +321,27 @@ static ngx_command_t ngx_http_scgi_comma
offsetof(ngx_http_scgi_loc_conf_t, upstream.cache_lock_age),
NULL },

+ { ngx_string("scgi_cache_tempfile"),
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
+ ngx_conf_set_flag_slot,
+ NGX_HTTP_LOC_CONF_OFFSET,
+ offsetof(ngx_http_scgi_loc_conf_t, upstream.cache_tempfile),
+ NULL },
+
+ { ngx_string("scgi_cache_tempfile_timeout"),
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
+ ngx_conf_set_msec_slot,
+ NGX_HTTP_LOC_CONF_OFFSET,
+ offsetof(ngx_http_scgi_loc_conf_t, upstream.cache_tempfile_timeout),
+ NULL },
+
+ { ngx_string("scgi_cache_tempfile_loop"),
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
+ ngx_conf_set_msec_slot,
+ NGX_HTTP_LOC_CONF_OFFSET,
+ offsetof(ngx_http_scgi_loc_conf_t, upstream.cache_tempfile_loop),
+ NULL },
+
{ ngx_string("scgi_cache_revalidate"),
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
ngx_conf_set_flag_slot,
@@ -1273,6 +1294,9 @@ ngx_http_scgi_create_loc_conf(ngx_conf_t
conf->upstream.cache_lock = NGX_CONF_UNSET;
conf->upstream.cache_lock_timeout = NGX_CONF_UNSET_MSEC;
conf->upstream.cache_lock_age = NGX_CONF_UNSET_MSEC;
+ conf->upstream.cache_tempfile = NGX_CONF_UNSET;
+ conf->upstream.cache_tempfile_timeout = NGX_CONF_UNSET_MSEC;
+ conf->upstream.cache_tempfile_loop = NGX_CONF_UNSET_MSEC;
conf->upstream.cache_revalidate = NGX_CONF_UNSET;
conf->upstream.cache_background_update = NGX_CONF_UNSET;
#endif
@@ -1562,6 +1586,22 @@ ngx_http_scgi_merge_loc_conf(ngx_conf_t
ngx_conf_merge_msec_value(conf->upstream.cache_lock_age,
prev->upstream.cache_lock_age, 5000);

+ ngx_conf_merge_value(conf->upstream.cache_tempfile,
+ prev->upstream.cache_tempfile, 0);
+
+ ngx_conf_merge_msec_value(conf->upstream.cache_tempfile_timeout,
+ prev->upstream.cache_tempfile_timeout, 5000);
+
+ ngx_conf_merge_msec_value(conf->upstream.cache_tempfile_loop,
+ prev->upstream.cache_tempfile_loop, 50);
+
+ if (conf->upstream.cache_lock && conf->upstream.cache_tempfile) {
+ ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
+ "\"scgi_cache_lock\" and \"scgi_cache_tempfile\""
+ " cannot be used together");
+ return NGX_CONF_ERROR;
+ }
+
ngx_conf_merge_value(conf->upstream.cache_revalidate,
prev->upstream.cache_revalidate, 0);

diff --git a/src/http/modules/ngx_http_uwsgi_module.c b/src/http/modules/ngx_http_uwsgi_module.c
--- a/src/http/modules/ngx_http_uwsgi_module.c
+++ b/src/http/modules/ngx_http_uwsgi_module.c
@@ -385,6 +385,27 @@ static ngx_command_t ngx_http_uwsgi_comm
offsetof(ngx_http_uwsgi_loc_conf_t, upstream.cache_lock_age),
NULL },

+ { ngx_string("uwsgi_cache_tempfile"),
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
+ ngx_conf_set_flag_slot,
+ NGX_HTTP_LOC_CONF_OFFSET,
+ offsetof(ngx_http_uwsgi_loc_conf_t, upstream.cache_tempfile),
+ NULL },
+
+ { ngx_string("uwsgi_cache_tempfile_timeout"),
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
+ ngx_conf_set_msec_slot,
+ NGX_HTTP_LOC_CONF_OFFSET,
+ offsetof(ngx_http_uwsgi_loc_conf_t, upstream.cache_tempfile_timeout),
+ NULL },
+
+ { ngx_string("uwsgi_cache_tempfile_loop"),
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
+ ngx_conf_set_msec_slot,
+ NGX_HTTP_LOC_CONF_OFFSET,
+ offsetof(ngx_http_uwsgi_loc_conf_t, upstream.cache_tempfile_loop),
+ NULL },
+
{ ngx_string("uwsgi_cache_revalidate"),
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
ngx_conf_set_flag_slot,
@@ -1497,6 +1518,9 @@ ngx_http_uwsgi_create_loc_conf(ngx_conf_
conf->upstream.cache_lock = NGX_CONF_UNSET;
conf->upstream.cache_lock_timeout = NGX_CONF_UNSET_MSEC;
conf->upstream.cache_lock_age = NGX_CONF_UNSET_MSEC;
+ conf->upstream.cache_tempfile = NGX_CONF_UNSET;
+ conf->upstream.cache_tempfile_timeout = NGX_CONF_UNSET_MSEC;
+ conf->upstream.cache_tempfile_loop = NGX_CONF_UNSET_MSEC;
conf->upstream.cache_revalidate = NGX_CONF_UNSET;
conf->upstream.cache_background_update = NGX_CONF_UNSET;
#endif
@@ -1798,6 +1822,22 @@ ngx_http_uwsgi_merge_loc_conf(ngx_conf_t
ngx_conf_merge_msec_value(conf->upstream.cache_lock_age,
prev->upstream.cache_lock_age, 5000);

+ ngx_conf_merge_value(conf->upstream.cache_tempfile,
+ prev->upstream.cache_tempfile, 0);
+
+ ngx_conf_merge_msec_value(conf->upstream.cache_tempfile_timeout,
+ prev->upstream.cache_tempfile_timeout, 5000);
+
+ ngx_conf_merge_msec_value(conf->upstream.cache_tempfile_loop,
+ prev->upstream.cache_tempfile_loop, 50);
+
+ if (conf->upstream.cache_lock && conf->upstream.cache_tempfile) {
+ ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
+ "\"uwsgi_cache_lock\" and \"uwsgi_cache_tempfile\""
+ " cannot be used together");
+ return NGX_CONF_ERROR;
+ }
+
ngx_conf_merge_value(conf->upstream.cache_revalidate,
prev->upstream.cache_revalidate, 0);

diff --git a/src/http/ngx_http_cache.h b/src/http/ngx_http_cache.h
--- a/src/http/ngx_http_cache.h
+++ b/src/http/ngx_http_cache.h
@@ -114,11 +114,14 @@ struct ngx_http_cache_s {
ngx_msec_t lock_timeout;
ngx_msec_t lock_age;
ngx_msec_t lock_time;
+ ngx_msec_t tempfile_timeout;
+ ngx_msec_t tempfile_loop;
ngx_msec_t wait_time;

ngx_event_t wait_event;

unsigned lock:1;
+ unsigned serve_tempfile:1;
unsigned waiting:1;

unsigned updated:1;
diff --git a/src/http/ngx_http_upstream.c b/src/http/ngx_http_upstream.c
--- a/src/http/ngx_http_upstream.c
+++ b/src/http/ngx_http_upstream.c
@@ -892,6 +892,10 @@ ngx_http_upstream_cache(ngx_http_request
c->lock_timeout = u->conf->cache_lock_timeout;
c->lock_age = u->conf->cache_lock_age;

+ c->serve_tempfile = u->conf->cache_tempfile;
+ c->tempfile_timeout = u->conf->cache_tempfile_timeout;
+ c->tempfile_loop = u->conf->cache_tempfile_loop;
+
u->cache_status = NGX_HTTP_CACHE_MISS;
}

diff --git a/src/http/ngx_http_upstream.h b/src/http/ngx_http_upstream.h
--- a/src/http/ngx_http_upstream.h
+++ b/src/http/ngx_http_upstream.h
@@ -205,6 +205,10 @@ typedef struct {
ngx_msec_t cache_lock_timeout;
ngx_msec_t cache_lock_age;

+ ngx_flag_t cache_tempfile;
+ ngx_msec_t cache_tempfile_timeout;
+ ngx_msec_t cache_tempfile_loop;
+
ngx_flag_t cache_revalidate;
ngx_flag_t cache_convert_head;
ngx_flag_t cache_background_update;
_______________________________________________
nginx-devel mailing list -- nginx-devel@nginx.org
To unsubscribe send an email to nginx-devel-leave@nginx.org
Subject Author Views Posted

[PATCH 00 of 15] Serve all requests from single tempfile

Jiří Setnička via nginx-devel 468 January 28, 2022 11:36AM

[PATCH 01 of 15] ngx core - obtain number appended to the temp file name

Jiří Setnička via nginx-devel 133 January 28, 2022 11:38AM

[PATCH 02 of 15] ngx core - ensure that tempfile number never be 0

Jiří Setnička via nginx-devel 140 January 28, 2022 11:40AM

[PATCH 03 of 15] Cache: Shared memory for tempfile nodes

Jiří Setnička via nginx-devel 278 January 28, 2022 11:42AM

[PATCH 04 of 15] Cache: tf_node for tracking opened tempfile

Jiří Setnička via nginx-devel 130 January 28, 2022 11:44AM

[PATCH 05 of 15] http upstream & file_cache: store temp file number and length in tf_node

Jiří Setnička via nginx-devel 140 January 28, 2022 11:46AM

[PATCH 07 of 15] Tempfiles: Wait handlers

Jiří Setnička via nginx-devel 122 January 28, 2022 11:48AM

[PATCH 06 of 15] Configuration for tempfiles serving

Jiří Setnička via nginx-devel 162 January 28, 2022 11:50AM

[PATCH 09 of 15] Tempfiles: Sending data from tempfile

Jiří Setnička via nginx-devel 127 January 28, 2022 11:52AM

[PATCH 08 of 15] Tempfiles: Mechanism of opening tempfiles used for serving paralell requests

Jiří Setnička via nginx-devel 131 January 28, 2022 11:54AM

[PATCH 10 of 15] Tempfiles: Setup event handlers in ngx_http_upstream.c

Jiří Setnička via nginx-devel 143 January 28, 2022 11:56AM

[PATCH 11 of 15] Tempfiles: reset c->body_start when updating a tempfile

Jiří Setnička via nginx-devel 149 January 28, 2022 11:58AM

[PATCH 12 of 15] Tempfiles: Expired tempfiles

Jiří Setnička via nginx-devel 153 January 28, 2022 12:00PM

[PATCH 13 of 15] Tempfiles: Skip cached file if there is already newer tempfile

Jiří Setnička via nginx-devel 248 January 28, 2022 12:02PM

Re: [PATCH 13 of 15] Tempfiles: Skip cached file if there is already newer tempfile

Vadim Fedorenko 151 January 30, 2022 07:38PM

Re: [PATCH 13 of 15] Tempfiles: Skip cached file if there is already newer tempfile

Jiří Setnička via nginx-devel 142 February 07, 2022 06:22AM

[PATCH 14 of 15] Tempfiles: Set send_timeout inside ngx_http_cache_send

Jiří Setnička via nginx-devel 158 January 28, 2022 12:04PM

[PATCH 15 of 15] Use cache status UPDATING when serving from tempfile

Jiří Setnička via nginx-devel 131 January 28, 2022 12:06PM

Re: [PATCH 00 of 15] Serve all requests from single tempfile

Jiří Setnička via nginx-devel 127 February 07, 2022 06:18AM

Re: [PATCH 00 of 15] Serve all requests from single tempfile

Roman Arutyunyan 143 February 07, 2022 06:32AM

Re: [PATCH 00 of 15] Serve all requests from single tempfile

Jiří Setnička via nginx-devel 165 February 07, 2022 07:30AM

Re: [PATCH 00 of 15] Serve all requests from single tempfile

Roman Arutyunyan 180 February 08, 2022 06:20AM



Sorry, you do not have permission to post/reply in this forum.

Online Users

Guests: 282
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready