Repository: incubator-ignite Updated Branches: refs/heads/ignite-965 b42bd3d3c -> 5ddc04b29
#ignite-965: IgniteCompute.execute run simple task on nodejs. Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/5ddc04b2 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/5ddc04b2 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/5ddc04b2 Branch: refs/heads/ignite-965 Commit: 5ddc04b2902a79ba1afd8c08fc3224a442cc1c00 Parents: b42bd3d Author: ivasilinets <ivasilin...@gridgain.com> Authored: Tue Jun 23 09:25:05 2015 +0300 Committer: ivasilinets <ivasilin...@gridgain.com> Committed: Tue Jun 23 09:25:05 2015 +0300 ---------------------------------------------------------------------- .../IgniteComputeTaskCommandHandler.java | 23 ++++++++++++++----- .../rest/request/RestComputeTaskRequest.java | 8 ++++--- .../scripting/IgniteScriptProcessor.java | 8 +++++-- modules/nodejs/src/main/js/apache-ignite.js | 3 ++- modules/nodejs/src/main/js/compute.js | 24 ++++++++++++++------ .../nodejs/src/test/js/simple-compute-task.js | 22 ++++++++++-------- .../http/jetty/GridJettyRestHandler.java | 7 ++++-- 7 files changed, 65 insertions(+), 30 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/5ddc04b2/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/compute/IgniteComputeTaskCommandHandler.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/compute/IgniteComputeTaskCommandHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/compute/IgniteComputeTaskCommandHandler.java index 2c7ec5b..b20f9c2 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/compute/IgniteComputeTaskCommandHandler.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/compute/IgniteComputeTaskCommandHandler.java @@ -22,8 +22,10 @@ import org.apache.ignite.internal.processors.rest.*; import org.apache.ignite.internal.processors.rest.handlers.*; import org.apache.ignite.internal.processors.rest.request.*; import org.apache.ignite.internal.util.future.*; +import org.apache.ignite.internal.util.typedef.T3; import org.apache.ignite.internal.util.typedef.internal.*; +import javax.script.ScriptException; import java.util.*; import static org.apache.ignite.internal.processors.rest.GridRestCommand.*; @@ -57,11 +59,20 @@ public class IgniteComputeTaskCommandHandler extends GridRestCommandHandlerAdapt final RestComputeTaskRequest req0 = (RestComputeTaskRequest) req; - Map<String, String> mapping = req0.mapping(); - - - - - return new GridFinishedFuture<>(new GridRestResponse("5")); + List<T3<String, String, String>> mapping = req0.mapping(); + + Set<Object> res = new HashSet<>(); + System.out.println("MAPPING RESULTS " + mapping.size()); + for (T3<String, String, String> f : mapping) { + try { + Object locRes = ctx.scripting().runJS(f.get1(), f.get3()); + System.out.println("LOCAL RESULT=" +locRes); + res.add(locRes); + } catch (ScriptException e) { + e.printStackTrace(); + } + } + + return new GridFinishedFuture<>(new GridRestResponse(res)); } } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/5ddc04b2/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/request/RestComputeTaskRequest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/request/RestComputeTaskRequest.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/request/RestComputeTaskRequest.java index 74eb3cf..bae7ce5 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/request/RestComputeTaskRequest.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/request/RestComputeTaskRequest.java @@ -17,6 +17,8 @@ package org.apache.ignite.internal.processors.rest.request; +import org.apache.ignite.internal.util.typedef.T3; + import java.util.*; /** @@ -24,19 +26,19 @@ import java.util.*; */ public class RestComputeTaskRequest extends GridRestRequest { /** Mapping tasks to nodes. */ - private Map<String, String> mapping; + private List<T3<String, String, String>> mapping; /** * @param mapping Mapping tasks to nodes. */ - public void mapping(Map<String, String> mapping) { + public void mapping(List<T3<String, String, String>> mapping) { this.mapping = mapping; } /** * @return Mapping tasks to nodes. */ - public Map<String, String> mapping() { + public List<T3<String, String, String>> mapping() { return mapping; } } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/5ddc04b2/modules/core/src/main/java/org/apache/ignite/internal/processors/scripting/IgniteScriptProcessor.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/scripting/IgniteScriptProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/scripting/IgniteScriptProcessor.java index 1e333f6..54004de 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/scripting/IgniteScriptProcessor.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/scripting/IgniteScriptProcessor.java @@ -56,7 +56,7 @@ public class IgniteScriptProcessor extends GridProcessorAdapter { * @param script Script. * @throws ScriptException If script failed. */ - public Object runJS(String script) throws ScriptException { + public Object runJS(String script, String args) throws ScriptException { ScriptEngine engine = factory.getEngineByName("JavaScript"); Bindings b = engine.createBindings(); @@ -65,11 +65,15 @@ public class IgniteScriptProcessor extends GridProcessorAdapter { engine.setBindings(b, ScriptContext.ENGINE_SCOPE); - script = "(" + script + ")();"; + script = "(" + script + ")(" + args + ");"; return engine.eval(script); } + public Object runJS(String script) throws ScriptException { + return runJS(script, ""); + } + /** * Ignite JS binding. */ http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/5ddc04b2/modules/nodejs/src/main/js/apache-ignite.js ---------------------------------------------------------------------- diff --git a/modules/nodejs/src/main/js/apache-ignite.js b/modules/nodejs/src/main/js/apache-ignite.js index 0df6160..f90cf68 100644 --- a/modules/nodejs/src/main/js/apache-ignite.js +++ b/modules/nodejs/src/main/js/apache-ignite.js @@ -20,5 +20,6 @@ module.exports = { Ignition : require('./ignition.js').Ignition, Server : require('./server.js').Server, Ignite : require('./ignite.js').Ignite, - Compute : require('./compute.js').Compute + Compute : require('./compute.js').Compute, + ComputeJob: require('./compute.js').ComputeJob } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/5ddc04b2/modules/nodejs/src/main/js/compute.js ---------------------------------------------------------------------- diff --git a/modules/nodejs/src/main/js/compute.js b/modules/nodejs/src/main/js/compute.js index fe0820b..cb83e5d 100644 --- a/modules/nodejs/src/main/js/compute.js +++ b/modules/nodejs/src/main/js/compute.js @@ -104,15 +104,16 @@ Compute.prototype._onNodesExecute = function(task, arg, callback, err, nodes) { return; } - var taskMap = task.map(nodes, arg); + var computeJobList = task.map(nodes, arg); var params = []; - var i = 0; + var i = 1; - console.log("TASK" + taskMap); - for (var f in taskMap) { - params.push(Server.pair("f" + i, this._escape(f))); - params.push(Server.pair("n" + i, taskMap[f])); + console.log("TASK" + computeJobList); + for (var job of computeJobList) { + params.push(Server.pair("f" + i, this._escape(job.func))); + params.push(Server.pair("args" + i, JSON.stringify(job.args))); + params.push(Server.pair("n" + i, job.node.nodeId)); i++; } @@ -134,4 +135,13 @@ Compute.prototype._onResExecute = function(task, callback, err, results) { callback.call(null, null, res); } -exports.Compute = Compute \ No newline at end of file +exports.Compute = Compute + + +function ComputeJob(func, args, node) { + this.func = func; + this.args = args; + this.node = node; +} + +exports.ComputeJob = ComputeJob; \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/5ddc04b2/modules/nodejs/src/test/js/simple-compute-task.js ---------------------------------------------------------------------- diff --git a/modules/nodejs/src/test/js/simple-compute-task.js b/modules/nodejs/src/test/js/simple-compute-task.js index 6e55c55..d7eb91d 100644 --- a/modules/nodejs/src/test/js/simple-compute-task.js +++ b/modules/nodejs/src/test/js/simple-compute-task.js @@ -21,10 +21,17 @@ function CharacterCountTask() { CharacterCountTask.prototype.map = function(nodes, arg) { var words = arg.split(" "); - var map = {}; + var results = []; var nodeId = 0; + function compute(args) { + println(">>> Printing " + args); + + return args[0].length; + } + + for (var word of words) { var node = nodes[nodeId]; @@ -32,16 +39,13 @@ CharacterCountTask.prototype.map = function(nodes, arg) { nodeId++; } - var f = function() { - println(">>> Printing " + word); - - return word.length; - } - - map[f] = node; + var TestUtils = require("./test-utils").TestUtils; + var Apache = require(TestUtils.scriptPath()); + var ComputeJob = Apache.ComputeJob; + results.push(new ComputeJob(compute, [word], node)); } - return map; + return results; } CharacterCountTask.prototype.reduce = function(results) { http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/5ddc04b2/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java ---------------------------------------------------------------------- diff --git a/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java b/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java index ff5fb7e..5fe4cd9 100644 --- a/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java +++ b/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java @@ -465,12 +465,15 @@ public class GridJettyRestHandler extends AbstractHandler { List<Object> funcs = values("f", params); List<Object> nodes = values("n", params); + List<Object> args = values("args", params); + assert funcs.size() == nodes.size(); - Map<String, String> mapping = new HashMap<>(); + List<T3<String, String, String>> mapping = new ArrayList<>(); + for (int i = 0; i < funcs.size(); ++i) - mapping.put((String) funcs.get(i), (String)nodes.get(i)); + mapping.add(new T3((String) funcs.get(i), (String)nodes.get(i), (String)args.get(i))); restReq0.mapping(mapping);