]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
kr_cache_gc: increasing mapsize if the cache is full
authorLibor Peltan <libor.peltan@nic.cz>
Fri, 27 Apr 2018 13:15:11 +0000 (15:15 +0200)
committerPetr Špaček <petr.spacek@nic.cz>
Wed, 10 Jul 2019 13:59:20 +0000 (15:59 +0200)
utils/kr_cache_gc/kr_cache_gc.c

index 8e7d9e41003215a50a045670d6021f1e7d0d4754..bbcd23f73fdd4dd6b16c7f824f60a0a3b63e7695 100644 (file)
@@ -167,6 +167,8 @@ int kr_cache_gc(kr_cache_gc_cfg_t *cfg)
        struct kr_cdb_opts opts = { cfg->cache_path, cache_size };
        struct kr_cache krc = { 0 };
 
+open_kr_cache:
+       ;
        int ret = kr_cache_open(&krc, NULL, &opts, NULL);
        if (ret || krc.db == NULL) {
                printf("Error opening Resolver cache (%s).\n", kr_strerror(ret));
@@ -189,7 +191,16 @@ int kr_cache_gc(kr_cache_gc_cfg_t *cfg)
        }
 
        size_t real_size = knot_db_lmdb_get_mapsize(db), usage = knot_db_lmdb_get_usage(db);
-       printf("Cache size: %zu, Usage: %zu (%.2lf%%)\n", real_size, usage, (double)usage / real_size * 100.0);
+       double usage_perc = (double)usage / real_size * 100.0;
+       printf("Cache size: %zu, Usage: %zu (%.2lf%%)\n", real_size, usage, usage_perc);
+
+       if (usage_perc > 90.0) {
+               free(db);
+               kr_cache_close(&krc);
+               cache_size += cache_size / 10;
+               opts.maxsize = cache_size;
+               goto open_kr_cache;
+       }
 
        gc_timer_start(&timer_analyze);