This is an automated email from the ASF dual-hosted git repository. alexkli pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/openwhisk-wskdebug.git
commit fa5b0b48fa7e3bad922b94ee80e5ff6f70800ded Author: Alexander Klimetschek <[email protected]> AuthorDate: Tue Apr 14 00:41:38 2020 -0700 performance: do not delete backup and helper actions on exit by default add --cleanup option to do so and warn user about the behavior --- index.js | 5 ++ src/agentmgr.js | 25 +++++++--- test/agentmgr.test.js | 127 ++++++++++++++++++++++++++++++++++++++------------ test/ngrok.test.js | 1 - test/test.js | 1 - 5 files changed, 121 insertions(+), 38 deletions(-) diff --git a/index.js b/index.js index 18d13ff..6724d6a 100644 --- a/index.js +++ b/index.js @@ -192,6 +192,11 @@ function yargsOptions(yargs) { group: "Agent options:", describe: "Ngrok region to use. Defaults to 'us'." }); + yargs.option("cleanup", { + type: "boolean", + group: "Agent options:", + describe: "Remove backup and any helper actions on exit. Makes shutdown slower." + }); // nodejs options yargs.option("inspect", { diff --git a/src/agentmgr.js b/src/agentmgr.js index e12e9f7..3275b72 100644 --- a/src/agentmgr.js +++ b/src/agentmgr.js @@ -199,7 +199,7 @@ class AgentMgr { agentCode = await this.getConcurrencyAgent(); } else { - console.log("This OpenWhisk does not support action concurrency. Debugging will be a bit slower. Consider using '--ngrok' which might be a faster option."); + console.warn("This OpenWhisk does not support action concurrency. Debugging will be a bit slower. Consider using '--ngrok' which might be a faster option."); agentName = "polling activation db"; agentCode = await this.getPollingActivationDbAgent(); @@ -454,13 +454,24 @@ class AgentMgr { }); debug("restore: restored original action"); - // remove the backup - await this.wsk.actions.delete(copy); - debug("restore: deleted backup copy"); + if (this.argv.cleanup) { + console.log("Removing extra actions due to --cleanup..."); + // remove the backup + await this.wsk.actions.delete(copy); + debug("restore: deleted backup copy"); - // remove any helpers if they exist - await deleteActionIfExists(this.wsk, `${this.actionName}_wskdebug_invoked`); - await deleteActionIfExists(this.wsk, `${this.actionName}_wskdebug_completed`); + // remove any helpers if they exist + await deleteActionIfExists(this.wsk, `${this.actionName}_wskdebug_invoked`); + await deleteActionIfExists(this.wsk, `${this.actionName}_wskdebug_completed`); + + } else { + console.warn(`Skipping removal of extra actions. Remove using --cleanup if desired:`); + console.warn(`- ${copy}`); + if (!this.concurrency) { + console.warn(`- ${this.actionName}_wskdebug_invoked`); + console.warn(`- ${this.actionName}_wskdebug_completed`); + } + } return original; diff --git a/test/agentmgr.test.js b/test/agentmgr.test.js index b7fae8d..77a2d66 100644 --- a/test/agentmgr.test.js +++ b/test/agentmgr.test.js @@ -39,10 +39,7 @@ describe('agentmgr', function() { test.afterEach(); }); - it("should use non-concurrrent agent if openwhisk does not support concurrency", async function() { - const action = "myaction"; - const code = `const main = () => ({ msg: 'WRONG' });`; - + function mockActivationDbAgent(action, code) { test.mockAction(action, code); test.mockCreateBackupAction(action); @@ -78,7 +75,6 @@ describe('agentmgr', function() { .matchHeader("authorization", test.openwhiskApiAuthHeader()) .reply(200, test.nodejsActionDescription(action)); - // invocation test.openwhiskNock() .get(`${test.openwhiskApiUrl()}/activations`) @@ -123,31 +119,17 @@ describe('agentmgr', function() { // shutdown/restore process test.mockRestoreAction(action, code); - test.mockRemoveBackupAction(action); - test.openwhiskNock() - .get(`${test.openwhiskApiUrlActions()}/${action}_wskdebug_invoked?code=false`) - .matchHeader("authorization", test.openwhiskApiAuthHeader()) - .reply(200, {}); - test.openwhiskNock() - .delete(`${test.openwhiskApiUrlActions()}/${action}_wskdebug_invoked`) - .matchHeader("authorization", test.openwhiskApiAuthHeader()) - .reply(200, {}); - test.openwhiskNock() - .get(`${test.openwhiskApiUrlActions()}/${action}_wskdebug_completed?code=false`) - .matchHeader("authorization", test.openwhiskApiAuthHeader()) - .reply(200, {}); - test.openwhiskNock() - .delete(`${test.openwhiskApiUrlActions()}/${action}_wskdebug_completed`) - .matchHeader("authorization", test.openwhiskApiAuthHeader()) - .reply(200, {}); + } + it("should use non-concurrent agent if openwhisk does not support concurrency", async function() { + const action = "myaction"; + const code = `const main = () => ({ msg: 'CORRECT' });`; + + mockActivationDbAgent(action, code); - process.chdir("test/nodejs/plain-flat"); const argv = { port: test.port, - action: "myaction", - sourcePath: `${process.cwd()}/action.js`, - invokeParams: '{ "key": "invocationOnSourceModification" }' + action: "myaction" }; const dbgr = new Debugger(argv); @@ -212,8 +194,6 @@ describe('agentmgr', function() { .matchHeader("authorization", test.openwhiskApiAuthHeader()) .reply(200, agentDescriptionWithoutCode); - test.mockRemoveBackupAction(action); - // 4. install agent test.openwhiskNock() .put( @@ -234,7 +214,6 @@ describe('agentmgr', function() { // 6. restore test.mockRestoreAction(action, actionCode); - test.mockRemoveBackupAction(action); // ----------------- @@ -242,4 +221,94 @@ describe('agentmgr', function() { test.assertAllNocksInvoked(); }); + + it("should remove backup action if --cleanup is set", async function() { + const action = "myaction"; + const code = `const main = () => ({ msg: 'CORRECT' });`; + + test.mockActionAndInvocation( + action, + code, + {}, + { msg: "CORRECT" } + ); + + test.mockRemoveBackupAction(action); + test.openwhiskNock() + .get(`${test.openwhiskApiUrlActions()}/${action}_wskdebug_invoked?code=false`) + .matchHeader("authorization", test.openwhiskApiAuthHeader()) + .reply(200, {}); + test.openwhiskNock() + .delete(`${test.openwhiskApiUrlActions()}/${action}_wskdebug_invoked`) + .matchHeader("authorization", test.openwhiskApiAuthHeader()) + .reply(200, {}); + test.openwhiskNock() + .get(`${test.openwhiskApiUrlActions()}/${action}_wskdebug_completed?code=false`) + .matchHeader("authorization", test.openwhiskApiAuthHeader()) + .reply(200, {}); + test.openwhiskNock() + .delete(`${test.openwhiskApiUrlActions()}/${action}_wskdebug_completed`) + .matchHeader("authorization", test.openwhiskApiAuthHeader()) + .reply(200, {}); + + const argv = { + port: test.port, + action: "myaction", + cleanup: true + }; + + const dbgr = new Debugger(argv); + await dbgr.start(); + dbgr.run(); + + // wait a bit + await test.sleep(500); + + await dbgr.stop(); + + test.assertAllNocksInvoked(); + }); + + it("should remove helper actions if --cleanup is set and activation db agent is used", async function() { + const action = "myaction"; + const code = `const main = () => ({ msg: 'CORRECT' });`; + + mockActivationDbAgent(action, code); + + test.mockRemoveBackupAction(action); + test.openwhiskNock() + .get(`${test.openwhiskApiUrlActions()}/${action}_wskdebug_invoked?code=false`) + .matchHeader("authorization", test.openwhiskApiAuthHeader()) + .reply(200, {}); + test.openwhiskNock() + .delete(`${test.openwhiskApiUrlActions()}/${action}_wskdebug_invoked`) + .matchHeader("authorization", test.openwhiskApiAuthHeader()) + .reply(200, {}); + test.openwhiskNock() + .get(`${test.openwhiskApiUrlActions()}/${action}_wskdebug_completed?code=false`) + .matchHeader("authorization", test.openwhiskApiAuthHeader()) + .reply(200, {}); + test.openwhiskNock() + .delete(`${test.openwhiskApiUrlActions()}/${action}_wskdebug_completed`) + .matchHeader("authorization", test.openwhiskApiAuthHeader()) + .reply(200, {}); + + const argv = { + port: test.port, + action: "myaction", + cleanup: true + }; + + const dbgr = new Debugger(argv); + await dbgr.start(); + dbgr.run(); + + // wait a bit + await test.sleep(500); + + await dbgr.stop(); + + test.assertAllNocksInvoked(); + }); + }); diff --git a/test/ngrok.test.js b/test/ngrok.test.js index b9485e6..88e2c4b 100644 --- a/test/ngrok.test.js +++ b/test/ngrok.test.js @@ -156,7 +156,6 @@ describe('ngrok', function() { .reply(200, test.nodejsActionDescription(actionName)); test.mockRestoreAction(actionName, code); - test.mockRemoveBackupAction(actionName); // wskdebug myaction action.js --ngrok -p ${test.port} const argv = { diff --git a/test/test.js b/test/test.js index d59e77e..d81bee1 100644 --- a/test/test.js +++ b/test/test.js @@ -192,7 +192,6 @@ function expectAgent(name, code, binary=false) { // shutdown/restore process mockRestoreAction(name, code, binary); - mockRemoveBackupAction(name); } function nockActivation(name, bodyFn) {
