diff --git a/CHANGELOG b/CHANGELOG index 8f8467454d..63343fcba8 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -537,16 +537,6 @@ v2.6.0 (XXXX-XX-XX) up and checking the queues more frequently, which may increase CPU usage of the server. When not using Foxx queues, this value can be raised to save some CPU time. -* added startup option `--server.foxx-queues-warmup-exports` - - This startup option makes sure the exports of all installed Foxx apps are pre-loaded when - the server is restarted. This prevents a known issue with function-based Foxx queue job types. - It is recommended that you upgrade any existing function-based job types to script-based ones - to avoid the issue entirely. - - The default value is `true`. Disabling this feature can reduce memory usage and startup time - but may cause issues with function-based job types. - * added startup option `--server.foxx-queues` This startup option controls whether the Foxx queue manager will check queue and job entries. diff --git a/Documentation/Books/Users/NewFeatures/NewFeatures26.mdpp b/Documentation/Books/Users/NewFeatures/NewFeatures26.mdpp index dfd6a1c9d8..3a7b2989c6 100644 --- a/Documentation/Books/Users/NewFeatures/NewFeatures26.mdpp +++ b/Documentation/Books/Users/NewFeatures/NewFeatures26.mdpp @@ -322,11 +322,3 @@ http://jsteemann.github.io/blog/2015/04/14/updating-documents-with-arangoimp/ will lead to the queue manager having to check only the queues collection of a single database, whereas making it check the queues of all databases might result in more work to be done and more CPU time to be used by the queue manager. - - -* added startup option `--server.foxx-queues-warmup-exports` - - This startup option makes sure the exports of all installed Foxx apps are pre-loaded when - the server is restarted. This prevents a known issue with function-based Foxx queue job types. - It is recommended that you upgrade any existing function-based job types to script-based ones - to avoid the issue entirely. \ No newline at end of file diff --git a/arangod/RestServer/ArangoServer.cpp b/arangod/RestServer/ArangoServer.cpp index 32a75bc85d..06e0ac81f4 100644 --- a/arangod/RestServer/ArangoServer.cpp +++ b/arangod/RestServer/ArangoServer.cpp @@ -339,7 +339,6 @@ ArangoServer::ArangoServer (int argc, char** argv) _disableReplicationApplier(false), _disableQueryTracking(false), _foxxQueues(true), - _foxxQueuesWarmupExports(true), _foxxQueuesPollInterval(1.0), _server(nullptr), _queryRegistry(nullptr), @@ -618,7 +617,6 @@ void ArangoServer::buildApplicationServer () { ("server.allow-use-database", &ALLOW_USE_DATABASE_IN_REST_ACTIONS, "allow change of database in REST actions, only needed for unittests") ("server.threads", &_dispatcherThreads, "number of threads for basic operations") ("server.foxx-queues", &_foxxQueues, "enable Foxx queues") - ("server.foxx-queues-warmup-exports", &_foxxQueuesWarmupExports, "enable pre-loading of Foxx exports for Foxx queues") ("server.foxx-queues-poll-interval", &_foxxQueuesPollInterval, "Foxx queue manager poll interval (in seconds)") ("server.session-timeout", &VocbaseContext::ServerSessionTtl, "timeout of web interface server sessions (in seconds)") ; diff --git a/arangod/RestServer/ArangoServer.h b/arangod/RestServer/ArangoServer.h index 24ab3c9c50..f84a40b340 100644 --- a/arangod/RestServer/ArangoServer.h +++ b/arangod/RestServer/ArangoServer.h @@ -534,20 +534,6 @@ namespace triagens { bool _foxxQueues; -//////////////////////////////////////////////////////////////////////////////// -/// @brief enable or disable the Foxx exports warmup for queues -/// @startDocuBlock queuesWarmupExports -/// `--server.foxx-queues-warmup-exports flag` -/// -/// If *true*, the exports of all Foxx apps will be loaded on server start. -/// -/// The default is *true*. Disabling this will cause issues with function-based -/// job types of jobs persisted throughout a server restart. -/// @endDocuBlock -//////////////////////////////////////////////////////////////////////////////// - - bool _foxxQueuesWarmupExports; - //////////////////////////////////////////////////////////////////////////////// /// @brief poll interval for Foxx queues /// @startDocuBlock foxxQueuesPollInterval diff --git a/js/server/modules/org/arangodb/actions.js b/js/server/modules/org/arangodb/actions.js index 77ed5b447c..5bfbee920c 100644 --- a/js/server/modules/org/arangodb/actions.js +++ b/js/server/modules/org/arangodb/actions.js @@ -1341,16 +1341,6 @@ function reloadRouting () { foxxManager._resetCache(); } -//////////////////////////////////////////////////////////////////////////////// -/// @brief warms up the Foxx exports -//////////////////////////////////////////////////////////////////////////////// - -function warmupExports () { - 'use strict'; - - foxxManager._warmupExports(); -} - //////////////////////////////////////////////////////////////////////////////// /// @brief loads all actions //////////////////////////////////////////////////////////////////////////////// @@ -2274,7 +2264,6 @@ exports.getErrorMessage = getErrorMessage; exports.getJsonBody = getJsonBody; exports.errorFunction = errorFunction; exports.reloadRouting = reloadRouting; -exports.warmupExports = warmupExports; exports.firstRouting = firstRouting; exports.nextRouting = nextRouting; exports.addCookie = addCookie; diff --git a/js/server/modules/org/arangodb/foxx/manager.js b/js/server/modules/org/arangodb/foxx/manager.js index 04047c0036..27c8282871 100644 --- a/js/server/modules/org/arangodb/foxx/manager.js +++ b/js/server/modules/org/arangodb/foxx/manager.js @@ -1462,21 +1462,6 @@ var requireApp = function(mount) { return exportApp(app); }; -var warmupExports = function () { - var cursor = utils.getStorage().all(); - while (cursor.hasNext()) { - var config = cursor.next(); - try { - requireApp(config.mount); - } catch(e) {} - } -}; - -var warmupAllExports = function() { - executeGlobalContextFunction("warmupExports"); - actions.warmupExports(); -}; - //////////////////////////////////////////////////////////////////////////////// /// @brief Syncs the apps in ArangoDB with the applications stored on disc //////////////////////////////////////////////////////////////////////////////// @@ -1529,8 +1514,6 @@ exports.configuration = configuration; exports.dependencies = dependencies; exports.requireApp = requireApp; exports._resetCache = resetCache; -exports._warmupExports = warmupExports; -exports._warmupAllExports = warmupAllExports; //////////////////////////////////////////////////////////////////////////////// /// @brief Serverside only API diff --git a/js/server/modules/org/arangodb/foxx/queues/manager.js b/js/server/modules/org/arangodb/foxx/queues/manager.js index 9e0aa5faf4..061df0b0bd 100644 --- a/js/server/modules/org/arangodb/foxx/queues/manager.js +++ b/js/server/modules/org/arangodb/foxx/queues/manager.js @@ -140,12 +140,6 @@ exports.run = function () { return; } - // warmup exports - // TODO remove this feature along with function-based job types in 2.7 - if (options['server.foxx-queues-warmup-exports'] !== false) { - require('org/arangodb/foxx/manager')._warmupAllExports(); - } - // wakeup/poll interval for Foxx queues var period = 1; if (options.hasOwnProperty('server.foxx-queues-poll-interval')) { diff --git a/js/server/modules/org/arangodb/testing.js b/js/server/modules/org/arangodb/testing.js index 6a6a117a9f..6b70e4e289 100644 --- a/js/server/modules/org/arangodb/testing.js +++ b/js/server/modules/org/arangodb/testing.js @@ -1633,135 +1633,136 @@ testFuncs.foxx_manager = function (options) { return results; }; -testFuncs.queue_legacy = function (options) { - if (options.skipFoxQueues) { - print("skipping test of legacy queue job types"); - return {}; - } - var startTime; - var queueAppMountPath = '/test-queue-legacy'; - print("Testing legacy queue job types"); - var instanceInfo = startInstance("tcp", options, [], "queue_legacy"); - if (instanceInfo === false) { - return {status: false, message: "failed to start server!"}; - } - var data = { - naive: {_key: 'potato', hello: 'world'}, - forced: {_key: 'tomato', hello: 'world'}, - plain: {_key: 'banana', hello: 'world'} - }; - var results = {}; - results.install = runArangoshCmd(options, instanceInfo, { - "configuration": "etc/relative/foxx-manager.conf" - }, [ - "install", - "js/common/test-data/apps/queue-legacy-test", - queueAppMountPath - ]); +// TODO write test for 2.6-style queues +// testFuncs.queue_legacy = function (options) { +// if (options.skipFoxQueues) { +// print("skipping test of legacy queue job types"); +// return {}; +// } +// var startTime; +// var queueAppMountPath = '/test-queue-legacy'; +// print("Testing legacy queue job types"); +// var instanceInfo = startInstance("tcp", options, [], "queue_legacy"); +// if (instanceInfo === false) { +// return {status: false, message: "failed to start server!"}; +// } +// var data = { +// naive: {_key: 'potato', hello: 'world'}, +// forced: {_key: 'tomato', hello: 'world'}, +// plain: {_key: 'banana', hello: 'world'} +// }; +// var results = {}; +// results.install = runArangoshCmd(options, instanceInfo, { +// "configuration": "etc/relative/foxx-manager.conf" +// }, [ +// "install", +// "js/common/test-data/apps/queue-legacy-test", +// queueAppMountPath +// ]); - print("Restarting without foxx-queues-warmup-exports..."); - shutdownInstance(instanceInfo, options); - instanceInfo = startInstance("tcp", options, { - "server.foxx-queues-warmup-exports": "false" - }, "queue_legacy", instanceInfo.flatTmpDataDir); - if (instanceInfo === false) { - return {status: false, message: "failed to restart server!"}; - } - print("done."); +// print("Restarting without foxx-queues-warmup-exports..."); +// shutdownInstance(instanceInfo, options); +// instanceInfo = startInstance("tcp", options, { +// "server.foxx-queues-warmup-exports": "false" +// }, "queue_legacy", instanceInfo.flatTmpDataDir); +// if (instanceInfo === false) { +// return {status: false, message: "failed to restart server!"}; +// } +// print("done."); - var res, body; - startTime = time(); - try { - res = download( - instanceInfo.url + queueAppMountPath + '/', - JSON.stringify(data.naive), - {method: 'POST'} - ); - body = JSON.parse(res.body); - results.naive = {status: body.success === false, message: JSON.stringify({body: res.body, code: res.code})}; - } catch (e) { - results.naive = {status: true, message: JSON.stringify({body: res.body, code: res.code})}; - } - results.naive.duration = time() - startTime; +// var res, body; +// startTime = time(); +// try { +// res = download( +// instanceInfo.url + queueAppMountPath + '/', +// JSON.stringify(data.naive), +// {method: 'POST'} +// ); +// body = JSON.parse(res.body); +// results.naive = {status: body.success === false, message: JSON.stringify({body: res.body, code: res.code})}; +// } catch (e) { +// results.naive = {status: true, message: JSON.stringify({body: res.body, code: res.code})}; +// } +// results.naive.duration = time() - startTime; - startTime = time(); - try { - res = download( - instanceInfo.url + queueAppMountPath + '/?allowUnknown=true', - JSON.stringify(data.forced), - {method: 'POST'} - ); - body = JSON.parse(res.body); - results.forced = ( - body.success - ? {status: true} - : {status: false, message: body.error, stacktrace: body.stacktrace} - ); - } catch (e) { - results.forced = {status: false, message: JSON.stringify({body: res.body, code: res.code})}; - } - results.forced.duration = time() - startTime; +// startTime = time(); +// try { +// res = download( +// instanceInfo.url + queueAppMountPath + '/?allowUnknown=true', +// JSON.stringify(data.forced), +// {method: 'POST'} +// ); +// body = JSON.parse(res.body); +// results.forced = ( +// body.success +// ? {status: true} +// : {status: false, message: body.error, stacktrace: body.stacktrace} +// ); +// } catch (e) { +// results.forced = {status: false, message: JSON.stringify({body: res.body, code: res.code})}; +// } +// results.forced.duration = time() - startTime; - print("Restarting with foxx-queues-warmup-exports..."); - shutdownInstance(instanceInfo, options); - instanceInfo = startInstance("tcp", options, { - "server.foxx-queues-warmup-exports": "true" - }, "queue_legacy", instanceInfo.flatTmpDataDir); - if (instanceInfo === false) { - return {status: false, message: "failed to restart server!"}; - } - print("done."); +// print("Restarting with foxx-queues-warmup-exports..."); +// shutdownInstance(instanceInfo, options); +// instanceInfo = startInstance("tcp", options, { +// "server.foxx-queues-warmup-exports": "true" +// }, "queue_legacy", instanceInfo.flatTmpDataDir); +// if (instanceInfo === false) { +// return {status: false, message: "failed to restart server!"}; +// } +// print("done."); - startTime = time(); - try { - res = download(instanceInfo.url + queueAppMountPath + '/', JSON.stringify(data.plain), {method: 'POST'}); - body = JSON.parse(res.body); - results.plain = ( - body.success - ? {status: true} - : {status: false, message: JSON.stringify({body: res.body, code: res.code})} - ); - } catch (e) { - results.plain = {status: false, message: JSON.stringify({body: res.body, code: res.code})}; - } - results.plain.duration = time() - startTime; +// startTime = time(); +// try { +// res = download(instanceInfo.url + queueAppMountPath + '/', JSON.stringify(data.plain), {method: 'POST'}); +// body = JSON.parse(res.body); +// results.plain = ( +// body.success +// ? {status: true} +// : {status: false, message: JSON.stringify({body: res.body, code: res.code})} +// ); +// } catch (e) { +// results.plain = {status: false, message: JSON.stringify({body: res.body, code: res.code})}; +// } +// results.plain.duration = time() - startTime; - startTime = time(); - try { - for (var i = 0; i < 60; i++) { - wait(1); - res = download(instanceInfo.url + queueAppMountPath + '/'); - body = JSON.parse(res.body); - if (body.length === 2) { - break; - } - } - results.final = ( - body.length === 2 && body[0]._key === data.forced._key && body[1]._key === data.plain._key - ? {status: true} - : {status: false, message: JSON.stringify({body: res.body, code: res.code})} - ); - } catch (e) { - results.final = {status: false, message: JSON.stringify({body: res.body, code: res.code})}; - } - results.final.duration = time() - startTime; +// startTime = time(); +// try { +// for (var i = 0; i < 60; i++) { +// wait(1); +// res = download(instanceInfo.url + queueAppMountPath + '/'); +// body = JSON.parse(res.body); +// if (body.length === 2) { +// break; +// } +// } +// results.final = ( +// body.length === 2 && body[0]._key === data.forced._key && body[1]._key === data.plain._key +// ? {status: true} +// : {status: false, message: JSON.stringify({body: res.body, code: res.code})} +// ); +// } catch (e) { +// results.final = {status: false, message: JSON.stringify({body: res.body, code: res.code})}; +// } +// results.final.duration = time() - startTime; - results.uninstall = runArangoshCmd(options, instanceInfo, { - "configuration": "etc/relative/foxx-manager.conf" - }, [ - "uninstall", - queueAppMountPath - ]); - print("Shutting down..."); - shutdownInstance(instanceInfo, options); - print("done."); - if ((!options.skipLogAnalysis) && - instanceInfo.hasOwnProperty('importantLogLines') && - Object.keys(instanceInfo.importantLogLines).length > 0) { - print("Found messages in the server logs: \n" + yaml.safeDump(instanceInfo.importantLogLines)); - } - return results; -}; +// results.uninstall = runArangoshCmd(options, instanceInfo, { +// "configuration": "etc/relative/foxx-manager.conf" +// }, [ +// "uninstall", +// queueAppMountPath +// ]); +// print("Shutting down..."); +// shutdownInstance(instanceInfo, options); +// print("done."); +// if ((!options.skipLogAnalysis) && +// instanceInfo.hasOwnProperty('importantLogLines') && +// Object.keys(instanceInfo.importantLogLines).length > 0) { +// print("Found messages in the server logs: \n" + yaml.safeDump(instanceInfo.importantLogLines)); +// } +// return results; +// }; testFuncs.dump = function (options) { var cluster;