Skip to content

Commit 50e4d2c

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 50e4d2c

File tree

2 files changed

+14
-9
lines changed

2 files changed

+14
-9
lines changed

config.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,7 @@ 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.READ_NEW_DATA_CONCURRENCY = parseInt(process.env.READ_NEW_DATA_CONCURRENCY, 10) || 5;
253254

254255
//////////////////////////
255256
// MD AGGREGATOR CONFIG //

src/server/system_services/system_store.js

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,7 @@ 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.READ_NEW_DATA_CONCURRENCY = config.READ_NEW_DATA_CONCURRENCY || 5;
354355
this._load_serial = new semaphore.Semaphore(1, { warning_timeout: this.START_REFRESH_THRESHOLD });
355356
for (const col of COLLECTIONS) {
356357
db_client.instance().define_collection(col);
@@ -407,30 +408,33 @@ class SystemStore extends EventEmitter {
407408
}
408409

409410
async load(since) {
411+
const new_data = new SystemStoreData();
412+
410413
// serializing load requests since we have to run a fresh load after the previous one will finish
411414
// because it might not see the latest changes if we don't reload right after make_changes.
412415
return this._load_serial.surround(async () => {
413416
try {
414-
dbg.log3('SystemStore: loading ...');
417+
dbg.log3('SystemStore: loading ... this.last_update_time =', this.last_update_time, ", since =", since);
415418

416419
// If we get a load request with an timestamp older then our last update time
417420
// we ensure we load everyting from that timestamp by updating our last_update_time.
418421
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');
422+
dbg.log0('SystemStore.load: Got load request with a timestamp', since, 'older than my last update time', this.last_update_time);
420423
this.last_update_time = since;
421424
}
422425
this.master_key_manager.load_root_key();
423-
const new_data = new SystemStoreData();
424426
let millistamp = time_utils.millistamp();
425427
await this._register_for_changes();
426428
await this._read_new_data_from_db(new_data);
427429
const secret = await os_utils.read_server_secret();
428430
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-
}));
431+
if (dbg.should_log(1)) { //param should match below logs' level
432+
dbg.log1('SystemStore: fetch took', time_utils.millitook(millistamp));
433+
dbg.log1('SystemStore: fetch size', size_utils.human_size(JSON.stringify(new_data).length));
434+
dbg.log1('SystemStore: fetch data', util.inspect(new_data, {
435+
depth: 4
436+
}));
437+
}
434438
this.old_db_data = this._update_data_from_new(this.old_db_data || {}, new_data);
435439
this.data = _.cloneDeep(this.old_db_data);
436440
millistamp = time_utils.millistamp();
@@ -506,7 +510,7 @@ class SystemStore extends EventEmitter {
506510
}
507511
};
508512
await db_client.instance().connect();
509-
await P.map(COLLECTIONS, async col => {
513+
await P.map_with_concurrency(this.READ_NEW_DATA_CONCURRENCY, COLLECTIONS, async col => {
510514
const res = await db_client.instance().collection(col.name)
511515
.find(newly_updated_query, {
512516
projection: { last_update: 0 }

0 commit comments

Comments
 (0)