dont run intervals stacked up
parent
dbf92ea0c6
commit
1be78e4cd3
|
|
@ -1338,19 +1338,70 @@
|
||||||
this.databases.push(arguments[i]);
|
this.databases.push(arguments[i]);
|
||||||
}
|
}
|
||||||
this.deltas = new Deltas(this.cache());
|
this.deltas = new Deltas(this.cache());
|
||||||
this.intervals = [];
|
|
||||||
this.scheduleSync();
|
this.scheduleSync();
|
||||||
this.syncCacheWithPrimary();
|
this.syncIntervalCacheWithPrimary();
|
||||||
}
|
}
|
||||||
|
|
||||||
syncCacheWithPrimary()
|
redundantSyncInterval(key)
|
||||||
|
{
|
||||||
|
let last_run = this.intervals_last_run[key];
|
||||||
|
let now = Date.now();
|
||||||
|
let redundant = last_run != undefined && now - last_run < 1000;
|
||||||
|
console.log(`redundant ${key}? last=${last_run}, now=${now}, redundant=${redundant}`);
|
||||||
|
if (!redundant)
|
||||||
|
this.intervals_last_run[key] = now;
|
||||||
|
return redundant;
|
||||||
|
}
|
||||||
|
|
||||||
|
syncIntervalDeltas()
|
||||||
|
{
|
||||||
|
if (!this.redundantSyncInterval("syncIntervalDeltas"))
|
||||||
|
return;
|
||||||
|
this._syncIntervalDeltas();
|
||||||
|
}
|
||||||
|
|
||||||
|
_syncIntervalDeltas()
|
||||||
|
{
|
||||||
|
var n = this.pendingSyncCount();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
this.deltas.popEach((key) => {
|
||||||
|
console.log("syncing: " + key);
|
||||||
|
this.replicate(key);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
catch (e)
|
||||||
|
{
|
||||||
|
console.log("failed to sync: " + e);
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
this.writePendingSyncCount();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
syncIntervalCacheWithPrimary()
|
||||||
|
{
|
||||||
|
if (!this.redundantSyncInterval("syncIntervalCacheWithPrimary"))
|
||||||
|
return;
|
||||||
|
this._syncIntervalCacheWithPrimary();
|
||||||
|
}
|
||||||
|
|
||||||
|
_syncIntervalCacheWithPrimary()
|
||||||
{
|
{
|
||||||
if (this.pendingSyncCount())
|
if (this.pendingSyncCount())
|
||||||
return;
|
return;
|
||||||
this.syncAWithB(this.cache(), this.primary());
|
this.syncAWithB(this.cache(), this.primary());
|
||||||
}
|
}
|
||||||
|
|
||||||
syncReplicasWithCache()
|
syncIntervalReplicasWithCache()
|
||||||
|
{
|
||||||
|
if (!this.redundantSyncInterval("syncIntervalReplicasWithCache"))
|
||||||
|
return;
|
||||||
|
this._syncIntervalReplicasWithCache();
|
||||||
|
}
|
||||||
|
|
||||||
|
_syncIntervalReplicasWithCache()
|
||||||
{
|
{
|
||||||
this.replicas().slice(1).forEach((replica) => {
|
this.replicas().slice(1).forEach((replica) => {
|
||||||
this.syncAWithB(replica, this.cache());
|
this.syncAWithB(replica, this.cache());
|
||||||
|
|
@ -1383,43 +1434,26 @@
|
||||||
|
|
||||||
scheduleSync()
|
scheduleSync()
|
||||||
{
|
{
|
||||||
|
this.close();
|
||||||
this.intervals.push(
|
this.intervals.push(
|
||||||
setInterval(() => { this.syncDeltas(); }, 10 * 1000)
|
setInterval(() => { this.syncIntervalDeltas(); }, 10 * 1000)
|
||||||
);
|
);
|
||||||
this.intervals.push(
|
this.intervals.push(
|
||||||
setInterval(() => { this.syncCacheWithPrimary(); }, 120 * 1000)
|
setInterval(() => { this.syncIntervalCacheWithPrimary(); }, 120 * 1000)
|
||||||
);
|
);
|
||||||
this.intervals.push(
|
this.intervals.push(
|
||||||
setInterval(() => { this.syncReplicasWithCache(); }, 123 * 1000)
|
setInterval(() => { this.syncIntervalReplicasWithCache(); }, 123 * 1000)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
close()
|
close()
|
||||||
{
|
{
|
||||||
this.intervals.forEach((i) => {
|
if (this.intervals)
|
||||||
clearInterval(i);
|
this.intervals.forEach((i) => {
|
||||||
});
|
clearInterval(i);
|
||||||
this.intervals = [];
|
|
||||||
}
|
|
||||||
|
|
||||||
syncDeltas()
|
|
||||||
{
|
|
||||||
var n = this.pendingSyncCount();
|
|
||||||
try
|
|
||||||
{
|
|
||||||
this.deltas.popEach((key) => {
|
|
||||||
console.log("syncing: " + key);
|
|
||||||
this.replicate(key);
|
|
||||||
});
|
});
|
||||||
}
|
this.intervals = [];
|
||||||
catch (e)
|
this.intervals_last_run = {};
|
||||||
{
|
|
||||||
console.log("failed to sync: " + e);
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
this.writePendingSyncCount();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pendingSyncCount()
|
pendingSyncCount()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue