Skip to content

Commit 9851a1d

Browse files
committed
Clean md store objects
Clean md store objects once the max deleted objects reach the limit. Fixes: https://issues.redhat.com/browse/DFBUGS-1339 Signed-off-by: Vinayakswami Hariharmath <[email protected]>
1 parent 5aed4f5 commit 9851a1d

File tree

3 files changed

+27
-5
lines changed

3 files changed

+27
-5
lines changed

config.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -432,6 +432,7 @@ config.DB_CLEANER_BACK_TIME = 3 * 30 * 24 * 60 * 60 * 1000; // 3 months
432432
config.DB_CLEANER_DOCS_LIMIT = 1000;
433433
config.DB_CLEANER_MAX_TOTAL_DOCS = 10000;
434434

435+
config.MD_STORE_MAX_DELETED_OBJECTS_LIMIT = 100;
435436
/////////////////////
436437
// CLOUD RESOURCES //
437438
/////////////////////

src/server/bg_services/db_cleaner.js

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,23 +58,39 @@ async function clean_md_store(last_date_to_remove) {
5858
${total_objects_count} objects - Skipping...`);
5959
return;
6060
}
61+
const objects_to_remove = await clean_md_store_objects(last_date_to_remove, config.DB_CLEANER_DOCS_LIMIT);
62+
const blocks_to_remove = await clean_md_store_blocks(last_date_to_remove, config.DB_CLEANER_DOCS_LIMIT);
63+
const filtered_chunks = await clean_md_store_chunks(last_date_to_remove, config.DB_CLEANER_DOCS_LIMIT);
64+
65+
dbg.log0(`DB_CLEANER: removed ${objects_to_remove.length + blocks_to_remove.length + filtered_chunks.length} documents from md-store`);
66+
}
67+
68+
async function clean_md_store_objects(last_date_to_remove, limit) {
6169
dbg.log0('DB_CLEANER: checking md-store for documents deleted before', new Date(last_date_to_remove));
62-
const objects_to_remove = await MDStore.instance().find_deleted_objects(last_date_to_remove, config.DB_CLEANER_DOCS_LIMIT);
70+
const objects_to_remove = await MDStore.instance().find_deleted_objects(last_date_to_remove, limit);
6371
dbg.log2('DB_CLEANER: list objects:', objects_to_remove);
64-
if (objects_to_remove.length) {
72+
if (objects_to_remove.length > config.MD_STORE_MAX_DELETED_OBJECTS_LIMIT) {
6573
await P.map_with_concurrency(10, objects_to_remove, obj => db_delete_object_parts(obj));
6674
await MDStore.instance().db_delete_objects(objects_to_remove);
6775
}
68-
const blocks_to_remove = await MDStore.instance().find_deleted_blocks(last_date_to_remove, config.DB_CLEANER_DOCS_LIMIT);
76+
return objects_to_remove;
77+
}
78+
79+
async function clean_md_store_blocks(last_date_to_remove, limit) {
80+
const blocks_to_remove = await MDStore.instance().find_deleted_blocks(last_date_to_remove, limit);
6981
dbg.log2('DB_CLEANER: list blocks:', blocks_to_remove);
7082
if (blocks_to_remove.length) await MDStore.instance().db_delete_blocks(blocks_to_remove);
71-
const chunks_to_remove = await MDStore.instance().find_deleted_chunks(last_date_to_remove, config.DB_CLEANER_DOCS_LIMIT);
83+
return blocks_to_remove;
84+
}
85+
86+
async function clean_md_store_chunks(last_date_to_remove, limit) {
87+
const chunks_to_remove = await MDStore.instance().find_deleted_chunks(last_date_to_remove, limit);
7288
const filtered_chunks = chunks_to_remove.filter(async chunk =>
7389
!(await MDStore.instance().has_any_blocks_for_chunk(chunk)) &&
7490
!(await MDStore.instance().has_any_parts_for_chunk(chunk)));
7591
dbg.log2('DB_CLEANER: list chunks with no blocks and no parts to be removed from DB', filtered_chunks);
7692
if (filtered_chunks.length) await MDStore.instance().db_delete_chunks(filtered_chunks);
77-
dbg.log0(`DB_CLEANER: removed ${objects_to_remove.length + blocks_to_remove.length + filtered_chunks.length} documents from md-store`);
93+
return filtered_chunks;
7894
}
7995

8096
async function db_delete_object_parts(id) {
@@ -145,3 +161,4 @@ async function clean_system_store(last_date_to_remove) {
145161

146162
// EXPORTS
147163
exports.background_worker = background_worker;
164+
exports.clean_md_store_objects = clean_md_store_objects;

src/server/bg_services/objects_reclaimer.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ const MDStore = require('../object_services/md_store').MDStore;
77
const system_store = require('../system_services/system_store').get_instance();
88
const system_utils = require('../utils/system_utils');
99
const map_deleter = require('../object_services/map_deleter');
10+
const {clean_md_store_objects} = require('./db_cleaner');
1011
const P = require('../../util/promise');
1112

1213
class ObjectsReclaimer {
@@ -42,6 +43,9 @@ class ObjectsReclaimer {
4243
if (has_errors) {
4344
return config.OBJECT_RECLAIMER_ERROR_DELAY;
4445
}
46+
47+
await clean_md_store_objects(Date.now());
48+
4549
return config.OBJECT_RECLAIMER_BATCH_DELAY;
4650

4751
}

0 commit comments

Comments
 (0)