Skip to content

Commit 38341fc

Browse files
committed
system store - reduce load time (part of performance effort 4.20)
Signed-off-by: Amit Prinz Setter <alphaprinz@gmail.com>
1 parent 4b1f6f5 commit 38341fc

File tree

2 files changed

+22
-9
lines changed

2 files changed

+22
-9
lines changed

config.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,8 @@ config.INTERNAL_STORAGE_POOL_NAME = 'system-internal-storage-pool';
250250
// config.SPILLOVER_TIER_NAME = 'bucket-spillover-tier';
251251
config.ALLOW_BUCKET_CREATE_ON_INTERNAL = true;
252252
config.BUCKET_AUTOCONF_TIER2_ENABLED = false;
253+
config.LOAD_FRESH_THRESHOLD = parseInt(process.env.LOAD_FRESH_THRESHOLD, 10) || 100;
254+
config.READ_NEW_DATA_CONCURRENCY = parseInt(process.env.READ_NEW_DATA_CONCURRENCY, 10) || 5;
253255

254256
//////////////////////////
255257
// MD AGGREGATOR CONFIG //

src/server/system_services/system_store.js

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,8 @@ class SystemStore extends EventEmitter {
351351
this.is_finished_initial_load = false;
352352
this.START_REFRESH_THRESHOLD = 10 * 60 * 1000;
353353
this.FORCE_REFRESH_THRESHOLD = 60 * 60 * 1000;
354+
this.LOAD_FRESH_THRESHOLD = config.LOAD_FRESH_THRESHOLD || 100;
355+
this.READ_NEW_DATA_CONCURRENCY = config.READ_NEW_DATA_CONCURRENCY || 5;
354356
this._load_serial = new semaphore.Semaphore(1, { warning_timeout: this.START_REFRESH_THRESHOLD });
355357
for (const col of COLLECTIONS) {
356358
db_client.instance().define_collection(col);
@@ -407,30 +409,39 @@ class SystemStore extends EventEmitter {
407409
}
408410

409411
async load(since) {
412+
/*const now_diff = Date.now() - this.last_update_time;
413+
if (now_diff < this.LOAD_FRESH_THRESHOLD) {
414+
dbg.log0("fresh enough, skipping load this.last_update_time =", this.last_update_time, ", since =", since, ", now diff =", now_diff);
415+
return this.data;
416+
}*/
417+
418+
const new_data = new SystemStoreData();
419+
410420
// serializing load requests since we have to run a fresh load after the previous one will finish
411421
// because it might not see the latest changes if we don't reload right after make_changes.
412422
return this._load_serial.surround(async () => {
413423
try {
414-
dbg.log3('SystemStore: loading ...');
424+
dbg.log3('SystemStore: loading ... this.last_update_time =', this.last_update_time, ", since =", since/*, ", now diff = ", now_diff*/);
415425

416426
// If we get a load request with an timestamp older then our last update time
417427
// we ensure we load everyting from that timestamp by updating our last_update_time.
418428
if (!_.isUndefined(since) && since < this.last_update_time) {
419-
dbg.log0('SystemStore.load: Got load request with a timestamp older then my last update time');
429+
dbg.log0('SystemStore.load: Got load request with a timestamp', since, 'older than my last update time', this.last_update_time);
420430
this.last_update_time = since;
421431
}
422432
this.master_key_manager.load_root_key();
423-
const new_data = new SystemStoreData();
424433
let millistamp = time_utils.millistamp();
425434
await this._register_for_changes();
426435
await this._read_new_data_from_db(new_data);
427436
const secret = await os_utils.read_server_secret();
428437
this._server_secret = secret;
429-
dbg.log1('SystemStore: fetch took', time_utils.millitook(millistamp));
430-
dbg.log1('SystemStore: fetch size', size_utils.human_size(JSON.stringify(new_data).length));
431-
dbg.log1('SystemStore: fetch data', util.inspect(new_data, {
432-
depth: 4
433-
}));
438+
if (dbg.should_log(1)) { //param should match below logs' level
439+
dbg.log1('SystemStore: fetch took', time_utils.millitook(millistamp));
440+
dbg.log1('SystemStore: fetch size', size_utils.human_size(JSON.stringify(new_data).length));
441+
dbg.log1('SystemStore: fetch data', util.inspect(new_data, {
442+
depth: 4
443+
}));
444+
}
434445
this.old_db_data = this._update_data_from_new(this.old_db_data || {}, new_data);
435446
this.data = _.cloneDeep(this.old_db_data);
436447
millistamp = time_utils.millistamp();
@@ -506,7 +517,7 @@ class SystemStore extends EventEmitter {
506517
}
507518
};
508519
await db_client.instance().connect();
509-
await P.map(COLLECTIONS, async col => {
520+
await P.map_with_concurrency(this.READ_NEW_DATA_CONCURRENCY, COLLECTIONS, async col => {
510521
const res = await db_client.instance().collection(col.name)
511522
.find(newly_updated_query, {
512523
projection: { last_update: 0 }

0 commit comments

Comments
 (0)