]> git.kaiwu.me - nginx.git/commitdiff
The change in adaptive loader behaviour introduced in r3975:
authorIgor Sysoev <igor@sysoev.ru>
Mon, 22 Aug 2011 10:16:49 +0000 (10:16 +0000)
committerIgor Sysoev <igor@sysoev.ru>
Mon, 22 Aug 2011 10:16:49 +0000 (10:16 +0000)
now cache loader processes either as many files as specified by loader_files
or works no more than time specified by loader_threshold during each iteration.

loader_threshold was previously used to decrease loader_files or
to increase loader_timeout and this might eventually result in
downgrading loader_files to 1 and increasing loader_timeout to large values
causing loading cache for forever.

src/http/ngx_http_file_cache.c

index b9ea606a2e6adfcdfd9f46155d4d0031e6cc2f3e..a0f21cfb96ca45fd2629d4e4f26418a30648923a 100644 (file)
@@ -30,8 +30,7 @@ static time_t ngx_http_file_cache_forced_expire(ngx_http_file_cache_t *cache);
 static time_t ngx_http_file_cache_expire(ngx_http_file_cache_t *cache);
 static void ngx_http_file_cache_delete(ngx_http_file_cache_t *cache,
     ngx_queue_t *q, u_char *name);
-static ngx_int_t
-    ngx_http_file_cache_loader_sleep(ngx_http_file_cache_t *cache);
+static void ngx_http_file_cache_loader_sleep(ngx_http_file_cache_t *cache);
 static ngx_int_t ngx_http_file_cache_noop(ngx_tree_ctx_t *ctx,
     ngx_str_t *path);
 static ngx_int_t ngx_http_file_cache_manage_file(ngx_tree_ctx_t *ctx,
@@ -1261,12 +1260,28 @@ ngx_http_file_cache_loader(void *data)
 
 
 static ngx_int_t
-ngx_http_file_cache_loader_sleep(ngx_http_file_cache_t *cache)
+ngx_http_file_cache_noop(ngx_tree_ctx_t *ctx, ngx_str_t *path)
 {
-    ngx_msec_t  elapsed;
+    return NGX_OK;
+}
+
+
+static ngx_int_t
+ngx_http_file_cache_manage_file(ngx_tree_ctx_t *ctx, ngx_str_t *path)
+{
+    ngx_msec_t              elapsed;
+    ngx_http_file_cache_t  *cache;
+
+    cache = ctx->data;
+
+    if (ngx_http_file_cache_add_file(ctx, path) != NGX_OK) {
+        (void) ngx_http_file_cache_delete_file(ctx, path);
+    }
 
     if (++cache->files >= cache->loader_files) {
+        ngx_http_file_cache_loader_sleep(cache);
 
+    } else {
         ngx_time_update();
 
         elapsed = ngx_abs((ngx_msec_int_t) (ngx_current_msec - cache->last));
@@ -1275,52 +1290,23 @@ ngx_http_file_cache_loader_sleep(ngx_http_file_cache_t *cache)
                        "http file cache loader time elapsed: %M", elapsed);
 
         if (elapsed >= cache->loader_threshold) {
-
-            if (cache->loader_files > 1) {
-                cache->loader_files /= 2;
-                ngx_log_error(NGX_LOG_NOTICE, ngx_cycle->log, 0,
-                              "cache %V loader_files decreased to %ui",
-                              &cache->path->name, cache->loader_files);
-
-            } else {
-                cache->loader_sleep *= 2;
-                ngx_log_error(NGX_LOG_NOTICE, ngx_cycle->log, 0,
-                              "cache %V loader_sleep increased to %Mms",
-                              &cache->path->name, cache->loader_sleep);
-            }
+            ngx_http_file_cache_loader_sleep(cache);
         }
-
-        ngx_msleep(cache->loader_sleep);
-
-        ngx_time_update();
-
-        cache->last = ngx_current_msec;
-        cache->files = 0;
     }
 
     return (ngx_quit || ngx_terminate) ? NGX_ABORT : NGX_OK;
 }
 
 
-static ngx_int_t
-ngx_http_file_cache_noop(ngx_tree_ctx_t *ctx, ngx_str_t *path)
-{
-    return NGX_OK;
-}
-
-
-static ngx_int_t
-ngx_http_file_cache_manage_file(ngx_tree_ctx_t *ctx, ngx_str_t *path)
+static void
+ngx_http_file_cache_loader_sleep(ngx_http_file_cache_t *cache)
 {
-    ngx_http_file_cache_t  *cache;
-
-    cache = ctx->data;
+    ngx_msleep(cache->loader_sleep);
 
-    if (ngx_http_file_cache_add_file(ctx, path) != NGX_OK) {
-        (void) ngx_http_file_cache_delete_file(ctx, path);
-    }
+    ngx_time_update();
 
-    return ngx_http_file_cache_loader_sleep(cache);
+    cache->last = ngx_current_msec;
+    cache->files = 0;
 }