You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwhisk.apache.org by al...@apache.org on 2020/04/14 19:31:18 UTC
[openwhisk-wskdebug] 02/03: activation db agent tweaks
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 fca0acd93df2bdaaaeba43c58d153c078c239b7c
Author: Alexander Klimetschek <ak...@adobe.com>
AuthorDate: Tue Apr 14 11:57:44 2020 -0700
activation db agent tweaks
- add hidden --disable-concurrency option to force it
- shorten activation db timeout to 30 sec by default
- better poll logging
---
src/agentmgr.js | 52 ++++++++++++++++++++++++++++++++++++----------------
1 file changed, 36 insertions(+), 16 deletions(-)
diff --git a/src/agentmgr.js b/src/agentmgr.js
index 7c5ebf0..4405b8d 100644
--- a/src/agentmgr.js
+++ b/src/agentmgr.js
@@ -192,15 +192,21 @@ class AgentMgr {
debugTask("started local ngrok proxy");
} else {
- this.concurrency = await this.openwhiskSupports("concurrency");
+ if (this.argv.disableConcurrency) {
+ this.concurrency = false;
+ } else {
+ this.concurrency = await this.openwhiskSupports("concurrency");
+ if (!this.concurrency) {
+ console.warn("This OpenWhisk does not support action concurrency. Debugging will be a bit slower. Consider using '--ngrok' which might be a faster option.");
+ }
+ }
+
if (this.concurrency) {
// normal fast agent using concurrent node.js actions
agentName = "concurrency";
agentCode = await this.getConcurrencyAgent();
} else {
- 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();
}
@@ -282,9 +288,6 @@ class AgentMgr {
// the $waitForActivation agent activation will block, but only until
// it times out, hence we need to retry when it fails
while (this.polling) {
- if (this.argv.verbose) {
- process.stdout.write(".");
- }
try {
let activation;
if (this.concurrency) {
@@ -297,6 +300,9 @@ class AgentMgr {
blocking: true
});
+ if (this.argv.verbose) {
+ process.stdout.write(".");
+ }
} else {
// poll for the newest activation
const since = Date.now();
@@ -311,10 +317,6 @@ class AgentMgr {
}
while (true) {
- if (this.argv.verbose) {
- process.stdout.write(".");
- }
-
const activations = await this.wsk.activations.list({
name: `${name}_wskdebug_invoked`,
since: since,
@@ -335,11 +337,19 @@ class AgentMgr {
}
}
+ if (this.argv.verbose) {
+ process.stdout.write(".");
+ }
+
// need to limit load on openwhisk (activation list)
await sleep(1000);
}
}
+ if (this.argv.verbose) {
+ process.stdout.write(".");
+ }
+
// check for successful response with a new activation
if (activation && activation.response) {
const params = activation.response.result;
@@ -358,7 +368,7 @@ class AgentMgr {
} else if (activation && activation.activationId) {
// ignore this and retry.
- // usually means the action did not respond within one second,
+ // usually means the action did not respond within one minute,
// which in turn is unlikely for the agent who should exit itself
// after 50 seconds, so can only happen if there was some delay
// outside the action itself
@@ -371,17 +381,27 @@ class AgentMgr {
} catch (e) {
// look for special error codes from agent
const errorCode = getActivationError(e).code;
- // 42 => retry
if (errorCode === 42) {
- // do nothing
+ // 42 => retry, do nothing here (except logging progress)
+ if (this.argv.verbose) {
+ process.stdout.write(".");
+ }
+
} else if (errorCode === 43) {
// 43 => graceful shutdown (for unit tests)
console.log("Graceful shutdown requested by agent (only for unit tests)");
return null;
+
} else if (e.statusCode === 503 && !this.concurrency) {
+ // 503 => openwhisk activation DB likely overloaded with requests, warn, wait a bit and retry
+
+ if (this.argv.verbose) {
+ console.log("x");
+ }
console.warn("Server responded with 503 while looking for new activation records. Consider using --ngrok option.")
- // can be server is overloaded with activation list requests, wait a bit extra and retry
- sleep(1000);
+
+ await sleep(5000);
+
} else {
// otherwise log error and abort
console.error();
@@ -544,7 +564,7 @@ class AgentMgr {
code: fs.readFileSync(file, {encoding: 'utf8'})
},
limits: {
- timeout: (this.argv.agentTimeout || 300) * 1000
+ timeout: (this.argv.agentTimeout || 30) * 1000
},
annotations: [
{ key: "description", value: `wskdebug agent helper. temporarily installed.` }