You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2015/06/24 02:03:54 UTC

incubator-ignite git commit: #ignite-965: small refactoring.

Repository: incubator-ignite
Updated Branches:
  refs/heads/ignite-965 b51ca63aa -> bd65dcf07


#ignite-965: small refactoring.


Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/bd65dcf0
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/bd65dcf0
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/bd65dcf0

Branch: refs/heads/ignite-965
Commit: bd65dcf07b6b394eaf877e719bcdb6efd9cfb500
Parents: b51ca63
Author: ivasilinets <iv...@gridgain.com>
Authored: Wed Jun 24 03:02:15 2015 +0300
Committer: ivasilinets <iv...@gridgain.com>
Committed: Wed Jun 24 03:02:15 2015 +0300

----------------------------------------------------------------------
 .../processors/rest/GridRestProcessor.java      | 18 ++---
 .../compute/IgniteComputeCommandHandler.java    |  4 +-
 .../IgniteComputeTaskCommandHandler.java        | 58 ++++++++--------
 .../scripting/IgniteScriptProcessor.java        | 69 +++++++++++++-------
 modules/nodejs/src/test/js/test-compute.js      |  3 +-
 5 files changed, 87 insertions(+), 65 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/bd65dcf0/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java
index c156101..594e592 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java
@@ -247,15 +247,6 @@ public class GridRestProcessor extends GridProcessorAdapter {
     /** {@inheritDoc} */
     @Override public void start() throws IgniteCheckedException {
         if (isRestEnabled()) {
-            // Register handlers.
-            addHandler(new GridCacheCommandHandler(ctx));
-            addHandler(new GridTaskCommandHandler(ctx));
-            addHandler(new GridTopologyCommandHandler(ctx));
-            addHandler(new GridVersionCommandHandler(ctx));
-            addHandler(new DataStructuresCommandHandler(ctx));
-            addHandler(new IgniteComputeCommandHandler(ctx));
-            addHandler(new IgniteComputeTaskCommandHandler(ctx));
-
             // Start protocols.
             startTcpProtocol();
             startHttpProtocol();
@@ -291,6 +282,15 @@ public class GridRestProcessor extends GridProcessorAdapter {
 
             if (log.isDebugEnabled())
                 log.debug("REST processor started.");
+
+            // Register handlers.
+            addHandler(new GridCacheCommandHandler(ctx));
+            addHandler(new GridTaskCommandHandler(ctx));
+            addHandler(new GridTopologyCommandHandler(ctx));
+            addHandler(new GridVersionCommandHandler(ctx));
+            addHandler(new DataStructuresCommandHandler(ctx));
+            addHandler(new IgniteComputeCommandHandler(ctx));
+            addHandler(new IgniteComputeTaskCommandHandler(ctx));
         }
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/bd65dcf0/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/compute/IgniteComputeCommandHandler.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/compute/IgniteComputeCommandHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/compute/IgniteComputeCommandHandler.java
index f36e024..26246f5 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/compute/IgniteComputeCommandHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/compute/IgniteComputeCommandHandler.java
@@ -69,7 +69,7 @@ public class IgniteComputeCommandHandler extends GridRestCommandHandlerAdapter {
                     private Ignite ignite;
 
                     @Override public void run() {
-                        ((IgniteKernal) ignite).context().scripting().runJSFunction(req0.function());
+                        ((IgniteKernal) ignite).context().scripting().invokeFunction(req0.function());
                     }
                 });
 
@@ -81,7 +81,7 @@ public class IgniteComputeCommandHandler extends GridRestCommandHandlerAdapter {
                     private Ignite ignite;
 
                     @Override public Object call() {
-                        return ((IgniteKernal) ignite).context().scripting().runJSFunction(req0.function());
+                        return ((IgniteKernal) ignite).context().scripting().invokeFunction(req0.function());
                     }
                 });
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/bd65dcf0/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 4f15081..cbf113c 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
@@ -24,6 +24,7 @@ import org.apache.ignite.internal.*;
 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.processors.scripting.*;
 import org.apache.ignite.internal.util.future.*;
 import org.apache.ignite.internal.util.typedef.internal.*;
 import org.apache.ignite.resources.*;
@@ -45,6 +46,20 @@ public class IgniteComputeTaskCommandHandler extends GridRestCommandHandlerAdapt
      */
     public IgniteComputeTaskCommandHandler(GridKernalContext ctx) {
         super(ctx);
+
+        IgniteScriptProcessor script = ctx.scripting();
+
+        String emitFunction = "function emit(result, f, args, nodeId) {result.push([f.toString(), args, nodeId])}";
+
+        String computeFunction = "function __compute(mapFuncSource, ids, args) {"  +
+            "       var res = [];" +
+            "       var f = __createJSFunction(mapFuncSource);" +
+            "       f(ids, args, emit.bind(null, res)); "  +
+            "       return res;" +
+            "   }";
+
+        script.addEngineFunction(emitFunction);
+        script.addEngineFunction(computeFunction);
     }
 
     /** {@inheritDoc} */
@@ -104,7 +119,13 @@ public class IgniteComputeTaskCommandHandler extends GridRestCommandHandlerAdapt
         @Override public Map<? extends ComputeJob, ClusterNode> map(List<ClusterNode> nodes, String arg) {
             Map<ComputeJob, ClusterNode> map = new HashMap<>();
 
-            List jsMapRes = (List)ctx.scripting().runJSFunction(wrapMapperFunction(nodes));
+            String[] ids = new String[nodes.size()];
+
+            for (int i = 0; i < ids.length; ++i)
+                ids[i] = nodes.get(i).id().toString();
+
+            List jsMapRes = (List)ctx.scripting().invokeFunctionByName("__compute",
+                mapFunc, ids, this.arg);
 
             for (Object jobMapping : jsMapRes) {
                 List task = (List)jobMapping;
@@ -123,9 +144,9 @@ public class IgniteComputeTaskCommandHandler extends GridRestCommandHandlerAdapt
                         String[] argv1 = new String[argv.size()];
 
                         for (int i = 0; i < argv1.length; ++i)
-                            argv1[i] = "\"" + argv.get(i).toString() + "\"";
+                            argv1[i] = argv.get(i).toString();
 
-                        return ctx.scripting().runJSFunction(func, argv1);
+                        return ((IgniteKernal)ignite).context().scripting().invokeFunction(func, argv1);
                     }
                 }, node);
             }
