-
Notifications
You must be signed in to change notification settings - Fork 9
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Support for openWhisk #67
Comments
To deploy the Q*Cert compiler on openWhisk we decided at a meeting today to use a sequence of two actions. The second action is simply QCertJS.js running as a Node action. It accepts a JSON input defined by the TypeScript type QcertCompilerConfig. It requires a preliminary action only when Java processing is needed. The first action will be written in Java and be an augmentation of the existing Java service, incorporating some of the decision logic presently in QCertPreCompiler.ts. Basically, it figures out if any Java preprocessing is needed and, if so, it does it. This action also accepts (and returns) a QcertCompilerConfig. The network-connected demo would simply use this new support in lieu of what it does now. But, we would want to preserve the ability to run locally either (1) when there is no reachable Java service at all, in which case we would only support languages that don't need pre-processing in Java or (2) when there is a reachable Java service running on 'localhost'. To make this maximally compositional, we would change the long-running "Java service" to have exactly the calling conventions and semantics of the remote whisk action (we could do this by running a whisk instance locally but that seems like overkill). That is, it analyzes the requests, does Java pre-processing if needed, then uses nashorn to run QCertJS.js so that what is returned is equivalent to what the whisk sequence would have returned. |
I removed a few sentences from the previous comment because the issue of how to support non-network-attached demos is a little trickier than I thought. One reason we run on 'localhost' for demos is to avoid network issues but another reason is to incorporate the jrules support which (I still assume) wouldn't be on any public deployment, whether in whisk or not. For this use case, there still needs to be a "search order" with 'localhost' at the start and public URLs after that. The best design would make the invocation of 'localhost' mimic the invocation of the remote whisk action sequence. Another goal here is to support users who didn't install Java. If such users have network access, they are fine because all the Java stuff is remote. But, if such a user is not on the network, our current ability to run something on 'localhost' won't work since we use Java to do that; we could substitute something else (e.g. Node) but it would beg the issue since that is a pre-requisite just as difficult as installing Java. So, the final fallback has to be that the demo itself loads QcertJS into the browser and executes it. I think it still makes sense for a server running on 'localhost', if present at all, to use Java and, in fact, to run QcertJS using nashorn (this gives uniformity with the remote case and makes the search order traversal simple). But, if the demo exhausts the entire search order without finding a usable service, it has to invoke QcertJS itself. |
There is now a candidate whisk action (untested) which is designed to be the first of two in a sequence, the second being QcertJS running under Node. I have still to develop a testing strategy and to incorporate the new action. The old action (design to be used by itself as a "Java service" in the older sense) is still operative, as are the Java service running in AWS and ability to start a Java service on localhost. |
There is now a way to test the two-action whisk sequence. It has been (very lightly) tested and it appears to work! The demo is still using the old setup, so we now have the union of all the different ways we have done things. The artifact Once I've gotten the new support runnable on 'localhost' and also modified the demo, the plan would be to retire some of the different ways we have of running things:
One loose end concerns how the actions are deployed. Currently, the Java action in the two-step sequence is deployed using |
Issue #67. See issue for caveats.
I have pushed support for running a simulation of the whisk two-action sequence on localhost. It appears to work. Caveats:
|
Some problems remain. See issue #67
The demo (demo.html and its scripts) has been updated to use the new stuff. Remaining issues:
|
Some of our targets (notably JavaScript and Cloudant) could be deployed on openWhisk (https://openwhisk.incubator.apache.org) instead of being run through 'query runners'. This would provide for an easy way to run queries compiled by Q*cert.
Deploying the Q*cert compiler itself on openWhisk could also be of interest to openWhisk user who wants to use query languages to create their own actions more easily.
The text was updated successfully, but these errors were encountered: