DBENGINE v2 - improvements part 4 (#14285)
do not lock the entire datafile list while a datafile is being deleted
Costa Tsaousis committed
Jan 17, 2023 at 21:14 UTC
62d70dc8ecee28a9bfd57b9527ad34d3e37d2a7a
1 file changed
+2
-2
database/engine/rrdengine.c
+2
-2
@@ -1231,6 +1231,8 @@ static void datafile_delete(struct rrdengine_instance *ctx, struct rrdengine_dat
1231
char path[RRDENG_PATH_MAX];
1232
1233
uv_rwlock_wrlock(&ctx->datafiles.rwlock);
1234
+ datafile_list_delete_unsafe(ctx, datafile);
1235
+ uv_rwlock_wrunlock(&ctx->datafiles.rwlock);
1236
1237
journal_file = datafile->journalfile;
1238
datafile_bytes = datafile->pos;
@@ -1238,7 +1240,6 @@ static void datafile_delete(struct rrdengine_instance *ctx, struct rrdengine_dat
1240
deleted_bytes = journalfile_v2_data_size_get(journal_file);
1241
1242
info("DBENGINE: deleting data and journal files to maintain disk quota");
1241
- datafile_list_delete_unsafe(ctx, datafile);
1243
ret = journalfile_destroy_unsafe(journal_file, datafile);
1244
if (!ret) {
1245
journalfile_generate_path(datafile, path, sizeof(path));
@@ -1258,7 +1259,6 @@ static void datafile_delete(struct rrdengine_instance *ctx, struct rrdengine_dat
1259
1260
ctx->disk_space -= deleted_bytes;
1261
info("DBENGINE: reclaimed %u bytes of disk space.", deleted_bytes);
1261
- uv_rwlock_wrunlock(&ctx->datafiles.rwlock);
1262
1263
rrdcontext_db_rotation();
1264
}