Adds lru cache for layergroups and named maps mapconfig provider
This commit is contained in:
+7
-5
@@ -1,20 +1,22 @@
|
||||
var LruCache = require('lru-cache');
|
||||
|
||||
function LayergroupAffectedTables() {
|
||||
// layergroupId -> affected tables cache
|
||||
this.cache = {};
|
||||
// dbname + layergroupId -> affected tables cache
|
||||
this.cache = new LruCache({ max: 2000 });
|
||||
}
|
||||
|
||||
module.exports = LayergroupAffectedTables;
|
||||
|
||||
LayergroupAffectedTables.prototype.hasAffectedTables = function(dbName, layergroupId) {
|
||||
return this.cache.hasOwnProperty(createKey(dbName, layergroupId));
|
||||
return this.cache.has(createKey(dbName, layergroupId));
|
||||
};
|
||||
|
||||
LayergroupAffectedTables.prototype.set = function(dbName, layergroupId, affectedTables) {
|
||||
this.cache[createKey(dbName, layergroupId)] = affectedTables;
|
||||
this.cache.set(createKey(dbName, layergroupId), affectedTables);
|
||||
};
|
||||
|
||||
LayergroupAffectedTables.prototype.get = function(dbName, layergroupId) {
|
||||
return this.cache[createKey(dbName, layergroupId)];
|
||||
return this.cache.get(createKey(dbName, layergroupId));
|
||||
};
|
||||
|
||||
function createKey(dbName, layergroupId) {
|
||||
|
||||
+9
-8
@@ -1,26 +1,26 @@
|
||||
var NamedMapMapConfigProvider = require('../models/mapconfig/named_map_provider');
|
||||
var templateName = require('../backends/template_maps').templateName;
|
||||
|
||||
var LruCache = require("lru-cache");
|
||||
|
||||
function NamedMapProviderCache(templateMaps, pgConnection, userLimitsApi, queryTablesApi) {
|
||||
this.templateMaps = templateMaps;
|
||||
this.pgConnection = pgConnection;
|
||||
this.userLimitsApi = userLimitsApi;
|
||||
this.queryTablesApi = queryTablesApi;
|
||||
|
||||
this.providerCache = {};
|
||||
this.providerCache = new LruCache({ max: 2000 });
|
||||
}
|
||||
|
||||
module.exports = NamedMapProviderCache;
|
||||
|
||||
NamedMapProviderCache.prototype.get = function(user, templateId, config, authToken, params) {
|
||||
var namedMapKey = createNamedMapKey(user, templateId);
|
||||
if (!this.providerCache.hasOwnProperty(namedMapKey)) {
|
||||
this.providerCache[namedMapKey] = {};
|
||||
}
|
||||
var namedMapProviders = this.providerCache.get(namedMapKey) || {};
|
||||
|
||||
var providerKey = createProviderKey(config, authToken);
|
||||
if (!this.providerCache[namedMapKey].hasOwnProperty(providerKey)) {
|
||||
this.providerCache[namedMapKey][providerKey] = new NamedMapMapConfigProvider(
|
||||
if (!namedMapProviders.hasOwnProperty(providerKey)) {
|
||||
namedMapProviders[providerKey] = new NamedMapMapConfigProvider(
|
||||
this.templateMaps,
|
||||
this.pgConnection,
|
||||
this.userLimitsApi,
|
||||
@@ -31,13 +31,14 @@ NamedMapProviderCache.prototype.get = function(user, templateId, config, authTok
|
||||
authToken,
|
||||
params
|
||||
);
|
||||
this.providerCache.set(namedMapKey, namedMapProviders);
|
||||
}
|
||||
|
||||
return this.providerCache[namedMapKey][providerKey];
|
||||
return namedMapProviders[providerKey];
|
||||
};
|
||||
|
||||
NamedMapProviderCache.prototype.invalidate = function(user, templateId) {
|
||||
delete this.providerCache[createNamedMapKey(user, templateId)];
|
||||
this.providerCache.del(createNamedMapKey(user, templateId));
|
||||
};
|
||||
|
||||
function createNamedMapKey(user, templateId) {
|
||||
|
||||
Generated
+5
@@ -460,6 +460,11 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"lru-cache": {
|
||||
"version": "2.6.5",
|
||||
"from": "lru-cache@",
|
||||
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.5.tgz"
|
||||
},
|
||||
"lzma": {
|
||||
"version": "1.3.7",
|
||||
"from": "lzma@~1.3.7",
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
"cartodb-psql": "~0.4.0",
|
||||
"fastly-purge": "~1.0.0",
|
||||
"redis-mpool": "~0.4.0",
|
||||
"lru-cache": "2.6.5",
|
||||
"lzma": "~1.3.7",
|
||||
"log4js": "https://github.com/CartoDB/log4js-node/tarball/cdb"
|
||||
},
|
||||
|
||||
@@ -346,7 +346,7 @@ describe('tests from old api translated to multilayer', function() {
|
||||
};
|
||||
|
||||
// reset internal cacheChannel cache
|
||||
server.layergroupAffectedTablesCache.cache = {};
|
||||
server.layergroupAffectedTablesCache.cache.reset();
|
||||
|
||||
assert.response(server,
|
||||
{
|
||||
|
||||
@@ -21,7 +21,7 @@ var server = new CartodbWindshaft(serverOptions);
|
||||
server.setMaxListeners(0);
|
||||
|
||||
describe('template_api', function() {
|
||||
server.layergroupAffectedTablesCache.cache = {};
|
||||
server.layergroupAffectedTablesCache.cache.reset();
|
||||
|
||||
var redis_client = redis.createClient(global.environment.redis.port);
|
||||
|
||||
@@ -1225,7 +1225,7 @@ describe('template_api', function() {
|
||||
assert.ok(cc);
|
||||
assert.ok(cc.match, /ciao/, cc);
|
||||
// hack simulating restart...
|
||||
server.layergroupAffectedTablesCache.cache = {}; // need to clean channel cache
|
||||
server.layergroupAffectedTablesCache.cache.reset(); // need to clean channel cache
|
||||
var get_request = {
|
||||
url: '/api/v1/map/' + layergroupid + ':cb1/0/0/0/1.json.torque?auth_token=valid1',
|
||||
method: 'GET',
|
||||
|
||||
Reference in New Issue
Block a user