Added configuration to set a max-concurrency cap

pull/51/head
Piero Toffanin 2018-11-28 16:27:03 -05:00
rodzic c9d82e13bd
commit 1a274d55f7
3 zmienionych plików z 33 dodań i 5 usunięć

Wyświetl plik

@ -45,6 +45,7 @@ Options:
--s3_access_key <key> S3 access key, required if --s3_endpoint is set. (default: none) --s3_access_key <key> S3 access key, required if --s3_endpoint is set. (default: none)
--s3_secret_key <secret> S3 secret key, required if --s3_endpoint is set. (default: none) --s3_secret_key <secret> S3 secret key, required if --s3_endpoint is set. (default: none)
--s3_signature_version <version> S3 signature version. (default: 4) --s3_signature_version <version> S3 signature version. (default: 4)
--max_concurrency <number> Place a cap on the max-concurrency option to use for each task. (default: no limit)
Log Levels: Log Levels:
error | debug | info | verbose | debug | silly error | debug | info | verbose | debug | silly
`); `);
@ -100,4 +101,6 @@ config.s3Bucket = argv.s3_bucket || fromConfigFile("s3Bucket", "");
config.s3AccessKey = argv.s3_access_key || fromConfigFile("s3AccessKey", process.env.AWS_ACCESS_KEY_ID || "") config.s3AccessKey = argv.s3_access_key || fromConfigFile("s3AccessKey", process.env.AWS_ACCESS_KEY_ID || "")
config.s3SecretKey = argv.s3_secret_key || fromConfigFile("s3SecretKey", process.env.AWS_SECRET_ACCESS_KEY || "") config.s3SecretKey = argv.s3_secret_key || fromConfigFile("s3SecretKey", process.env.AWS_SECRET_ACCESS_KEY || "")
config.s3SignatureVersion = argv.s3_signature_version || fromConfigFile("s3SignatureVersion", "4") config.s3SignatureVersion = argv.s3_signature_version || fromConfigFile("s3SignatureVersion", "4")
config.maxConcurrency = parseInt(argv.max_concurrency || fromConfigFile("maxConcurrency", 0));
module.exports = config; module.exports = config;

Wyświetl plik

@ -680,7 +680,7 @@ app.get('/info', authCheck, (req, res) => {
res.json({ res.json({
version: packageJson.version, version: packageJson.version,
taskQueueCount: taskManager.getQueueCount(), taskQueueCount: taskManager.getQueueCount(),
totalMemory: mem.total, totalMemory: mem.total,
availableMemory: mem.available, availableMemory: mem.available,
cpuCores: cpu.cores, cpuCores: cpu.cores,
maxImages: config.maxImages, maxImages: config.maxImages,

Wyświetl plik

@ -16,10 +16,11 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
"use strict"; "use strict";
let odmRunner = require('./odmRunner'); const odmRunner = require('./odmRunner');
let async = require('async'); const config = require('../config');
let assert = require('assert'); const async = require('async');
let logger = require('./logger'); const assert = require('assert');
const logger = require('./logger');
let odmOptions = null; let odmOptions = null;
let odmVersion = null; let odmVersion = null;
@ -245,7 +246,12 @@ module.exports = {
}; };
// Scan through all possible options // Scan through all possible options
let maxConcurrencyFound = false;
let maxConcurrencyIsAnOption = false;
for (let odmOption of odmOptions){ for (let odmOption of odmOptions){
if (odmOption.name === 'max-concurrency') maxConcurrencyIsAnOption = true;
// Was this option selected by the user? // Was this option selected by the user?
/*jshint loopfunc: true */ /*jshint loopfunc: true */
let opt = options.find(o => o.name === odmOption.name); let opt = options.find(o => o.name === odmOption.name);
@ -258,6 +264,16 @@ module.exports = {
if (odmOption.domain){ if (odmOption.domain){
checkDomain(odmOption.domain, value); checkDomain(odmOption.domain, value);
} }
// Max concurrency check
if (maxConcurrencyIsAnOption){
maxConcurrencyFound = true;
// Cap
if (config.maxConcurrency){
value = Math.min(value, config.maxConcurrency);
}
}
result.push({ result.push({
name: odmOption.name, name: odmOption.name,
@ -269,6 +285,15 @@ module.exports = {
} }
} }
// If no max concurrency was passed by the user
// but our configuration sets a limit, pass it.
if (!maxConcurrencyFound && maxConcurrencyIsAnOption && config.maxConcurrency){
result.push({
name: "max-concurrency",
value: config.maxConcurrency
});
}
if (errors.length > 0) done(new Error(JSON.stringify(errors))); if (errors.length > 0) done(new Error(JSON.stringify(errors)));
else done(null, result); else done(null, result);
}catch(e){ }catch(e){