From: Libor Peltan Date: Fri, 27 Apr 2018 13:15:11 +0000 (+0200) Subject: kr_cache_gc: increasing mapsize if the cache is full X-Git-Tag: v4.1.0^2~39 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=34b3dde4af17db83e0414e61b85d60b3d3e28447;p=thirdparty%2Fknot-resolver.git kr_cache_gc: increasing mapsize if the cache is full --- diff --git a/utils/kr_cache_gc/kr_cache_gc.c b/utils/kr_cache_gc/kr_cache_gc.c index 8e7d9e410..bbcd23f73 100644 --- a/utils/kr_cache_gc/kr_cache_gc.c +++ b/utils/kr_cache_gc/kr_cache_gc.c @@ -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);