You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwhisk.apache.org by pd...@apache.org on 2019/04/02 22:17:53 UTC
[incubator-openwhisk-devtools] branch master updated: Enable
knative stem runtime for separate init and activation data invocations
(#238)
This is an automated email from the ASF dual-hosted git repository.
pdesai pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-openwhisk-devtools.git
The following commit(s) were added to refs/heads/master by this push:
new f6856d1 Enable knative stem runtime for separate init and activation data invocations (#238)
f6856d1 is described below
commit f6856d1c61c15ec730cc3197e68706c7ad908de8
Author: Matt Rutkowski <mr...@us.ibm.com>
AuthorDate: Tue Apr 2 17:17:49 2019 -0500
Enable knative stem runtime for separate init and activation data invocations (#238)
---
.../runtimes/javascript/platform/knative.js | 67 +++++++++++++++++-----
1 file changed, 52 insertions(+), 15 deletions(-)
diff --git a/knative-build/runtimes/javascript/platform/knative.js b/knative-build/runtimes/javascript/platform/knative.js
index f1a69db..2582401 100644
--- a/knative-build/runtimes/javascript/platform/knative.js
+++ b/knative-build/runtimes/javascript/platform/knative.js
@@ -404,32 +404,69 @@ function PlatformKnativeImpl(platformFactory) {
try {
DEBUG.dumpObject(service.initialized(),"service.initialized()");
- // Process request and process env. variables to provide them in the manner
- // an OpenWhisk Action expects them, as well as enable additional Http features.
- preProcessRequest(req);
-
// Do not process requests with init. data if this is not a "stem" cell
if (hasInitData(req) && !isStemCell(process.env))
throw ("Cannot initialize a runtime with a dedicated function.");
- service.initCode(req).then(function () {
+ if(hasInitData(req) && hasActivationData(req)){
+
+ // Process request and process env. variables to provide them in the manner
+ // an OpenWhisk Action expects them, as well as enable additional Http features.
+ preProcessRequest(req);
+
+ service.initCode(req).then(function () {
+ service.runCode(req).then(function (result) {
+ postProcessResponse(req, result, res)
+ });
+ }).catch(function (error) {
+ console.error(error);
+ if (typeof error.code === "number" && typeof error.response !== "undefined") {
+ res.status(error.code).json(error.response);
+ } else {
+ console.error("[wrapEndpoint]", "invalid errored promise", JSON.stringify(error));
+ res.status(500).json({ error: "Internal error during function execution." });
+ }
+ });
+ } else if(hasInitData(req)){
+
+ // Process request and process env. variables to provide them in the manner
+ // an OpenWhisk Action expects them, as well as enable additional Http features.
+ preProcessRequest(req);
+
+ service.initCode(req).then(function () {
+ }).catch(function (error) {
+ console.error(error);
+ if (typeof error.code === "number" && typeof error.response !== "undefined") {
+ res.status(error.code).json(error.response);
+ } else {
+ console.error("[wrapEndpoint]", "invalid errored promise", JSON.stringify(error));
+ res.status(500).json({ error: "Internal error during function execution." });
+ }
+ });
+ } else if(hasActivationData(req)){
+ // Process request and process env. variables to provide them in the manner
+ // an OpenWhisk Action expects them, as well as enable additional Http features.
+ preProcessRequest(req);
+
service.runCode(req).then(function (result) {
postProcessResponse(req, result, res)
+ }).catch(function (error) {
+ console.error(error);
+ if (typeof error.code === "number" && typeof error.response !== "undefined") {
+ res.status(error.code).json(error.response);
+ } else {
+ console.error("[wrapEndpoint]", "invalid errored promise", JSON.stringify(error));
+ res.status(500).json({ error: "Internal error during function execution." });
+ }
});
- }).catch(function (error) {
- console.error(error);
- if (typeof error.code === "number" && typeof error.response !== "undefined") {
- res.status(error.code).json(error.response);
- } else {
- console.error("[wrapEndpoint]", "invalid errored promise", JSON.stringify(error));
- res.status(500).json({ error: "Internal error during function execution." });
- }
- });
+ }
+
} catch (e) {
res.status(500).json({error: "internal error during function initialization."})
}
};
+ // TODO: the 'httpMethods' var should not alternatively store string and string[] types
this.registerHandlers = function(app, platform) {
var httpMethods = process.env.__OW_HTTP_METHODS;
// default to "[post]" HTTP method if not defined
@@ -440,7 +477,7 @@ function PlatformKnativeImpl(platformFactory) {
if (httpMethods.startsWith('[') && httpMethods.endsWith(']')) {
httpMethods = httpMethods.substr(1, httpMethods.length);
httpMethods = httpMethods.substr(0, httpMethods.length -1);
- httpMethods = httpMethods.split(',')
+ httpMethods = httpMethods.split(',');
}
}
// default to "[post]" HTTP method if specified methods are not valid