This change adds support for disabling datasets, such that specific files are not loaded into memory when running OSRM. This enables users to not pay the memory cost for features they do not intend to use. Initially, there are two options: - ROUTE_GEOMETRY, for disabling overview, steps, annotations and waypoints. - ROUTE_STEPS, for disabling steps only. Attempts to query features for which the datasets are disabled will lead to a DisabledDatasetException being returned.
67 lines
2.2 KiB
JavaScript
67 lines
2.2 KiB
JavaScript
'use strict';
|
|
|
|
var d3 = require('d3-queue');
|
|
var path = require('path');
|
|
var mkdirp = require('mkdirp');
|
|
var rimraf = require('rimraf');
|
|
var OSM = require('../lib/osm');
|
|
var OSRMLoader = require('../lib/osrm_loader');
|
|
|
|
module.exports = function () {
|
|
this.registerHandler('BeforeFeatures', {timeout: 30000}, (features, callback) => {
|
|
this.osrmLoader = new OSRMLoader(this);
|
|
this.OSMDB = new OSM.DB();
|
|
|
|
let queue = d3.queue(1);
|
|
queue.defer(this.initializeEnv.bind(this));
|
|
queue.defer(this.verifyOSRMIsNotRunning.bind(this));
|
|
queue.defer(this.verifyExistenceOfBinaries.bind(this));
|
|
queue.defer(this.initializeCache.bind(this));
|
|
queue.defer(this.setupFeatures.bind(this, features));
|
|
queue.awaitAll(callback);
|
|
});
|
|
|
|
this.BeforeFeature((feature, callback) => {
|
|
this.profile = this.OSRM_PROFILE || this.DEFAULT_PROFILE;
|
|
this.profileFile = path.join(this.PROFILES_PATH, this.profile + '.lua');
|
|
this.setupFeatureCache(feature);
|
|
callback();
|
|
});
|
|
|
|
this.Before((scenario, callback) => {
|
|
this.osrmLoader.setLoadMethod(this.DEFAULT_LOAD_METHOD);
|
|
this.setGridSize(this.DEFAULT_GRID_SIZE);
|
|
this.setOrigin(this.DEFAULT_ORIGIN);
|
|
this.queryParams = {};
|
|
this.extractArgs = '';
|
|
this.contractArgs = '';
|
|
this.partitionArgs = '';
|
|
this.customizeArgs = '';
|
|
this.loaderArgs = '';
|
|
this.environment = Object.assign(this.DEFAULT_ENVIRONMENT);
|
|
this.resetOSM();
|
|
|
|
this.scenarioID = this.getScenarioID(scenario);
|
|
this.setupScenarioCache(this.scenarioID);
|
|
|
|
// setup output logging
|
|
let logDir = path.join(this.LOGS_PATH, this.featureID);
|
|
this.scenarioLogFile = path.join(logDir, this.scenarioID) + '.log';
|
|
d3.queue(1)
|
|
.defer(mkdirp, logDir)
|
|
.defer(rimraf, this.scenarioLogFile)
|
|
.awaitAll(callback);
|
|
// uncomment to get path to logfile
|
|
// console.log(' Writing logging output to ' + this.scenarioLogFile);
|
|
});
|
|
|
|
this.After((scenario, callback) => {
|
|
this.resetOptionsOutput();
|
|
callback();
|
|
});
|
|
|
|
this.AfterFeatures((features, callback) => {
|
|
callback();
|
|
});
|
|
};
|