From 07c920bad5d3e23c674afac491880adc6ca69af6 Mon Sep 17 00:00:00 2001 From: Raul Ochoa Date: Tue, 14 Jul 2015 20:53:06 +0200 Subject: [PATCH] Use named map provider cache to retrieve providers --- lib/cartodb/cache/named_map_provider_cache.js | 24 +++++++++++++++++++ lib/cartodb/controllers/map.js | 1 + lib/cartodb/controllers/named_maps.js | 22 +++++------------ .../models/mapconfig/named_map_provider.js | 9 +++---- lib/cartodb/server.js | 10 ++++---- 5 files changed, 41 insertions(+), 25 deletions(-) create mode 100644 lib/cartodb/cache/named_map_provider_cache.js diff --git a/lib/cartodb/cache/named_map_provider_cache.js b/lib/cartodb/cache/named_map_provider_cache.js new file mode 100644 index 00000000..3acde0e3 --- /dev/null +++ b/lib/cartodb/cache/named_map_provider_cache.js @@ -0,0 +1,24 @@ +var NamedMapMapConfigProvider = require('../models/mapconfig/named_map_provider'); + +function NamedMapProviderCache(templateMaps, pgConnection, userLimitsApi, queryTablesApi) { + this.templateMaps = templateMaps; + this.pgConnection = pgConnection; + this.userLimitsApi = userLimitsApi; + this.queryTablesApi = queryTablesApi; +} + +module.exports = NamedMapProviderCache; + +NamedMapProviderCache.prototype.get = function(user, templateId, config, authToken, params) { + return new NamedMapMapConfigProvider( + this.templateMaps, + this.pgConnection, + this.userLimitsApi, + this.queryTablesApi, + user, + templateId, + config, + authToken, + params + ); +}; diff --git a/lib/cartodb/controllers/map.js b/lib/cartodb/controllers/map.js index 1daa4ac3..45f17797 100644 --- a/lib/cartodb/controllers/map.js +++ b/lib/cartodb/controllers/map.js @@ -186,6 +186,7 @@ MapController.prototype.instantiateTemplate = function(req, res, prepareParamsFn self.templateMaps, self.pgConnection, self.userLimitsApi, + self.queryTablesApi, cdbuser, req.params.template_id, templateParams, diff --git a/lib/cartodb/controllers/named_maps.js b/lib/cartodb/controllers/named_maps.js index 9b27ad4b..a0be85b7 100644 --- a/lib/cartodb/controllers/named_maps.js +++ b/lib/cartodb/controllers/named_maps.js @@ -4,20 +4,16 @@ var _ = require('underscore'); var NamedMapsCacheEntry = require('../cache/model/named_maps_entry'); var cors = require('../middleware/cors'); -var NamedMapMapConfigProvider = require('../models/mapconfig/named_map_provider'); var TablesCacheEntry = require('../cache/model/database_tables_entry'); -function NamedMapsController(app, pgConnection, templateMaps, tileBackend, previewBackend, surrogateKeysCache, - tablesExtentApi, userLimitsApi, queryTablesApi) { +function NamedMapsController(app, namedMapProviderCache, tileBackend, previewBackend, surrogateKeysCache, + tablesExtentApi) { this.app = app; - this.pgConnection = pgConnection; - this.templateMaps = templateMaps; + this.namedMapProviderCache = namedMapProviderCache; this.tileBackend = tileBackend; this.previewBackend = previewBackend; this.surrogateKeysCache = surrogateKeysCache; this.tablesExtentApi = tablesExtentApi; - this.userLimitsApi = userLimitsApi; - this.queryTablesApi = queryTablesApi; } module.exports = NamedMapsController; @@ -39,7 +35,7 @@ NamedMapsController.prototype.sendResponse = function(req, res, resource, header var dbName = req.params.dbname; step( function getAffectedTablesAndLastUpdatedTime() { - namedMapProvider.getAffectedTablesAndLastUpdatedTime(self.queryTablesApi, this); + namedMapProvider.getAffectedTablesAndLastUpdatedTime(this); }, function sendResponse(err, result) { req.profiler.done('affectedTables'); @@ -78,10 +74,7 @@ NamedMapsController.prototype.tile = function(req, res) { self.app.req2params(req, this); }, function getTile() { - namedMapProvider = new NamedMapMapConfigProvider( - self.templateMaps, - self.pgConnection, - self.userLimitsApi, + namedMapProvider = self.namedMapProviderCache.get( cdbUser, req.params.template_id, req.query.config, @@ -122,10 +115,7 @@ NamedMapsController.prototype.staticMap = function(req, res) { }, function getTemplate(err) { assert.ifError(err); - namedMapProvider = new NamedMapMapConfigProvider( - self.templateMaps, - self.pgConnection, - self.userLimitsApi, + namedMapProvider = self.namedMapProviderCache.get( cdbUser, req.params.template_id, req.query.config, diff --git a/lib/cartodb/models/mapconfig/named_map_provider.js b/lib/cartodb/models/mapconfig/named_map_provider.js index c9970cef..f84e5bbf 100644 --- a/lib/cartodb/models/mapconfig/named_map_provider.js +++ b/lib/cartodb/models/mapconfig/named_map_provider.js @@ -10,11 +10,12 @@ var templateName = require('../../backends/template_maps').templateName; * @constructor * @type {NamedMapMapConfigProvider} */ -function NamedMapMapConfigProvider(templateMaps, pgConnection, userLimitsApi, owner, templateId, config, authToken, - params) { +function NamedMapMapConfigProvider(templateMaps, pgConnection, userLimitsApi, queryTablesApi, + owner, templateId, config, authToken, params) { this.templateMaps = templateMaps; this.pgConnection = pgConnection; this.userLimitsApi = userLimitsApi; + this.queryTablesApi = queryTablesApi; this.owner = owner; this.templateName = templateName(templateId); this.config = config; @@ -201,7 +202,7 @@ NamedMapMapConfigProvider.prototype.getTemplateName = function() { return this.templateName; }; -NamedMapMapConfigProvider.prototype.getAffectedTablesAndLastUpdatedTime = function(queryTablesApi, callback) { +NamedMapMapConfigProvider.prototype.getAffectedTablesAndLastUpdatedTime = function(callback) { var self = this; if (this.affectedTablesAndLastUpdate !== null) { @@ -220,7 +221,7 @@ NamedMapMapConfigProvider.prototype.getAffectedTablesAndLastUpdatedTime = functi }, function getAffectedTables(err, sql) { assert.ifError(err); - queryTablesApi.getAffectedTablesAndLastUpdatedTime(self.owner, sql, this); + self.queryTablesApi.getAffectedTablesAndLastUpdatedTime(self.owner, sql, this); }, function finish(err, result) { self.affectedTablesAndLastUpdate = result; diff --git a/lib/cartodb/server.js b/lib/cartodb/server.js index 11d88361..ebb1affd 100644 --- a/lib/cartodb/server.js +++ b/lib/cartodb/server.js @@ -21,6 +21,7 @@ var QueryTablesApi = require('./api/query_tables_api'); var UserLimitsApi = require('./api/user_limits_api'); var AuthApi = require('./api/auth_api'); var LayergroupAffectedTablesCache = require('./cache/layergroup_affected_tables'); +var NamedMapProviderCache = require('./cache/named_map_provider_cache'); var PgQueryRunner = require('./backends/pg_query_runner'); var PgConnection = require('./backends/pg_connection'); @@ -165,6 +166,8 @@ module.exports = function(serverOptions) { var layergroupAffectedTablesCache = new LayergroupAffectedTablesCache(); app.layergroupAffectedTablesCache = layergroupAffectedTablesCache; + var namedMapProviderCache = new NamedMapProviderCache(templateMaps, pgConnection, userLimitsApi, queryTablesApi); + var authApi = new AuthApi(pgConnection, metadataBackend, mapStore, templateMaps); app.findStatusCode = function(err) { @@ -215,14 +218,11 @@ module.exports = function(serverOptions) { new controller.NamedMaps( app, - pgConnection, - templateMaps, + namedMapProviderCache, tileBackend, previewBackend, surrogateKeysCache, - tablesExtentApi, - userLimitsApi, - queryTablesApi + tablesExtentApi ).register(app); new controller.NamedMapsAdmin(app, templateMaps, authApi).register(app);