[PATCH] Upstream: add use_temp_path=tmp to proxy_cache_path and friends
Roman Arutyunyan
arut at nginx.com
Tue Jan 6 12:53:03 UTC 2015
On 06 Jan 2015, at 06:15, Piotr Sikora <piotr at cloudflare.com> wrote:
> # HG changeset patch
> # User Piotr Sikora <piotr at cloudflare.com>
> # Date 1420514028 28800
> # Mon Jan 05 19:13:48 2015 -0800
> # Node ID e7596cd5b480c9cbabe583a8f47301e32fdf179a
> # Parent e9effef98874c619326ec11e25b11333225cf797
> Upstream: add use_temp_path=tmp to proxy_cache_path and friends.
>
> When set to "tmp", store temporary files in "tmp" directory inside cache
> path.
>
> The advantage of this solution is that temporary files are stored inside
> cache path (same as with "off"), which makes path suitable to be used in
> multi-disks setups, but at the same time they aren't mixed with complete
> files, which makes it easier to manage them.
>
> Signed-off-by: Piotr Sikora <piotr at cloudflare.com>
>
> diff -r e9effef98874 -r e7596cd5b480 src/http/ngx_http_cache.h
> --- a/src/http/ngx_http_cache.h Fri Dec 26 16:22:59 2014 +0300
> +++ b/src/http/ngx_http_cache.h Mon Jan 05 19:13:48 2015 -0800
> @@ -142,6 +142,7 @@ struct ngx_http_file_cache_s {
> ngx_slab_pool_t *shpool;
>
> ngx_path_t *path;
> + ngx_path_t *temp;
>
> off_t max_size;
> size_t bsize;
> @@ -157,7 +158,7 @@ struct ngx_http_file_cache_s {
> ngx_shm_zone_t *shm_zone;
>
> ngx_uint_t use_temp_path;
> - /* unsigned use_temp_path:1 */
> + /* unsigned use_temp_path:2 */
> };
>
>
> diff -r e9effef98874 -r e7596cd5b480 src/http/ngx_http_file_cache.c
> --- a/src/http/ngx_http_file_cache.c Fri Dec 26 16:22:59 2014 +0300
> +++ b/src/http/ngx_http_file_cache.c Mon Jan 05 19:13:48 2015 -0800
> @@ -2069,6 +2069,7 @@ ngx_http_file_cache_set_slot(ngx_conf_t
>
> off_t max_size;
> u_char *last, *p;
> + size_t len;
> time_t inactive;
> ssize_t size;
> ngx_str_t s, name, *value;
> @@ -2158,10 +2159,30 @@ ngx_http_file_cache_set_slot(ngx_conf_t
> } else if (ngx_strcmp(&value[i].data[14], "off") == 0) {
> use_temp_path = 0;
>
> + } else if (ngx_strcmp(&value[i].data[14], "tmp") == 0) {
> + use_temp_path = 2;
> +
> + len = cache->path->name.len + sizeof("/tmp") - 1;
> +
> + p = ngx_pnalloc(cf->pool, len);
> + if (p == NULL) {
> + return NGX_CONF_ERROR;
> + }
> +
> + (void) ngx_sprintf(p, "%V/tmp", &cache->path->name);
> +
> + cache->temp = ngx_pcalloc(cf->pool, sizeof(ngx_path_t));
> + if (cache->temp == NULL) {
> + return NGX_CONF_ERROR;
> + }
> +
> + cache->temp->name.data = p;
> + cache->temp->name.len = len;
What about level settings for this temp path?
> +
> } else {
> ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
> "invalid use_temp_path value \"%V\", "
> - "it must be \"on\" or \"off\"",
> + "it must be \"on\", \"off\" or \"tmp\"",
> &value[i]);
> return NGX_CONF_ERROR;
> }
> @@ -2291,6 +2312,15 @@ ngx_http_file_cache_set_slot(ngx_conf_t
> return NGX_CONF_ERROR;
> }
>
> + if (cache->temp) {
> + cache->temp->conf_file = cf->conf_file->file.name.data;
> + cache->temp->line = cf->conf_file->line;
> +
> + if (ngx_add_path(cf, &cache->temp) != NGX_OK) {
> + return NGX_CONF_ERROR;
> + }
> + }
> +
> cache->shm_zone = ngx_shared_memory_add(cf, &name, size, cmd->post);
> if (cache->shm_zone == NULL) {
> return NGX_CONF_ERROR;
> diff -r e9effef98874 -r e7596cd5b480 src/http/ngx_http_upstream.c
> --- a/src/http/ngx_http_upstream.c Fri Dec 26 16:22:59 2014 +0300
> +++ b/src/http/ngx_http_upstream.c Mon Jan 05 19:13:48 2015 -0800
> @@ -2678,10 +2678,15 @@ ngx_http_upstream_send_response(ngx_http
> p->temp_file->persistent = 1;
>
> #if (NGX_HTTP_CACHE)
> - if (r->cache && !r->cache->file_cache->use_temp_path) {
> - p->temp_file->file.name = r->cache->file.name;
> - p->temp_file->path = r->cache->file_cache->path;
> - p->temp_file->prefix = 1;
> + if (r->cache) {
> + if (r->cache->file_cache->use_temp_path == 0) {
> + p->temp_file->file.name = r->cache->file.name;
> + p->temp_file->path = r->cache->file_cache->path;
> + p->temp_file->prefix = 1;
> +
> + } else if (r->cache->file_cache->use_temp_path == 2) {
> + p->temp_file->path = r->cache->file_cache->temp;
> + }
> }
> #endif
>
>
> _______________________________________________
> nginx-devel mailing list
> nginx-devel at nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-devel
>
More information about the nginx-devel
mailing list