diff options
Diffstat (limited to 'lib/commit.c')
-rw-r--r-- | lib/commit.c | 43 |
1 files changed, 36 insertions, 7 deletions
diff --git a/lib/commit.c b/lib/commit.c index 45d4d73..b61b05b 100644 --- a/lib/commit.c +++ b/lib/commit.c @@ -1,21 +1,50 @@ #include "collect.h" #include "main.h" #include "sql.h" +#include "util.h" #include <zstd.h> static void do_gc(sqlite3 *db, State *s) { - uint32_t cur_size = s->header->raw_size; + int64_t cur_size = (int64_t)s->header->raw_size; pthread_mutex_lock(&s->global->storage_consumed_lock); - uint32_t remain_size = + int64_t remain_size = s->global->storage_budget - s->global->storage_consumed - cur_size; - uint32_t gc_size = -remain_size + cur_size * g_gc_rate; - if (gc_size >= s->global->storage_consumed) - gc_size = s->global->storage_consumed; + int64_t gc_size = 0; + if (remain_size <= 0) { + gc_size = -remain_size + cur_size * g_gc_rate; + if (gc_size >= s->global->storage_consumed) + gc_size = s->global->storage_consumed * g_gc_cap; + else if (gc_size >= s->global->storage_budget * g_gc_cap) + gc_size = s->global->storage_budget * g_gc_cap; + } + DEBUG("do_gc: gc_size %.2f KB, remain %.2f KB, cur_size, %.2f KB\n", + gc_size / 1024.0, remain_size / 1024.0, cur_size / 1024.0); pthread_mutex_unlock(&s->global->storage_consumed_lock); - if (remain_size <= 0) - db_delete_oldest_bytes(db, gc_size); + uint32_t gc_count = 0; + if (gc_size > 0) { + gc_count = db_delete_oldest_bytes(db, gc_size); + db_vacuum(db); + } + + int64_t dbsize = check_file_size(s->global->storage_file); + pthread_mutex_lock(&s->global->storage_consumed_lock); + s->global->storage_consumed = dbsize; + pthread_mutex_unlock(&s->global->storage_consumed_lock); + + if (gc_count) { + INFO("gc: storage budget: %.2f MB, storage consumed: %.2f MB, (%.2f " + "MB/%d entries) vacuumed", + s->global->storage_budget / 1024.0 / 1024.0, + s->global->storage_consumed / 1024.0 / 1024.0, + gc_size / 1024.0 / 1024.0, gc_count); + } else { + DEBUG("gc: storage budget: %.2f MB, storage consumed: %.2f MB, skip " + "vacuuming", + s->global->storage_budget / 1024.0 / 1024.0, + s->global->storage_consumed / 1024.0 / 1024.0); + } } static int commit_lz4(State *s, void **buf) { |