IGNITE-22 Optimize closure serialization.

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

Branch: refs/heads/ignite-sql-tests
Commit: a22c06348d9c81b4332c3b5a764f6d8836e4bb5e
Parents: 08fa115
Author: sevdokimov <sevdoki...@gridgain.com>
Authored: Fri Feb 20 15:08:57 2015 +0300
Committer: sevdokimov <sevdoki...@gridgain.com>
Committed: Fri Feb 20 15:08:57 2015 +0300

----------------------------------------------------------------------
 .../closure/GridClosureProcessor.java           | 33 +++++++++++++++++---
 1 file changed, 28 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/a22c0634/modules/core/src/main/java/org/apache/ignite/internal/processors/closure/GridClosureProcessor.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/closure/GridClosureProcessor.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/closure/GridClosureProcessor.java
index 891b71b..efc3a9c 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/closure/GridClosureProcessor.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/closure/GridClosureProcessor.java
@@ -1021,6 +1021,12 @@ public class GridClosureProcessor extends 
GridProcessorAdapter {
         /** */
         private boolean hadLocNode;
 
+        /** */
+        private byte[] closureBytes;
+
+        /** */
+        private IgniteClosure<?, ?> closure;
+
         /**
          * @param expJobCnt Expected Jobs count.
          */
@@ -1033,15 +1039,29 @@ public class GridClosureProcessor extends 
GridProcessorAdapter {
          * @param node Node.
          * @throws IgniteCheckedException In case of error.
          */
-        public void map(ComputeJob job, ClusterNode node) throws 
IgniteCheckedException {
-            assert job != null;
-            assert node != null;
-
+        public void map(@NotNull ComputeJob job, @NotNull ClusterNode node) 
throws IgniteCheckedException {
             if (ctx.localNodeId().equals(node.id())) {
                 if (hadLocNode) {
                     Marshaller marsh = ctx.config().getMarshaller();
 
-                    job = marsh.unmarshal(marsh.marshal(job), null);
+                    if (job instanceof C1) {
+                        C1 c = (C1)job;
+
+                        if (closureBytes == null) {
+                            closure = c.job;
+
+                            closureBytes = marsh.marshal(c.job);
+                        }
+
+                        if (c.job == closure)
+                            c.job = marsh.unmarshal(closureBytes, null);
+                        else
+                            c.job = marsh.unmarshal(marsh.marshal(c.job), 
null);
+
+                        c.arg = marsh.unmarshal(marsh.marshal(c.arg), null);
+                    }
+                    else
+                        job = marsh.unmarshal(marsh.marshal(job), null);
                 }
                 else
                     hadLocNode = true;
@@ -1050,6 +1070,9 @@ public class GridClosureProcessor extends 
GridProcessorAdapter {
             map.put(job, node);
         }
 
+        /**
+         *
+         */
         public Map<ComputeJob, ClusterNode> map() {
             return map;
         }

Reply via email to