- Extract getOnTileErrorStrategy to a module - Stop using MapStore from windshaft while testing and create a custom one insteadremotes/origin/node-12
parent
24efc37737
commit
a8fb51ba25
@ -0,0 +1,37 @@
|
||||
'use strict';
|
||||
|
||||
const path = require('path');
|
||||
const timeoutErrorTilePath = path.join(__dirname, '/../../assets/render-timeout-fallback.png');
|
||||
const timeoutErrorTile = require('fs').readFileSync(timeoutErrorTilePath, { encoding: null });
|
||||
|
||||
module.exports = function getOnTileErrorStrategy ({ enabled }) {
|
||||
let onTileErrorStrategy;
|
||||
|
||||
if (enabled !== false) {
|
||||
onTileErrorStrategy = async function onTileErrorStrategy$TimeoutTile (err, format) {
|
||||
function isRenderTimeoutError (err) {
|
||||
return err.message === 'Render timed out';
|
||||
}
|
||||
|
||||
function isDatasourceTimeoutError (err) {
|
||||
return err.message && err.message.match(/canceling statement due to statement timeout/i);
|
||||
}
|
||||
|
||||
function isTimeoutError (err) {
|
||||
return isRenderTimeoutError(err) || isDatasourceTimeoutError(err);
|
||||
}
|
||||
|
||||
function isRasterFormat (format) {
|
||||
return format === 'png' || format === 'jpg';
|
||||
}
|
||||
|
||||
if (isTimeoutError(err) && isRasterFormat(format)) {
|
||||
return { buffer: timeoutErrorTile, headers: { 'Content-Type': 'image/png' }, stats: {} };
|
||||
} else {
|
||||
throw err;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
return onTileErrorStrategy;
|
||||
};
|
@ -0,0 +1,38 @@
|
||||
'use strict';
|
||||
|
||||
const { MapConfig } = require('windshaft').model;
|
||||
|
||||
// Windshaft no longer provides the MapStore class to be used just for testing purposes
|
||||
// This class provides just the method needed to load a map-config from redis
|
||||
// It should be replaced by a new module @carto/map-config-storage (to be published)
|
||||
module.exports = class MapStore {
|
||||
constructor (pool) {
|
||||
this.pool = pool;
|
||||
}
|
||||
|
||||
load (token, callback) {
|
||||
const db = 0;
|
||||
this.pool.acquire(db, (err, client) => {
|
||||
if (err) {
|
||||
return callback(err);
|
||||
}
|
||||
|
||||
client.get(`map_cfg|${token}`, (err, data) => {
|
||||
this.pool.release(db, client);
|
||||
|
||||
if (err) {
|
||||
return callback(err);
|
||||
}
|
||||
|
||||
let mapConfig;
|
||||
try {
|
||||
mapConfig = MapConfig.create(JSON.parse(data));
|
||||
} catch (err) {
|
||||
return callback(err);
|
||||
}
|
||||
|
||||
return callback(null, mapConfig);
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
Loading…
Reference in new issue