@@ -135,35 +156,12 @@ public class IgniteComputeTaskCommandHandler extends GridRestCommandHandlerAdapt
 
         /** {@inheritDoc} */
         @Nullable @Override public Object reduce(List<ComputeJobResult> results) {
-            List<Object> data = new ArrayList<>();
-
-            for (ComputeJobResult res : results)
-                data.add(res.getData());
+            String[] data = new String[results.size()];
 
-            return ctx.scripting().runJSFunction(reduceFunc, data.toString());
-        }
+            for (int i = 0; i < results.size(); ++i)
+                data[i] = results.get(i).getData().toString();
 
-        /**
-         * @param nodes Cluster nodes.
-         * @return Script running map function.
-         */
-        private String wrapMapperFunction(List<ClusterNode> nodes) {
-            List<String> ids = new ArrayList<>();
-
-            for (ClusterNode node : nodes)
-                ids.add("\"" + node.id().toString() + "\"");
-
-            String sep = System.getProperty("line.separator");
-
-            return "function () {" + sep +
-                "       var res = [];" + sep +
-                "       var emitFunc = function(f, args, nodeId) {" + sep +
-                "           res.push([f.toString(), args, nodeId])" + sep +
-                "       }" + sep +
-                "       var f = " + mapFunc + ";" + sep +
-                "       f(" + ids + ", " + "\"" + this.arg + "\"" + ", emitFunc.bind(null)" + ");" + sep +
-                "       return res;" + sep +
-                "   }";
+            return ctx.scripting().invokeFunction(reduceFunc, (Object)data);
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/bd65dcf0/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 1a72920..9c8a94e 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
@@ -53,45 +53,68 @@ public class IgniteScriptProcessor extends GridProcessorAdapter {
         bind.put("ignite", new IgniteJS());
 
         jsEngine.setBindings(bind, ENGINE_SCOPE);
+
+        String createJSFunction = "function __createJSFunction(mapFunc) {" +
+                "return eval('(function() { return ' + mapFunc.trim() + '})()'); }";
+
+        String internalCall  = "function __internalCall(funcSource) { " +
+                "var func = __createJSFunction(funcSource); " +
+                "var arg = Array.prototype.slice.call(arguments, 0);" +
+                "arg.shift();" +
+                "return func.apply(null, arg);" +
+                "}";
+
+        addEngineFunction(createJSFunction);
+        addEngineFunction(internalCall);
     }
 
     /**
-     * @param script Script.
-     * @param args Arguments.
-     * @return Script result.
-     * @throws ScriptException If script failed.
+     * Add function to scope.
+     *
+     * @param script Function script.
      */
-    public Object runJSFunction(String script, String... args) throws IgniteException {
+    public void addEngineFunction(String script) {
         try {
-            return jsEngine.eval(callJsFunction(script, args));
+            jsEngine.eval(script);
         }
         catch (ScriptException e) {
-            throw new IgniteException("Cannot evaluate javascript function + " + script, e);
+            throw new IgniteException("Script Engine does not work.", e);
         }
     }
 
     /**
-     * @param script Script.
-     * @return Script result.
-     * @throws ScriptException If script failed.
+     * @param source Script source.
+     * @param args Arguments.
+     * @return Result of the function.
      */
-    public Object runJSFunction(String script) throws IgniteException {
-        return runJSFunction(script, new String[]{""});
+    public Object invokeFunction(String source, Object... args) {
+        Object[] newArgs = new Object[args.length + 1];
+
+        newArgs[0] = source;
+
+        System.arraycopy(args, 0, newArgs, 1, args.length);
+
+        return invokeFunctionByName("__internalCall", newArgs);
     }
 
     /**
-     * @param script JS function script.
-     * @param args Arguments.
-     * @return Script that calls function.
+     * Invoke function.
+     *
+     * @param nameFunc Function name.
+     * @param args Function arguments.
+     * @return Result of the function.
      */
-    private String callJsFunction(String script, String[] args) {
-        String callFuncScript = "(" + script + ")(";
-
-        for (int i = 0; i < args.length; ++i)
-            callFuncScript += args[i] + (i < args.length - 1 ? "," : "");
+    public Object invokeFunctionByName(String nameFunc, Object... args) {
+        Invocable invocable = (Invocable) jsEngine;
 
-        callFuncScript += ");";
-
-        return callFuncScript;
+        try {
+            return invocable.invokeFunction(nameFunc, args);
+        }
+        catch (ScriptException e) {
+            throw new IgniteException("Script Engine does not work.", e);
+        }
+        catch (NoSuchMethodException e) {
+            throw new IgniteException("Script Engine does not work.", e);
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/bd65dcf0/modules/nodejs/src/test/js/test-compute.js
----------------------------------------------------------------------
diff --git a/modules/nodejs/src/test/js/test-compute.js b/modules/nodejs/src/test/js/test-compute.js
index 2267662..8c1a7fe 100644
--- a/modules/nodejs/src/test/js/test-compute.js
+++ b/modules/nodejs/src/test/js/test-compute.js
@@ -97,8 +97,9 @@ function computeExecute(error, ignite) {
   var reduce = function(results) {
     var sum = 0;
 
-    for (var i = 0; i < results.length; ++i)
+    for (var i = 0; i < results.length; ++i) {
      sum += parseInt(results[i], 10);
+    }
 
     return sum;
   };