Merge branch 'cache-metadata' into staging

pull/1/head
ansuz 4 years ago
commit 646fdcc43e

@ -13,11 +13,19 @@ Data.getMetadataRaw = function (Env, channel /* channelName */, _cb) {
var cached = Env.metadata_cache[channel]; var cached = Env.metadata_cache[channel];
if (HK.isMetadataMessage(cached)) { if (HK.isMetadataMessage(cached)) {
Env.checkCache(channel);
return void cb(void 0, cached); return void cb(void 0, cached);
} }
Env.batchMetadata(channel, cb, function (done) { Env.batchMetadata(channel, cb, function (done) {
Env.computeMetadata(channel, done); Env.computeMetadata(channel, function (err, meta) {
if (!err && HK.isMetadataMessage(meta)) {
Env.metadata_cache[channel] = meta;
// clear metadata after a delay if nobody has joined the channel within 30s
Env.checkCache(channel);
}
done(err, meta);
});
}); });
}; };

@ -42,6 +42,8 @@ module.exports.create = function (config) {
metadata_cache: {}, metadata_cache: {},
channel_cache: {}, channel_cache: {},
cache_checks: {},
queueStorage: WriteQueue(), queueStorage: WriteQueue(),
queueDeletes: WriteQueue(), queueDeletes: WriteQueue(),
queueValidation: WriteQueue(), queueValidation: WriteQueue(),
@ -117,8 +119,14 @@ module.exports.create = function (config) {
} }
}()); }());
Env.checkCache = function (channel) {
var f = Env.cache_checks[channel] || Util.throttle(function () {
delete Env.cache_checks[channel];
if (Env.channel_cache[channel]) { return; }
delete Env.metadata_cache[channel];
}, 30000);
f();
};
(function () { (function () {
var custom = config.customLimits; var custom = config.customLimits;

Loading…
Cancel
Save