You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ag...@apache.org on 2015/04/11 09:47:33 UTC

[01/31] incubator-ignite git commit: # ignite-537

Repository: incubator-ignite
Updated Branches:
  refs/heads/ignite-721 2d3eac747 -> bf7b9f861


# ignite-537


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

Branch: refs/heads/ignite-721
Commit: 33dbf24b7bac8b5eea2709b7cc2bbd721a92ab70
Parents: fd9cdff
Author: sboikov <sb...@gridgain.com>
Authored: Thu Apr 9 14:46:34 2015 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Thu Apr 9 18:15:39 2015 +0300

----------------------------------------------------------------------
 .../discovery/GridDiscoveryManager.java         |  41 ++++--
 .../spi/discovery/DiscoverySpiDataExchange.java |  13 +-
 .../discovery/tcp/TcpClientDiscoverySpi.java    |  14 +-
 .../spi/discovery/tcp/TcpDiscoverySpi.java      | 135 ++++++++++++++++++-
 .../discovery/tcp/TcpDiscoverySpiAdapter.java   |  13 ++
 .../messages/TcpDiscoveryGetClassRequest.java   |  47 +++++++
 .../messages/TcpDiscoveryGetClassResponse.java  |  67 +++++++++
 .../TcpDiscoveryJoinRequestMessage.java         |   6 +-
 .../messages/TcpDiscoveryNodeAddedMessage.java  |  16 ++-
 .../discovery/AbstractDiscoverySelfTest.java    |   7 +-
 .../tcp/TcpDiscoverySpiStartStopSelfTest.java   |   7 +-
 .../junits/spi/GridSpiAbstractTest.java         |   7 +-
 12 files changed, 334 insertions(+), 39 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/33dbf24b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java
index 04ff423..7662bcc 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java
@@ -36,6 +36,7 @@ import org.apache.ignite.internal.util.typedef.*;
 import org.apache.ignite.internal.util.typedef.internal.*;
 import org.apache.ignite.internal.util.worker.*;
 import org.apache.ignite.lang.*;
+import org.apache.ignite.marshaller.jdk.*;
 import org.apache.ignite.plugin.security.*;
 import org.apache.ignite.plugin.segmentation.*;
 import org.apache.ignite.spi.*;
@@ -171,6 +172,9 @@ public class GridDiscoveryManager extends GridManagerAdapter<DiscoverySpi> {
     /** Map of dynamic cache filters. */
     private Map<String, CachePredicate> registeredCaches = new HashMap<>();
 
+    /** */
+    private JdkMarshaller jdkMarsh = new JdkMarshaller();
+
     /** @param ctx Context. */
     public GridDiscoveryManager(GridKernalContext ctx) {
         super(ctx, ctx.config().getDiscoverySpi());
@@ -417,10 +421,10 @@ public class GridDiscoveryManager extends GridManagerAdapter<DiscoverySpi> {
         });
 
         spi.setDataExchange(new DiscoverySpiDataExchange() {
-            @Override public Map<Integer, Object> collect(UUID nodeId) {
+            @Override public Map<Integer, byte[]> collect(UUID nodeId) {
                 assert nodeId != null;
 
-                Map<Integer, Object> data = new HashMap<>();
+                Map<Integer, byte[]> data = new HashMap<>();
 
                 for (GridComponent comp : ctx.components()) {
                     Object compData = comp.collectDiscoveryData(nodeId);
@@ -428,29 +432,48 @@ public class GridDiscoveryManager extends GridManagerAdapter<DiscoverySpi> {
                     if (compData != null) {
                         assert comp.discoveryDataType() != null;
 
-                        data.put(comp.discoveryDataType().ordinal(), compData);
+                        try {
+                            byte[] bytes = jdkMarsh.marshal(compData);
+
+                            data.put(comp.discoveryDataType().ordinal(), bytes);
+                        }
+                        catch (IgniteCheckedException e) {
+                            U.error(log, "Failed to marshal discovery data " +
+                                "[comp=" + comp + ", data=" + compData + ']', e);
+                        }
                     }
                 }
 
                 return data;
             }
 
-            @Override public void onExchange(UUID joiningNodeId, UUID nodeId, Map<Integer, Object> data) {
-                for (Map.Entry<Integer, Object> e : data.entrySet()) {
+            @Override public void onExchange(UUID joiningNodeId,
+                UUID nodeId,
+                Map<Integer, byte[]> data,
+                ClassLoader clsLdr) {
+                for (Map.Entry<Integer, byte[]> entry : data.entrySet()) {
                     GridComponent comp = null;
 
                     for (GridComponent c : ctx.components()) {
-                        if (c.discoveryDataType() != null && c.discoveryDataType().ordinal() == e.getKey()) {
+                        if (c.discoveryDataType() != null && c.discoveryDataType().ordinal() == entry.getKey()) {
                             comp = c;
 
                             break;
                         }
                     }
 
-                    if (comp != null)
-                        comp.onDiscoveryDataReceived(joiningNodeId, nodeId, e.getValue());
+                    if (comp != null) {
+                        try {
+                            Object compData = jdkMarsh.unmarshal(entry.getValue(), clsLdr);
+
+                            comp.onDiscoveryDataReceived(joiningNodeId, nodeId, compData);
+                        }
+                        catch (IgniteCheckedException e) {
+                            U.error(log, "Failed to unmarshal discovery data for component: "  + comp, e);
+                        }
+                    }
                     else
-                        U.warn(log, "Received discovery data for unknown component: " + e.getKey());
+                        U.warn(log, "Received discovery data for unknown component: " + entry.getKey());
                 }
             }
         });

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/33dbf24b/modules/core/src/main/java/org/apache/ignite/spi/discovery/DiscoverySpiDataExchange.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/DiscoverySpiDataExchange.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/DiscoverySpiDataExchange.java
index 29f6b5f..06f1af8 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/DiscoverySpiDataExchange.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/DiscoverySpiDataExchange.java
@@ -33,13 +33,18 @@ public interface DiscoverySpiDataExchange {
      * @param joiningNodeId ID of new node that joins topology.
      * @return Collection of discovery data objects from different components.
      */
-    public Map<Integer, Object> collect(UUID joiningNodeId);
+    public Map<Integer, byte[]> collect(UUID joiningNodeId);
 
     /**
      * Notifies discovery manager about data received from remote node.
      *
-     * @param joiningNodeId Remote node ID.
-     * @param data Collection of discovery data objects from different components.
+     * @param joiningNodeId Joining node ID.
+     * @param nodeId Remote node ID for which data is provided.
+     * @param data Collection of marshalled discovery data objects from different components.
+     * @param clsLdr Class loader to use for discovery data unmarshalling.
      */
-    public void onExchange(UUID joiningNodeId, UUID nodeId, Map<Integer, Object> data);
+    public void onExchange(UUID joiningNodeId,
+        UUID nodeId,
+        Map<Integer, byte[]> data,
+        ClassLoader clsLdr);
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/33dbf24b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpi.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpi.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpi.java
index bf69efb..6ced987 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpi.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpi.java
@@ -893,11 +893,15 @@ public class TcpClientDiscoverySpi extends TcpDiscoverySpiAdapter implements Tcp
                         if (msg.topologyHistory() != null)
                             topHist.putAll(msg.topologyHistory());
 
-                        Map<UUID, Map<Integer, Object>> dataMap = msg.oldNodesDiscoveryData();
+                        Map<UUID, Map<Integer, byte[]>> dataMap = msg.oldNodesDiscoveryData();
 
                         if (dataMap != null) {
-                            for (Map.Entry<UUID, Map<Integer, Object>> entry : dataMap.entrySet())
-                                exchange.onExchange(newNodeId, entry.getKey(), entry.getValue());
+                            for (Map.Entry<UUID, Map<Integer, byte[]>> entry : dataMap.entrySet()) {
+                                exchange.onExchange(newNodeId,
+                                    entry.getKey(),
+                                    entry.getValue(),
+                                    exchangeClassLoader(newNodeId));
+                            }
                         }
 
                         locNode.setAttributes(node.attributes());
@@ -917,10 +921,10 @@ public class TcpClientDiscoverySpi extends TcpDiscoverySpiAdapter implements Tcp
                     if (log.isDebugEnabled())
                         log.debug("Added new node to topology: " + node);
 
-                    Map<Integer, Object> data = msg.newNodeDiscoveryData();
+                    Map<Integer, byte[]> data = msg.newNodeDiscoveryData();
 
                     if (data != null)
-                        exchange.onExchange(newNodeId, newNodeId, data);
+                        exchange.onExchange(newNodeId, newNodeId, data, exchangeClassLoader(newNodeId));
                 }
             }
         }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/33dbf24b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
index bad8837..ef22291 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
@@ -2192,6 +2192,54 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
         return dfltAllowMatch && bothHaveSamePerms;
     }
 
+    /**
+     * @param req Get class request.
+     */
+    private TcpDiscoveryGetClassResponse processGetClassRequest(TcpDiscoveryGetClassRequest req) {
+        assert !F.isEmpty(req.className()) : req;
+
+        InputStream in = getClass().getResourceAsStream(req.className());
+
+        byte[] clsBytes = null;
+        String err = null;
+
+        if (in != null) {
+            try {
+                GridByteArrayList bytes = new GridByteArrayList(1024);
+
+                bytes.readAll(in);
+
+                clsBytes = bytes.entireArray();
+            }
+            catch (IOException e) {
+                err = "Failed to load class '" + req.className() + "' due IO error: " + e;
+
+                U.error(log, err, e);
+            }
+            finally {
+                U.close(in, log);
+            }
+        }
+        else {
+            if (log.isDebugEnabled())
+                log.debug("Failed to find requested class: " + req.className());
+
+            err = "Class '" + req.className() + "' not found.";
+        }
+
+        TcpDiscoveryGetClassResponse res;
+
+        if (clsBytes != null)
+            res = new TcpDiscoveryGetClassResponse(getLocalNodeId(), clsBytes);
+        else {
+            assert err != null;
+
+            res = new TcpDiscoveryGetClassResponse(getLocalNodeId(), err);
+        }
+
+        return res;
+    }
+
     /** {@inheritDoc} */
     @Override public String toString() {
         return S.toString(TcpDiscoverySpi.class, this);
@@ -3540,10 +3588,10 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
                 if (topChanged) {
                     assert !node.visible() : "Added visible node [node=" + node + ", locNode=" + locNode + ']';
 
-                    Map<Integer, Object> data = msg.newNodeDiscoveryData();
+                    Map<Integer, byte[]> data = msg.newNodeDiscoveryData();
 
                     if (data != null)
-                        exchange.onExchange(node.id(), node.id(), data);
+                        exchange.onExchange(node.id(), node.id(), data, exchangeClassLoader(node.id()));
 
                     msg.addDiscoveryData(locNodeId, exchange.collect(node.id()));
                 }
@@ -3555,7 +3603,7 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
 
             if (msg.verified() && locNodeId.equals(node.id())) {
                 // Discovery data.
-                Map<UUID, Map<Integer, Object>> dataMap;
+                Map<UUID, Map<Integer, byte[]>> dataMap;
 
                 synchronized (mux) {
                     if (spiState == CONNECTING && locNode.internalOrder() != node.internalOrder()) {
@@ -3614,8 +3662,12 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
 
                 // Notify outside of synchronized block.
                 if (dataMap != null) {
-                    for (Map.Entry<UUID, Map<Integer, Object>> entry : dataMap.entrySet())
-                        exchange.onExchange(node.id(), entry.getKey(), entry.getValue());
+                    for (Map.Entry<UUID, Map<Integer, byte[]>> entry : dataMap.entrySet()) {
+                        exchange.onExchange(node.id(),
+                            entry.getKey(),
+                            entry.getValue(),
+                            exchangeClassLoader(node.id()));
+                    }
                 }
             }
 
@@ -4872,6 +4924,13 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
 
                             continue;
                         }
+                        else if (msg instanceof TcpDiscoveryGetClassRequest) {
+                            TcpDiscoveryGetClassResponse res = processGetClassRequest((TcpDiscoveryGetClassRequest)msg);
+
+                            writeToSocket(sock, res);
+
+                            continue;
+                        }
 
                         msgWorker.addMessage(msg);
 
@@ -5162,4 +5221,70 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
             U.closeQuiet(sock);
         }
     }
+    /**
+     *
+     */
+    private class DiscoveryDeploymentClassLoader extends ClassLoader {
+        /** */
+        private final UUID nodeId;
+
+        /** */
+        private Socket sock;
+
+        /**
+         * @param nodeId Node ID.
+         */
+        public DiscoveryDeploymentClassLoader(UUID nodeId) {
+            this.nodeId = nodeId;
+        }
+
+        /** {@inheritDoc} */
+        @Override protected Class<?> findClass(String name) throws ClassNotFoundException {
+            TcpDiscoveryGetClassResponse res = requestClass(name);
+
+            if (res.error() != null)
+                throw new ClassNotFoundException(res.error());
+
+            assert res.classBytes() != null;
+
+            Class<?> cls = defineClass(name, res.classBytes(), 0, res.classBytes().length);
+
+            return cls;
+        }
+
+        /**
+         * @param name Class name.
+         * @return Class response.
+         * @throws ClassNotFoundException If request failed.
+         */
+        private TcpDiscoveryGetClassResponse requestClass(String name) throws ClassNotFoundException {
+            sock = connect();
+
+            if (sock == null)
+                throw new ClassNotFoundException("Failed to load class, can not connect to peer node " +
+                    "[cls=" + name + ", node=" + nodeId + ']');
+
+            try {
+                writeToSocket(sock, new TcpDiscoveryGetClassRequest(getLocalNodeId(), name));
+
+                TcpDiscoveryGetClassResponse res = readMessage(sock, null, netTimeout);
+
+                return res;
+            }
+            catch (IOException | IgniteCheckedException e) {
+                throw new ClassNotFoundException("Failed to load class: " + name, e);
+            }
+        }
+
+        private Socket connect() {
+            if (sock == null) {
+                TcpDiscoveryNode node = ring.node(nodeId);
+
+                if (node == null)
+                    return null;
+            }
+
+            return sock;
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/33dbf24b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiAdapter.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiAdapter.java
index e949846..51d28f9 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiAdapter.java
@@ -725,6 +725,19 @@ abstract class TcpDiscoverySpiAdapter extends IgniteSpiAdapter implements Discov
     }
 
     /**
+     * @param nodeId Node ID.
+     * @return Class loader for exchange data unmarshalling.
+     */
+    protected ClassLoader exchangeClassLoader(UUID nodeId) {
+        assert ignite != null;
+
+        if (!ignite.configuration().isPeerClassLoadingEnabled() || nodeId.equals(getLocalNodeId()))
+            return null;
+
+        return null;
+    }
+
+    /**
      * @param msg Message.
      * @return Whether delivery of the message is ensured.
      */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/33dbf24b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryGetClassRequest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryGetClassRequest.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryGetClassRequest.java
new file mode 100644
index 0000000..e372ea2
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryGetClassRequest.java
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.spi.discovery.tcp.messages;
+
+import java.util.*;
+
+/**
+ *
+ */
+public class TcpDiscoveryGetClassRequest extends TcpDiscoveryAbstractMessage {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /** */
+    private String clsName;
+
+    /**
+     * @param creatorNodeId Creator node ID.
+     * @param clsName Class name.
+     */
+    public TcpDiscoveryGetClassRequest(UUID creatorNodeId, String clsName) {
+        super(creatorNodeId);
+        this.clsName = clsName;
+    }
+
+    /**
+     * @return Class name.
+     */
+    public String className() {
+        return clsName;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/33dbf24b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryGetClassResponse.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryGetClassResponse.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryGetClassResponse.java
new file mode 100644
index 0000000..b1afe1c
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryGetClassResponse.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.spi.discovery.tcp.messages;
+
+import org.jetbrains.annotations.*;
+
+import java.util.*;
+
+/**
+ *
+ */
+public class TcpDiscoveryGetClassResponse extends TcpDiscoveryAbstractMessage {
+    /** */
+    private String errMsg;
+
+    /** */
+    private byte[] clsBytes;
+
+    /**
+     * @param creatorNodeId Creator node ID.
+     * @param clsBytes Class bytes.
+     */
+    public TcpDiscoveryGetClassResponse(UUID creatorNodeId, byte[] clsBytes) {
+        super(creatorNodeId);
+
+        this.clsBytes = clsBytes;
+    }
+
+    /**
+     * @param creatorNodeId Creator node ID.
+     * @param errMsg Error message.
+     */
+    public TcpDiscoveryGetClassResponse(UUID creatorNodeId, String errMsg) {
+        super(creatorNodeId);
+
+        this.errMsg = errMsg;
+    }
+
+    /**
+     * @return Error if class loading failed.
+     */
+    @Nullable public String error() {
+        return errMsg;
+    }
+
+    /**
+     * @return Loaded class bytes.
+     */
+    public byte[] classBytes() {
+        return clsBytes;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/33dbf24b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryJoinRequestMessage.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryJoinRequestMessage.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryJoinRequestMessage.java
index 5e6b892..5fd99b2 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryJoinRequestMessage.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryJoinRequestMessage.java
@@ -34,7 +34,7 @@ public class TcpDiscoveryJoinRequestMessage extends TcpDiscoveryAbstractMessage
     private final TcpDiscoveryNode node;
 
     /** Discovery data. */
-    private final Map<Integer, Object> discoData;
+    private final Map<Integer, byte[]> discoData;
 
     /**
      * Constructor.
@@ -42,7 +42,7 @@ public class TcpDiscoveryJoinRequestMessage extends TcpDiscoveryAbstractMessage
      * @param node New node that wants to join.
      * @param discoData Discovery data.
      */
-    public TcpDiscoveryJoinRequestMessage(TcpDiscoveryNode node, Map<Integer, Object> discoData) {
+    public TcpDiscoveryJoinRequestMessage(TcpDiscoveryNode node, Map<Integer, byte[]> discoData) {
         super(node.id());
 
         this.node = node;
@@ -61,7 +61,7 @@ public class TcpDiscoveryJoinRequestMessage extends TcpDiscoveryAbstractMessage
     /**
      * @return Discovery data.
      */
-    public Map<Integer, Object> discoveryData() {
+    public Map<Integer, byte[]> discoveryData() {
         return discoData;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/33dbf24b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryNodeAddedMessage.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryNodeAddedMessage.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryNodeAddedMessage.java
index 7b1704e..a9303f3 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryNodeAddedMessage.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryNodeAddedMessage.java
@@ -54,10 +54,10 @@ public class TcpDiscoveryNodeAddedMessage extends TcpDiscoveryAbstractMessage {
     private Map<Long, Collection<ClusterNode>> topHist;
 
     /** Discovery data from new node. */
-    private Map<Integer, Object> newNodeDiscoData;
+    private Map<Integer, byte[]> newNodeDiscoData;
 
     /** Discovery data from old nodes. */
-    private Map<UUID, Map<Integer, Object>> oldNodesDiscoData;
+    private Map<UUID, Map<Integer, byte[]>> oldNodesDiscoData;
 
     /** Start time of the first grid node. */
     private final long gridStartTime;
@@ -70,8 +70,9 @@ public class TcpDiscoveryNodeAddedMessage extends TcpDiscoveryAbstractMessage {
      * @param newNodeDiscoData New Node discovery data.
      * @param gridStartTime Start time of the first grid node.
      */
-    public TcpDiscoveryNodeAddedMessage(UUID creatorNodeId, TcpDiscoveryNode node,
-        Map<Integer, Object> newNodeDiscoData,
+    public TcpDiscoveryNodeAddedMessage(UUID creatorNodeId,
+        TcpDiscoveryNode node,
+        Map<Integer, byte[]> newNodeDiscoData,
         long gridStartTime)
     {
         super(creatorNodeId);
@@ -163,21 +164,22 @@ public class TcpDiscoveryNodeAddedMessage extends TcpDiscoveryAbstractMessage {
     /**
      * @return Discovery data from new node.
      */
-    public Map<Integer, Object> newNodeDiscoveryData() {
+    public Map<Integer, byte[]> newNodeDiscoveryData() {
         return newNodeDiscoData;
     }
 
     /**
      * @return Discovery data from old nodes.
      */
-    public Map<UUID, Map<Integer, Object>> oldNodesDiscoveryData() {
+    public Map<UUID, Map<Integer, byte[]>> oldNodesDiscoveryData() {
         return oldNodesDiscoData;
     }
 
     /**
+     * @param nodeId Node ID.
      * @param discoData Discovery data to add.
      */
-    public void addDiscoveryData(UUID nodeId, Map<Integer, Object> discoData) {
+    public void addDiscoveryData(UUID nodeId, Map<Integer, byte[]> discoData) {
         // Old nodes disco data may be null if message
         // makes more than 1 pass due to stopping of the nodes in topology.
         if (oldNodesDiscoData != null)

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/33dbf24b/modules/core/src/test/java/org/apache/ignite/spi/discovery/AbstractDiscoverySelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/spi/discovery/AbstractDiscoverySelfTest.java b/modules/core/src/test/java/org/apache/ignite/spi/discovery/AbstractDiscoverySelfTest.java
index 234e3cd..78710fe 100644
--- a/modules/core/src/test/java/org/apache/ignite/spi/discovery/AbstractDiscoverySelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/spi/discovery/AbstractDiscoverySelfTest.java
@@ -379,11 +379,14 @@ public abstract class AbstractDiscoverySelfTest<T extends IgniteSpi> extends Gri
                 });
 
                 spi.setDataExchange(new DiscoverySpiDataExchange() {
-                    @Override public Map<Integer, Object> collect(UUID nodeId) {
+                    @Override public Map<Integer, byte[]> collect(UUID nodeId) {
                         return new HashMap<>();
                     }
 
-                    @Override public void onExchange(UUID joiningNodeId, UUID nodeId, Map<Integer, Object> data) {
+                    @Override public void onExchange(UUID joiningNodeId,
+                        UUID nodeId,
+                        Map<Integer, byte[]> data,
+                        ClassLoader clsLdr) {
                         // No-op.
                     }
                 });

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/33dbf24b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiStartStopSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiStartStopSelfTest.java b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiStartStopSelfTest.java
index b0e22b4..6692046 100644
--- a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiStartStopSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiStartStopSelfTest.java
@@ -44,11 +44,14 @@ public class TcpDiscoverySpiStartStopSelfTest extends GridSpiStartStopAbstractTe
     @GridSpiTestConfig
     public DiscoverySpiDataExchange getDataExchange() {
         return new DiscoverySpiDataExchange() {
-            @Override public Map<Integer, Object> collect(UUID nodeId) {
+            @Override public Map<Integer, byte[]> collect(UUID nodeId) {
                 return null;
             }
 
-            @Override public void onExchange(UUID joiningNodeId, UUID nodeId, Map<Integer, Object> data) {
+            @Override public void onExchange(UUID joiningNodeId,
+                UUID nodeId,
+                Map<Integer, byte[]> data,
+                ClassLoader clsLdr) {
                 // No-op.
             }
         };

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/33dbf24b/modules/core/src/test/java/org/apache/ignite/testframework/junits/spi/GridSpiAbstractTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/junits/spi/GridSpiAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/testframework/junits/spi/GridSpiAbstractTest.java
index 7898c3d..7b83979 100644
--- a/modules/core/src/test/java/org/apache/ignite/testframework/junits/spi/GridSpiAbstractTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/testframework/junits/spi/GridSpiAbstractTest.java
@@ -215,11 +215,14 @@ public abstract class GridSpiAbstractTest<T extends IgniteSpi> extends GridAbstr
             discoSpi.setMetricsProvider(createMetricsProvider());
 
             discoSpi.setDataExchange(new DiscoverySpiDataExchange() {
-                @Override public Map<Integer, Object> collect(UUID nodeId) {
+                @Override public Map<Integer, byte[]> collect(UUID nodeId) {
                     return new HashMap<>();
                 }
 
-                @Override public void onExchange(UUID joiningNodeId, UUID nodeId, Map<Integer, Object> data) {
+                @Override public void onExchange(UUID joiningNodeId,
+                    UUID nodeId,
+                    Map<Integer, byte[]> data,
+                    ClassLoader clsLdr) {
                 }
             });
 


[09/31] incubator-ignite git commit: #ignite-537: test

Posted by ag...@apache.org.
#ignite-537: test


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

Branch: refs/heads/ignite-721
Commit: e544aaab7ae759631cd73b40f745ac23f32b84bc
Parents: c1c1cf9
Author: ivasilinets <iv...@gridgain.com>
Authored: Fri Apr 10 15:15:57 2015 +0300
Committer: ivasilinets <iv...@gridgain.com>
Committed: Fri Apr 10 15:15:57 2015 +0300

----------------------------------------------------------------------
 .../p2p/GridMultiJvmClassPathSelfTest.java      | 109 +++++++++++++++++++
 1 file changed, 109 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/e544aaab/modules/spring/src/test/java/org/apache/ignite/p2p/GridMultiJvmClassPathSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/spring/src/test/java/org/apache/ignite/p2p/GridMultiJvmClassPathSelfTest.java b/modules/spring/src/test/java/org/apache/ignite/p2p/GridMultiJvmClassPathSelfTest.java
new file mode 100644
index 0000000..00b61b1
--- /dev/null
+++ b/modules/spring/src/test/java/org/apache/ignite/p2p/GridMultiJvmClassPathSelfTest.java
@@ -0,0 +1,109 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.p2p;
+
+import org.apache.ignite.*;
+import org.apache.ignite.internal.util.*;
+import org.apache.ignite.internal.util.typedef.*;
+import org.apache.ignite.internal.util.typedef.internal.*;
+import org.apache.ignite.testframework.config.*;
+import org.apache.ignite.testframework.junits.common.*;
+
+import java.util.concurrent.*;
+
+/**
+ * Test.
+ */
+public class GridMultiJvmClassPathSelfTest extends GridCommonAbstractTest {
+    private static String START = "Start external node";
+
+    public static void main(String[] args) throws Exception {
+        U.setWorkDirectory(null, U.getIgniteHome());
+
+        // Tell our process PID to the wrapper.
+        X.println(GridJavaProcess.PID_MSG_PREFIX + U.jvmPid());
+
+        X.println("Java path: " + System.getProperty("java.class.path"));
+
+        try (Ignite ignite = Ignition.start("examples/config/example-ignite.xml")) {
+            X.println(START);
+            U.sleep(10000);
+        }
+    }
+    /**
+     * @throws Exception If failed.
+     */
+    public void testDifferentClassPath() throws Exception {
+        final CountDownLatch killedLatch = new CountDownLatch(2);
+
+        final CountDownLatch readyLatch = new CountDownLatch(2);
+
+        GridJavaProcess proc1 = GridJavaProcess.exec(
+            GridMultiJvmClassPathSelfTest.class, null,
+            log,
+            new CI1<String>() {
+                @Override public void apply(String s) {
+                    info("Process 1 prints: " + s);
+
+                    if (s.startsWith(START))
+                        readyLatch.countDown();
+                }
+            },
+            new CA() {
+                @Override public void apply() {
+                    info("Process 1 is killed");
+
+                    killedLatch.countDown();
+                }
+            },
+            null,
+            null
+        );
+
+        GridJavaProcess proc2 = GridJavaProcess.exec(
+            GridMultiJvmClassPathSelfTest.class, null,
+            log,
+            new CI1<String>() {
+                @Override public void apply(String s) {
+                    info("Process 2 prints: " + s);
+
+                    if (s.contains(START))
+                        readyLatch.countDown();
+                }
+            },
+            new CA() {
+                @Override public void apply() {
+                    info("Process 2 is killed");
+
+                    killedLatch.countDown();
+                }
+            },
+            null,
+            GridTestProperties.getProperty("p2p.uri.cls")
+        );
+
+        readyLatch.await();
+
+        try(Ignite ignite = Ignition.start("examples/config/example-ignite.xml")){
+            proc1.kill();
+            proc2.kill();
+
+            killedLatch.await();
+        }
+    }
+}


[23/31] incubator-ignite git commit: # ignite-537

Posted by ag...@apache.org.
# ignite-537


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

Branch: refs/heads/ignite-721
Commit: 35537fa02b60f404b0f2ecd8620fdc83c7d26a61
Parents: 4957a35
Author: sboikov <se...@inria.fr>
Authored: Fri Apr 10 22:32:08 2015 +0300
Committer: sboikov <se...@inria.fr>
Committed: Fri Apr 10 22:32:08 2015 +0300

----------------------------------------------------------------------
 .../java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java   | 1 +
 1 file changed, 1 insertion(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/35537fa0/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
index b61a402..3301303 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
@@ -290,6 +290,7 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
     private ConcurrentLinkedDeque<String> debugLog;
 
     /** Class loaders for event data unmarshalling. */
+    @GridToStringExclude
     private transient ConcurrentMap<UUID, DiscoveryDeploymentClassLoader> p2pLdrs = new ConcurrentHashMap<>();
 
     /** {@inheritDoc} */


[19/31] incubator-ignite git commit: # ignite-537

Posted by ag...@apache.org.
# ignite-537


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

Branch: refs/heads/ignite-721
Commit: f316e9afa523a945d8d02886a896fc6add8d83c6
Parents: c85175b
Author: sboikov <se...@inria.fr>
Authored: Fri Apr 10 20:58:20 2015 +0300
Committer: sboikov <se...@inria.fr>
Committed: Fri Apr 10 20:58:20 2015 +0300

----------------------------------------------------------------------
 .../org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java  | 7 +++++++
 1 file changed, 7 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/f316e9af/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
index d9cec3c..bf8cbdb 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
@@ -5462,6 +5462,13 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
 
         /** {@inheritDoc} */
         @Override protected Class<?> findClass(String name) throws ClassNotFoundException {
+            try {
+                return U.gridClassLoader().loadClass(name);
+            }
+            catch (ClassNotFoundException ignore) {
+                // Ignore.
+            }
+
             lock.readLock().lock();
 
             try {


[17/31] incubator-ignite git commit: # ignite-537

Posted by ag...@apache.org.
# ignite-537


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

Branch: refs/heads/ignite-721
Commit: c85175b7ebaf24c0c1cd3519b4c9889ca7efb071
Parents: 876beff
Author: sboikov <se...@inria.fr>
Authored: Fri Apr 10 20:43:20 2015 +0300
Committer: sboikov <se...@inria.fr>
Committed: Fri Apr 10 20:43:20 2015 +0300

----------------------------------------------------------------------
 .../spi/discovery/tcp/TcpDiscoverySpi.java      | 24 ++++++++++++--------
 1 file changed, 14 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/c85175b7/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
index 117166f..d9cec3c 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
@@ -2328,19 +2328,23 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
     private Map<Integer, byte[]> collectExchangeData(UUID nodeId) throws IgniteSpiException {
         Map<Integer, Serializable> data = exchange.collect(nodeId);
 
-        Map<Integer, byte[]> data0 = U.newHashMap(data.size());
+        Map<Integer, byte[]> data0 = null;
 
-        for (Map.Entry<Integer, Serializable> entry : data.entrySet()) {
-            try {
-                byte[] bytes = marsh.marshal(entry.getValue());
+        if (data != null) {
+            data0 = U.newHashMap(data.size());
 
-                data0.put(entry.getKey(), bytes);
-            }
-            catch (IgniteCheckedException e) {
-                U.error(log, "Failed to marshal discovery data " +
-                    "[comp=" + entry.getKey() + ", data=" + entry.getValue() + ']', e);
+            for (Map.Entry<Integer, Serializable> entry : data.entrySet()) {
+                try {
+                    byte[] bytes = marsh.marshal(entry.getValue());
 
-                throw new IgniteSpiException("Failed to marshal discovery data.", e);
+                    data0.put(entry.getKey(), bytes);
+                }
+                catch (IgniteCheckedException e) {
+                    U.error(log, "Failed to marshal discovery data " +
+                        "[comp=" + entry.getKey() + ", data=" + entry.getValue() + ']', e);
+
+                    throw new IgniteSpiException("Failed to marshal discovery data.", e);
+                }
             }
         }
 


[21/31] incubator-ignite git commit: Merge remote-tracking branch 'remotes/origin/ignite-sprint-3' into ignite-537

Posted by ag...@apache.org.
Merge remote-tracking branch 'remotes/origin/ignite-sprint-3' into ignite-537


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

Branch: refs/heads/ignite-721
Commit: b9100618ecdd0626c8942017511589616161631b
Parents: 439af36 c3210d8
Author: sboikov <se...@inria.fr>
Authored: Fri Apr 10 21:16:40 2015 +0300
Committer: sboikov <se...@inria.fr>
Committed: Fri Apr 10 21:16:40 2015 +0300

----------------------------------------------------------------------
 .../ignite/internal/processors/igfs/IgfsInputStreamImpl.java   | 2 +-
 .../ignite/internal/processors/igfs/IgfsOutputStreamImpl.java  | 6 +++---
 2 files changed, 4 insertions(+), 4 deletions(-)
----------------------------------------------------------------------



[04/31] incubator-ignite git commit: Merge remote-tracking branch 'remotes/origin/ignite-sprint-3' into ignite-537

Posted by ag...@apache.org.
Merge remote-tracking branch 'remotes/origin/ignite-sprint-3' into ignite-537


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

Branch: refs/heads/ignite-721
Commit: c1c1cf9433190e2ae944b1559ec94a2c925d7f7b
Parents: 88e1ff8 845787c
Author: sboikov <sb...@gridgain.com>
Authored: Fri Apr 10 08:59:33 2015 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Fri Apr 10 08:59:33 2015 +0300

----------------------------------------------------------------------
 DEVNOTES.txt                                    |  4 +-
 .../java/org/apache/ignite/IgniteCache.java     |  6 ++-
 .../processors/cache/GridCacheAdapter.java      | 25 +++++++-----
 .../distributed/dht/GridDhtLockFuture.java      |  3 +-
 .../GridCacheAffinityBackupsSelfTest.java       | 15 ++++----
 .../cache/GridCacheAbstractFullApiSelfTest.java | 13 ++++---
 .../GridCacheAbstractIteratorsSelfTest.java     |  3 +-
 .../cache/GridCacheAbstractSelfTest.java        | 10 ++---
 .../cache/GridCacheClearAllSelfTest.java        |  2 +-
 .../cache/GridCacheDeploymentSelfTest.java      |  9 +++--
 .../GridCachePreloadingEvictionsSelfTest.java   | 23 +++++------
 .../cache/GridCacheSwapPreloadSelfTest.java     |  5 ++-
 .../cache/IgniteCachePeekModesAbstractTest.java | 40 ++++++++++----------
 .../GridCacheMultiNodeAbstractTest.java         | 13 ++++---
 .../dht/GridCacheDhtEntrySelfTest.java          | 12 +++---
 .../dht/GridCacheDhtPreloadUnloadSelfTest.java  |  2 +-
 .../near/GridCacheNearMultiNodeSelfTest.java    | 26 ++++++-------
 ...idCacheNearOnlyMultiNodeFullApiSelfTest.java |  2 +-
 ...achePartitionedMultiNodeFullApiSelfTest.java |  6 +--
 .../near/IgniteCacheNearReadCommittedTest.java  |  4 +-
 ...CacheReplicatedPreloadLifecycleSelfTest.java |  5 ++-
 .../GridCacheReplicatedPreloadSelfTest.java     | 23 ++++++-----
 .../junits/common/GridCommonAbstractTest.java   | 13 ++++++-
 ...CacheOffheapTieredMultithreadedSelfTest.java |  4 +-
 .../cache/ttl/CacheTtlAbstractSelfTest.java     | 14 +++----
 .../IgniteCacheQuerySelfTestSuite.java          |  1 +
 26 files changed, 157 insertions(+), 126 deletions(-)
----------------------------------------------------------------------



[10/31] incubator-ignite git commit: Merge branch 'ignite-537' of https://git-wip-us.apache.org/repos/asf/incubator-ignite into ignite-537

Posted by ag...@apache.org.
Merge branch 'ignite-537' of https://git-wip-us.apache.org/repos/asf/incubator-ignite into ignite-537


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

Branch: refs/heads/ignite-721
Commit: 49996e718443557200de54b3d655c12589258b31
Parents: e544aaa 3ca7c8a
Author: ivasilinets <iv...@gridgain.com>
Authored: Fri Apr 10 15:16:38 2015 +0300
Committer: ivasilinets <iv...@gridgain.com>
Committed: Fri Apr 10 15:16:38 2015 +0300

----------------------------------------------------------------------
 assembly/release-hadoop.xml                     |   4 -
 bin/ignitevisorcmd.bat                          |  39 +-
 .../examples/MessagingExamplesSelfTest.java     |   2 +-
 .../java8/examples/BasicExamplesSelfTest.java   |   3 +
 .../java8/examples/CacheExamplesSelfTest.java   |   4 +
 .../examples/CheckpointExamplesSelfTest.java    |   3 +
 .../examples/ClusterGroupExampleSelfTest.java   |   3 +-
 .../examples/ContinuationExamplesSelfTest.java  |   3 +
 .../ContinuousMapperExamplesSelfTest.java       |   4 +-
 .../DeploymentExamplesMultiNodeSelfTest.java    |   2 +
 .../examples/DeploymentExamplesSelfTest.java    |   2 +
 .../HibernateL2CacheExampleSelfTest.java        |   3 +
 .../java8/examples/IgfsExamplesSelfTest.java    |   3 +
 .../examples/LifecycleExamplesSelfTest.java     |   3 +
 .../MemcacheRestExamplesMultiNodeSelfTest.java  |   2 +
 .../examples/MemcacheRestExamplesSelfTest.java  |   2 +
 .../examples/MessagingExamplesSelfTest.java     |   4 +-
 .../examples/MonteCarloExamplesSelfTest.java    |   3 +
 .../examples/SpringBeanExamplesSelfTest.java    |   3 +
 .../java8/examples/TaskExamplesSelfTest.java    |   2 +
 .../client/ClientReconnectionSelfTest.java      |  67 +--
 .../ignite/codegen/MessageCodeGenerator.java    |   1 -
 modules/core/pom.xml                            |   2 +-
 .../java/org/apache/ignite/IgniteCache.java     |  18 +
 .../java/org/apache/ignite/IgniteState.java     |   2 +-
 .../configuration/CacheConfiguration.java       |  69 ++-
 .../configuration/IgniteConfiguration.java      |  35 +-
 .../internal/ComputeTaskInternalFuture.java     |   2 +-
 .../ignite/internal/GridJobExecuteRequest.java  |  10 +-
 .../ignite/internal/GridJobExecuteResponse.java |   4 +-
 .../apache/ignite/internal/GridTaskMessage.java |  30 --
 .../ignite/internal/GridTaskSessionRequest.java |   6 +-
 .../org/apache/ignite/internal/IgnitionEx.java  |   4 +-
 .../client/GridClientConfiguration.java         |  14 +-
 .../GridClientConnectionManagerAdapter.java     |   2 +-
 .../router/GridTcpRouterConfiguration.java      |   6 +-
 .../internal/cluster/ClusterGroupAdapter.java   | 150 +++++-
 .../internal/managers/GridManagerAdapter.java   |   4 +-
 .../discovery/GridDiscoveryManager.java         |  32 +-
 .../eventstorage/GridEventStorageManager.java   |   4 +-
 .../processors/cache/CacheMetricsImpl.java      |   7 +-
 .../processors/cache/CacheMetricsSnapshot.java  | 223 +++++++-
 .../processors/cache/GridCacheAdapter.java      |  12 +-
 .../processors/cache/GridCacheContext.java      |  64 ++-
 .../cache/GridCacheEvictionManager.java         |   6 +-
 .../cache/GridCacheExplicitLockSpan.java        |   2 +-
 .../processors/cache/GridCacheMapEntry.java     |   6 +-
 .../processors/cache/GridCacheMvcc.java         |   2 +-
 .../cache/GridCacheMvccCandidate.java           |  50 +-
 .../processors/cache/GridCacheMvccManager.java  |  44 +-
 .../processors/cache/GridCacheProcessor.java    |  52 +-
 .../processors/cache/IgniteCacheProxy.java      |  26 +
 .../distributed/GridDistributedCacheEntry.java  |  12 +-
 .../distributed/dht/GridDhtCacheEntry.java      |  36 +-
 .../distributed/dht/GridDhtLockFuture.java      |  15 +-
 .../dht/GridDhtTransactionalCacheAdapter.java   |  14 +-
 .../distributed/dht/GridDhtTxFinishFuture.java  |  22 +-
 .../cache/distributed/dht/GridDhtTxLocal.java   |   2 +
 .../distributed/dht/GridDhtTxLocalAdapter.java  |  30 +-
 .../distributed/dht/GridDhtTxPrepareFuture.java |  28 +-
 .../dht/atomic/GridDhtAtomicCache.java          |   6 +-
 .../dht/colocated/GridDhtColocatedCache.java    |  35 +-
 .../colocated/GridDhtColocatedLockFuture.java   |  46 +-
 .../GridDhtPartitionsExchangeFuture.java        |  39 +-
 .../distributed/near/GridNearAtomicCache.java   |   2 +-
 .../distributed/near/GridNearCacheEntry.java    |  10 +-
 .../distributed/near/GridNearLockFuture.java    |  13 +-
 .../near/GridNearTransactionalCache.java        |   2 +-
 .../near/GridNearTxFinishFuture.java            |   8 +-
 .../cache/distributed/near/GridNearTxLocal.java |   7 +
 .../near/GridNearTxPrepareFuture.java           | 122 +++--
 .../near/GridNearTxPrepareRequest.java          |  64 ++-
 .../local/atomic/GridLocalAtomicCache.java      |   6 +-
 .../cache/query/GridCacheQueryAdapter.java      |   2 +-
 .../continuous/CacheContinuousQueryManager.java |   2 +-
 .../cache/transactions/IgniteTxAdapter.java     |   3 +-
 .../cache/transactions/IgniteTxHandler.java     | 120 ++++-
 .../transactions/IgniteTxLocalAdapter.java      |  82 +--
 .../cache/transactions/IgniteTxManager.java     |   7 +
 .../continuous/GridContinuousProcessor.java     |  25 +-
 .../internal/processors/igfs/IgfsAsyncImpl.java |   4 +-
 .../ignite/internal/processors/igfs/IgfsEx.java |   4 +-
 .../processors/igfs/IgfsFileWorker.java         | 180 -------
 .../processors/igfs/IgfsFileWorkerBatch.java    | 225 ++++----
 .../processors/igfs/IgfsFileWorkerTask.java     |  32 --
 .../internal/processors/igfs/IgfsImpl.java      | 150 ++++--
 .../internal/processors/igfs/IgfsProcessor.java |   2 +-
 .../processors/rest/GridRestProcessor.java      |  33 +-
 .../security/GridSecurityProcessor.java         |  13 +-
 .../processors/security/SecurityContext.java    |   8 +-
 .../security/os/GridOsSecurityProcessor.java    |  11 +-
 .../processors/task/GridTaskProcessor.java      |   9 +-
 .../internal/util/future/GridFutureAdapter.java |  20 +-
 .../ignite/internal/util/worker/GridWorker.java |   6 +-
 .../visor/cache/VisorCacheClearTask.java        |   3 +
 .../cache/VisorCacheQueryConfiguration.java     |   9 -
 .../internal/visor/log/VisorLogSearchTask.java  |  12 +-
 .../node/VisorNodeEventsCollectorTask.java      |   3 +
 .../node/VisorSegmentationConfiguration.java    |   4 +-
 .../internal/visor/util/VisorTaskUtils.java     |   3 +
 .../plugin/security/AuthenticationContext.java  |  12 +-
 .../security/GridSecurityCredentials.java       | 184 -------
 .../GridSecurityCredentialsBasicProvider.java   |  44 --
 .../GridSecurityCredentialsProvider.java        |  44 --
 .../plugin/security/GridSecurityException.java  |  58 --
 .../plugin/security/GridSecurityPermission.java |  69 ---
 .../security/GridSecurityPermissionSet.java     |  66 ---
 .../plugin/security/GridSecuritySubject.java    |  62 ---
 .../security/GridSecuritySubjectType.java       |  48 --
 .../plugin/security/SecurityCredentials.java    | 191 +++++++
 .../SecurityCredentialsBasicProvider.java       |  44 ++
 .../security/SecurityCredentialsProvider.java   |  44 ++
 .../plugin/security/SecurityException.java      |  61 +++
 .../plugin/security/SecurityPermission.java     |  69 +++
 .../plugin/security/SecurityPermissionSet.java  |  66 +++
 .../ignite/plugin/security/SecuritySubject.java |  62 +++
 .../plugin/security/SecuritySubjectType.java    |  48 ++
 .../segmentation/GridSegmentationPolicy.java    |  47 --
 .../segmentation/GridSegmentationResolver.java  |  64 ---
 .../plugin/segmentation/SegmentationPolicy.java |  49 ++
 .../segmentation/SegmentationResolver.java      |  65 +++
 .../org/apache/ignite/spi/IgniteSpiAdapter.java |   4 +-
 .../org/apache/ignite/spi/IgniteSpiContext.java |   4 +-
 .../spi/discovery/DiscoveryMetricsProvider.java |  10 +
 .../spi/discovery/DiscoverySpiDataExchange.java |   9 +-
 .../DiscoverySpiNodeAuthenticator.java          |   2 +-
 .../discovery/tcp/TcpClientDiscoverySpi.java    |  46 +-
 .../spi/discovery/tcp/TcpDiscoverySpi.java      | 539 ++++++++++++-------
 .../discovery/tcp/TcpDiscoverySpiAdapter.java   |  27 +
 .../tcp/internal/TcpDiscoveryNode.java          |  76 ++-
 .../TcpDiscoveryCustomEventMessage.java         |  14 +-
 .../messages/TcpDiscoveryGetClassRequest.java   |   1 +
 .../messages/TcpDiscoveryGetClassResponse.java  |   3 +
 .../messages/TcpDiscoveryHeartbeatMessage.java  |  65 +++
 .../startup/cmdline/CommandLineStartup.java     |   7 +-
 .../internal/GridLifecycleAwareSelfTest.java    |   2 +-
 .../ignite/internal/GridProjectionSelfTest.java |  82 +++
 .../ignite/internal/GridStartStopSelfTest.java  |   8 +-
 .../CacheMetricsForClusterGroupSelfTest.java    | 236 ++++++++
 .../cache/GridCacheBasicApiAbstractTest.java    |   4 +-
 ...CacheOffHeapMultiThreadedUpdateSelfTest.java |  42 +-
 .../GridCacheOffHeapTieredAbstractSelfTest.java |   4 +-
 .../cache/GridCacheReloadSelfTest.java          |   3 +-
 .../GridCacheReturnValueTransferSelfTest.java   |  15 +-
 .../IgniteTxMultiThreadedAbstractTest.java      |   5 +-
 ...GridCacheQueueMultiNodeAbstractSelfTest.java |   5 +-
 .../GridCacheSetAbstractSelfTest.java           |  10 +-
 .../GridCacheSetFailoverAbstractSelfTest.java   |   6 +-
 .../distributed/GridCacheEventAbstractTest.java |  16 +-
 .../GridCacheNodeFailureAbstractTest.java       |  15 +-
 .../dht/IgniteCacheLockFailoverSelfTest.java    | 156 ++++++
 .../dht/IgniteCacheMultiTxLockSelfTest.java     | 219 ++++++++
 ...licatedNearOnlyMultiNodeFullApiSelfTest.java |   2 +-
 .../continuous/GridEventConsumeSelfTest.java    |   5 +-
 .../processors/igfs/IgfsAbstractSelfTest.java   |  24 +-
 .../tostring/GridToStringBuilderSelfTest.java   |   5 +-
 .../GridP2PMissedResourceCacheSizeSelfTest.java |   2 +-
 .../discovery/AbstractDiscoverySelfTest.java    |   4 +-
 .../tcp/TcpClientDiscoverySelfTest.java         |   5 +-
 .../tcp/TcpDiscoverySpiStartStopSelfTest.java   |   4 +-
 .../testframework/GridSpiTestContext.java       |   4 +-
 .../testframework/junits/GridAbstractTest.java  |   6 +-
 .../junits/spi/GridSpiAbstractTest.java         |  76 +--
 .../IgniteCacheMetricsSelfTestSuite.java        |   4 +
 .../ignite/testsuites/IgniteCacheTestSuite.java |   3 +
 .../IgniteSpiDiscoverySelfTestSuite.java        |   2 +
 ...rrentLinkedHashMapMultiThreadedSelfTest.java |   4 +-
 .../p2p/startcache/CacheAllNodesFilter.java     |  31 ++
 .../startcache/CacheConfigP2PStartClient.java   | 116 ++++
 .../HadoopDefaultMapReducePlannerSelfTest.java  |   2 +-
 .../GridCacheAbstractFieldsQuerySelfTest.java   |  10 +-
 .../processors/cache/GridCacheSwapSelfTest.java |   5 +-
 ...hePartitionedQueryMultiThreadedSelfTest.java |   2 +-
 .../cache/IgniteCacheQueryIndexSelfTest.java    |   3 +-
 .../IgniteCachePartitionedQuerySelfTest.java    |   5 +-
 .../IgniteCacheReplicatedQuerySelfTest.java     |  18 +-
 .../processors/cache/GridCacheJtaSelfTest.java  |   6 +-
 .../http/jetty/GridJettyRestHandler.java        |   2 +-
 .../p2p/GridP2PUserVersionChangeSelfTest.java   |   8 +-
 .../ignite/tools/classgen/ClassesGenerator.java |   2 +-
 .../ignite/visor/commands/VisorConsole.scala    |  19 +
 181 files changed, 3892 insertions(+), 2060 deletions(-)
----------------------------------------------------------------------



[05/31] incubator-ignite git commit: # ignite-537

Posted by ag...@apache.org.
# ignite-537


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

Branch: refs/heads/ignite-721
Commit: b8870305c74ea5ed489a98de73086e5bb67ff9a3
Parents: c1c1cf9
Author: sboikov <sb...@gridgain.com>
Authored: Fri Apr 10 13:16:28 2015 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Fri Apr 10 14:48:44 2015 +0300

----------------------------------------------------------------------
 .../continuous/GridContinuousProcessor.java     |  25 +-
 .../spi/discovery/DiscoverySpiDataExchange.java |   9 +-
 .../discovery/tcp/TcpClientDiscoverySpi.java    |  11 +-
 .../spi/discovery/tcp/TcpDiscoverySpi.java      | 482 ++++++++++++-------
 .../discovery/tcp/TcpDiscoverySpiAdapter.java   |  27 ++
 .../TcpDiscoveryCustomEventMessage.java         |  14 +-
 .../messages/TcpDiscoveryGetClassResponse.java  |   3 +
 .../continuous/GridEventConsumeSelfTest.java    |   2 +-
 .../discovery/AbstractDiscoverySelfTest.java    |   4 +-
 .../tcp/TcpDiscoverySpiStartStopSelfTest.java   |   4 +-
 .../junits/spi/GridSpiAbstractTest.java         |   4 +-
 11 files changed, 357 insertions(+), 228 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b8870305/modules/core/src/main/java/org/apache/ignite/internal/processors/continuous/GridContinuousProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/continuous/GridContinuousProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/continuous/GridContinuousProcessor.java
index 99b9c0c..54da8e6 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/continuous/GridContinuousProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/continuous/GridContinuousProcessor.java
@@ -30,7 +30,6 @@ import org.apache.ignite.internal.processors.cache.*;
 import org.apache.ignite.internal.processors.timeout.*;
 import org.apache.ignite.internal.util.*;
 import org.apache.ignite.internal.util.future.*;
-import org.apache.ignite.internal.util.lang.*;
 import org.apache.ignite.internal.util.tostring.*;
 import org.apache.ignite.internal.util.typedef.*;
 import org.apache.ignite.internal.util.typedef.internal.*;
@@ -1560,7 +1559,7 @@ public class GridContinuousProcessor extends GridProcessorAdapter {
     /**
      * Discovery data.
      */
-    private static class DiscoveryData implements Externalizable, GridPeerDeployAware {
+    private static class DiscoveryData implements Externalizable {
         /** */
         private static final long serialVersionUID = 0L;
 
@@ -1578,16 +1577,6 @@ public class GridContinuousProcessor extends GridProcessorAdapter {
             // No-op.
         }
 
-        @Override
-        public Class<?> deployClass() {
-            return U.peerDeployAware0(items).deployClass();
-        }
-
-        @Override
-        public ClassLoader classLoader() {
-            return U.peerDeployAware0(items).classLoader();
-        }
-
         /**
          * @param nodeId Node ID.
          */
@@ -1627,7 +1616,7 @@ public class GridContinuousProcessor extends GridProcessorAdapter {
     /**
      * Discovery data item.
      */
-    private static class DiscoveryDataItem implements Externalizable, GridPeerDeployAware {
+    private static class DiscoveryDataItem implements Externalizable {
         /** */
         private static final long serialVersionUID = 0L;
 
@@ -1677,16 +1666,6 @@ public class GridContinuousProcessor extends GridProcessorAdapter {
             this.interval = interval;
         }
 
-        @Override
-        public Class<?> deployClass() {
-            return prjPred.getClass();
-        }
-
-        @Override
-        public ClassLoader classLoader() {
-            return prjPred.getClass().getClassLoader();
-        }
-
         /** {@inheritDoc} */
         @Override public void writeExternal(ObjectOutput out) throws IOException {
             U.writeUuid(out, routineId);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b8870305/modules/core/src/main/java/org/apache/ignite/spi/discovery/DiscoverySpiDataExchange.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/DiscoverySpiDataExchange.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/DiscoverySpiDataExchange.java
index 1f64c87..29f6b5f 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/DiscoverySpiDataExchange.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/DiscoverySpiDataExchange.java
@@ -38,11 +38,8 @@ public interface DiscoverySpiDataExchange {
     /**
      * Notifies discovery manager about data received from remote node.
      *
-     * @param joiningNodeId Joining node ID.
-     * @param nodeId Remote node ID for which data is provided.
-     * @param data Collection of marshalled discovery data objects from different components.
+     * @param joiningNodeId Remote node ID.
+     * @param data Collection of discovery data objects from different components.
      */
-    public void onExchange(UUID joiningNodeId,
-        UUID nodeId,
-        Map<Integer, Object> data);
+    public void onExchange(UUID joiningNodeId, UUID nodeId, Map<Integer, Object> data);
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b8870305/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpi.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpi.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpi.java
index f613f4a..4a448f2 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpi.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpi.java
@@ -896,11 +896,8 @@ public class TcpClientDiscoverySpi extends TcpDiscoverySpiAdapter implements Tcp
                         Map<UUID, Map<Integer, byte[]>> dataMap = msg.oldNodesDiscoveryData();
 
                         if (dataMap != null) {
-                            for (Map.Entry<UUID, Map<Integer, byte[]>> entry : dataMap.entrySet()) {
-//                                exchange.onExchange(newNodeId,
-//                                    entry.getKey(),
-//                                    entry.getValue());
-                            }
+                            for (Map.Entry<UUID, Map<Integer, byte[]>> entry : dataMap.entrySet())
+                                onExchange(newNodeId, entry.getKey(), entry.getValue(), null);
                         }
 
                         locNode.setAttributes(node.attributes());
@@ -922,8 +919,8 @@ public class TcpClientDiscoverySpi extends TcpDiscoverySpiAdapter implements Tcp
 
                     Map<Integer, byte[]> data = msg.newNodeDiscoveryData();
 
-//                    if (data != null)
-//                        exchange.onExchange(newNodeId, newNodeId, data);
+                    if (data != null)
+                        onExchange(newNodeId, newNodeId, data, null);
                 }
             }
         }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b8870305/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
index 3fa6fd1..bc0fec5 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
@@ -50,6 +50,7 @@ import java.net.*;
 import java.text.*;
 import java.util.*;
 import java.util.concurrent.*;
+import java.util.concurrent.locks.*;
 
 import static org.apache.ignite.events.EventType.*;
 import static org.apache.ignite.internal.IgniteNodeAttributes.*;
@@ -287,6 +288,15 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
     @SuppressWarnings("FieldAccessedSynchronizedAndUnsynchronized")
     private ConcurrentLinkedDeque<String> debugLog;
 
+    /** */
+    private DeploymentClassLoadersCleaner p2pLdrCleaner;
+
+    /** Class loaders for event data unmarshalling. */
+    private ConcurrentMap<UUID, DiscoveryDeploymentClassLoader> p2pLdrs = new ConcurrentHashMap<>();
+
+    /** Class loader for local data unmarshalling. */
+    private ClassLoader locLdr = U.gridClassLoader();
+
     /** {@inheritDoc} */
     @IgniteInstanceResource
     @Override public void injectResources(Ignite ignite) {
@@ -764,6 +774,11 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
             ipFinderCleaner.start();
         }
 
+        if (ignite.configuration().isPeerClassLoadingEnabled()) {
+            p2pLdrCleaner = new DeploymentClassLoadersCleaner();
+            p2pLdrCleaner.start();
+        }
+
         if (log.isDebugEnabled() && !restart)
             log.debug(startInfo());
 
@@ -988,6 +1003,9 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
         U.interrupt(statsPrinter);
         U.join(statsPrinter, log);
 
+        U.interrupt(p2pLdrCleaner);
+        U.join(p2pLdrCleaner, log);
+
         if (ipFinder != null)
             ipFinder.close();
 
@@ -1246,7 +1264,16 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
 
     /** {@inheritDoc} */
     @Override public void sendCustomEvent(Serializable evt) {
-        msgWorker.addMessage(new TcpDiscoveryCustomEventMessage(getLocalNodeId(), evt));
+        byte[] msgBytes;
+
+        try {
+            msgBytes = marsh.marshal(evt);
+        }
+        catch (IgniteCheckedException e) {
+            throw new IgniteSpiException("Failed to marshal custom event: " + evt, e);
+        }
+
+        msgWorker.addMessage(new TcpDiscoveryCustomEventMessage(getLocalNodeId(), msgBytes));
     }
 
     /**
@@ -1377,87 +1404,6 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
             log.debug("Discovery SPI has been connected to topology with order: " + locNode.internalOrder());
     }
 
-    /** */
-    private GridConcurrentHashSet<ClassLoader> exchangeLdrs = new GridConcurrentHashSet();
-
-    /**
-     * @param nodeId Node ID>
-     * @return Marshalled exchange data.
-     * @throws IgniteSpiException If failed.
-     */
-    protected Map<Integer, byte[]> collectExchangeData(UUID nodeId) throws IgniteSpiException {
-        boolean p2pEnaled = ignite.configuration().isPeerClassLoadingEnabled();
-
-        Map<Integer, Object> data = exchange.collect(nodeId);
-
-        Map<Integer, byte[]> data0 = U.newHashMap(data.size());
-
-        for (Map.Entry<Integer, Object> entry : data.entrySet()) {
-            try {
-                byte[] bytes = marsh.marshal(entry.getValue());
-
-                data0.put(entry.getKey(), bytes);
-
-                if (p2pEnaled) {
-                    ClassLoader ldr;
-
-                    if (entry.getValue() instanceof GridPeerDeployAware)
-                        ldr = ((GridPeerDeployAware)entry.getValue()).classLoader();
-                    else
-                        ldr = entry.getValue().getClass().getClassLoader();
-
-                    log.info("Add loader: " + entry.getValue() + " " + ldr);
-
-                    if (ldr != null) {
-                        if (exchangeLdrs.add(ldr))
-                            log.info("Added loader: " + ldr);
-                    }
-                }
-            }
-            catch (IgniteCheckedException e) {
-                U.error(log, "Failed to marshal discovery data " +
-                    "[comp=" + entry.getKey() + ", data=" + entry.getValue() + ']', e);
-
-                throw new IgniteSpiException("Failed to marshal discovery data.", e);
-            }
-        }
-
-        return data0;
-    }
-
-    /**
-     * @param joiningNode Joining node.
-     * @param nodeId Remote node ID for which data is provided.
-     * @param data Collection of marshalled discovery data objects from different components.
-     */
-    protected void onExchange(TcpDiscoveryNode joiningNode,
-        UUID nodeId,
-        Map<Integer, byte[]> data) {
-        TcpDiscoveryNode node;
-
-        if (joiningNode.id().equals(nodeId))
-            node = joiningNode;
-        else
-            node = ring.node(nodeId);
-
-        ClassLoader clsLdr = exchangeClassLoader(node);
-
-        Map<Integer, Object> data0 = U.newHashMap(data.size());
-
-        for (Map.Entry<Integer, byte[]> entry : data.entrySet()) {
-            try {
-                Object compData = marsh.unmarshal(entry.getValue(), clsLdr);
-
-                data0.put(entry.getKey(), compData);
-            }
-            catch (IgniteCheckedException e) {
-                U.error(log, "Failed to unmarshal discovery data for component: "  + entry.getKey(), e);
-            }
-        }
-
-        exchange.onExchange(joiningNode.id(), nodeId, data0);
-    }
-
     /**
      * Tries to send join request message to a random node presenting in topology.
      * Address is provided by {@link TcpDiscoveryIpFinder} and message is
@@ -2275,14 +2221,13 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
 
     /**
      * @param req Get class request.
+     * @return Get class response.
      */
     private TcpDiscoveryGetClassResponse processGetClassRequest(TcpDiscoveryGetClassRequest req) {
         assert !F.isEmpty(req.className()) : req;
 
         String rsrc = U.classNameToResourceName(req.className());
 
-        log.info("Get class request: " + req.className() + " " + rsrc);
-
         InputStream in = locLdr.getResourceAsStream(rsrc);
 
         byte[] clsBytes = null;
@@ -2559,6 +2504,41 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
     }
 
     /**
+     *
+     */
+    private class DeploymentClassLoadersCleaner extends IgniteSpiThread {
+        /**
+         * Constructor.
+         */
+        private DeploymentClassLoadersCleaner() {
+            super(gridName, "tcp-disco-p2p-ldr-cleaner", log);
+
+            setPriority(threadPri);
+        }
+
+        /** {@inheritDoc} */
+        @SuppressWarnings("BusyWait")
+        @Override protected void body() throws InterruptedException {
+            if (log.isDebugEnabled())
+                log.debug("Deployment class loader cleaner has been started.");
+
+            while (!isInterrupted()) {
+                Thread.sleep(5000);
+
+                for (DiscoveryDeploymentClassLoader ldr : p2pLdrs.values()) {
+                    if (ring.node(ldr.nodeId()) == null) {
+                        ldr.onNodeLeft();
+
+                        p2pLdrs.remove(ldr.nodeId(), ldr);
+                    }
+                    else
+                        ldr.closeConnectionIfNotUsed();
+                }
+            }
+        }
+    }
+
+    /**
      * Pending messages container.
      */
     private static class PendingMessages {
@@ -3489,10 +3469,10 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
         private void processClientReconnectMessage(TcpDiscoveryClientReconnectMessage msg) {
             UUID locNodeId = getLocalNodeId();
 
-            boolean isLocalNodeRouter = locNodeId.equals(msg.routerNodeId());
+            boolean isLocNodeRouter = locNodeId.equals(msg.routerNodeId());
 
             if (!msg.verified()) {
-                assert isLocalNodeRouter;
+                assert isLocNodeRouter;
 
                 msg.verify(locNodeId);
             }
@@ -3530,7 +3510,7 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
                 else if (log.isDebugEnabled())
                     log.debug("Reconnecting client node is already failed [nodeId=" + nodeId + ']');
 
-                if (isLocalNodeRouter) {
+                if (isLocNodeRouter) {
                     ClientMessageWorker wrk = clientMsgWorkers.get(nodeId);
 
                     if (wrk != null)
@@ -3676,7 +3656,7 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
                     Map<Integer, byte[]> data = msg.newNodeDiscoveryData();
 
                     if (data != null)
-                        onExchange(node, node.id(), data);
+                        onExchange(node.id(), node.id(), data, exchangeClassLoader(node, node.id()));
 
                     msg.addDiscoveryData(locNodeId, collectExchangeData(node.id()));
                 }
@@ -3747,8 +3727,12 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
 
                 // Notify outside of synchronized block.
                 if (dataMap != null) {
-                    for (Map.Entry<UUID, Map<Integer, byte[]>> entry : dataMap.entrySet())
-                        onExchange(node, entry.getKey(), entry.getValue());
+                    for (Map.Entry<UUID, Map<Integer, byte[]>> entry : dataMap.entrySet()) {
+                        onExchange(node.id(),
+                            entry.getKey(),
+                            entry.getValue(),
+                            exchangeClassLoader(node, entry.getKey()));
+                    }
                 }
             }
 
@@ -4524,13 +4508,27 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
 
                 Collection<ClusterNode> snapshot = hist.get(msg.topologyVersion());
 
-                if (lsnr != null && (spiState == CONNECTED || spiState == DISCONNECTING))
+                if (lsnr != null && (spiState == CONNECTED || spiState == DISCONNECTING)) {
+                    assert msg.messageBytes() != null;
+
+                    TcpDiscoveryNode node = ring.node(msg.creatorNodeId());
+
+                    Serializable msgObj;
+
+                    try {
+                        msgObj = marsh.unmarshal(msg.messageBytes(), customMessageClassLoader(node));
+                    }
+                    catch (IgniteCheckedException e) {
+                        throw new IgniteSpiException("Failed to unmarshal discovery custom message.", e);
+                    }
+
                     lsnr.onDiscovery(DiscoveryCustomEvent.EVT_DISCOVERY_CUSTOM_EVT,
                         msg.topologyVersion(),
-                        ring.node(msg.creatorNodeId()),
+                        node,
                         snapshot,
                         hist,
-                        msg.message());
+                        msgObj);
+                }
             }
 
             if (ring.hasRemoteNodes())
@@ -5303,177 +5301,311 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
         }
     }
 
-    /** */
-    private ConcurrentMap<UUID, DiscoveryDeploymentClassLoader> ldrs = new ConcurrentHashMap<>();
-
-    /** */
-    private LocalDeploymentClassLoader locLdr = new LocalDeploymentClassLoader(null);
-
     /**
-     *
+     * @param node Node created event.
+     * @return Class loader for custom event unmarshalling.
      */
-    class LocalDeploymentClassLoader extends ClassLoader {
-        public LocalDeploymentClassLoader(ClassLoader parent) {
-            super(parent);
-        }
-
-        @Override
-        public InputStream getResourceAsStream(String name) {
-            log.info("Local getResourceAsStream: " + name);
-
-            for (ClassLoader ldr : exchangeLdrs) {
-                InputStream  in = ldr.getResourceAsStream(name);
+    @Nullable protected ClassLoader customMessageClassLoader(TcpDiscoveryNode node) {
+        assert ignite != null;
 
-                if (in != null)
-                    return in;
-            }
+        if (!ignite.configuration().isPeerClassLoadingEnabled())
+            return null;
 
-            return super.getResourceAsStream(name);
-        }
+        if (node.id().equals(getLocalNodeId()))
+            return locLdr;
 
-        @Override public Class<?> loadClass(String name) throws ClassNotFoundException {
-            log.info("Local loadClass: " + name);
+        DiscoveryDeploymentClassLoader ldr = p2pLdrs.get(node.id());
 
-            for (ClassLoader ldr : exchangeLdrs) {
-                try {
-                    return ldr.loadClass(name);
-                }
-                catch (ClassNotFoundException ignore) {
-                }
-            }
+        if (ldr == null)
+            ldr = F.addIfAbsent(p2pLdrs, node.id(), new DiscoveryDeploymentClassLoader(node));
 
-            return super.loadClass(name);
-        }
+        return ldr;
     }
 
     /**
-     * @param nodeId Node ID.
+     * @param joiningNode Joining node.
+     * @param nodeId Remote node provided data.
      * @return Class loader for exchange data unmarshalling.
      */
-    protected ClassLoader exchangeClassLoader(TcpDiscoveryNode node) {
+    @Nullable protected ClassLoader exchangeClassLoader(TcpDiscoveryNode joiningNode, UUID nodeId) {
+        assert joiningNode != null;
         assert ignite != null;
 
-        UUID nodeId = node.id();
-
         if (!ignite.configuration().isPeerClassLoadingEnabled())
             return null;
 
         if (nodeId.equals(getLocalNodeId()))
             return locLdr;
 
-        DiscoveryDeploymentClassLoader ldr = ldrs.get(nodeId);
+        TcpDiscoveryNode node;
+
+        if (joiningNode.id().equals(nodeId))
+            node = joiningNode;
+        else {
+            node = ring.node(nodeId);
+
+            if (node == null) {
+                if (log.isDebugEnabled())
+                    log.debug("Node provided exchange data left, will use local class loader " +
+                        "for exchange data [nodeId=" + nodeId + ']');
+
+                return locLdr;
+            }
+        }
+
+        if (node.isClient()) // Do not support loading from client nodes.
+            return locLdr;
+
+        DiscoveryDeploymentClassLoader ldr = p2pLdrs.get(nodeId);
 
         if (ldr == null)
-            ldr = F.addIfAbsent(ldrs, nodeId, new DiscoveryDeploymentClassLoader(node));
+            ldr = F.addIfAbsent(p2pLdrs, nodeId, new DiscoveryDeploymentClassLoader(node));
 
         return ldr;
     }
 
     /**
+     * @param nodeId Node ID.
+     * @return Marshalled exchange data.
+     * @throws IgniteSpiException If failed.
+     */
+    private Map<Integer, byte[]> collectExchangeData(UUID nodeId) throws IgniteSpiException {
+        Map<Integer, Object> data = exchange.collect(nodeId);
+
+        Map<Integer, byte[]> data0 = U.newHashMap(data.size());
+
+        for (Map.Entry<Integer, Object> entry : data.entrySet()) {
+            try {
+                byte[] bytes = marsh.marshal(entry.getValue());
+
+                data0.put(entry.getKey(), bytes);
+            }
+            catch (IgniteCheckedException e) {
+                U.error(log, "Failed to marshal discovery data " +
+                    "[comp=" + entry.getKey() + ", data=" + entry.getValue() + ']', e);
+
+                throw new IgniteSpiException("Failed to marshal discovery data.", e);
+            }
+        }
+
+        return data0;
+    }
+
+    /**
      *
      */
     private class DiscoveryDeploymentClassLoader extends ClassLoader {
         /** */
-        private final TcpDiscoveryNode node;
+        private final UUID nodeId;
+
+        /** */
+        private volatile TcpDiscoveryNode node;
 
         /** */
         private Socket sock;
 
+        /** */
+        private final ReadWriteLock lock = new ReentrantReadWriteLock();
+
         /**
          * @param node Node.
          */
         public DiscoveryDeploymentClassLoader(TcpDiscoveryNode node) {
+            assert !node.isClient();
             assert !node.id().equals(getLocalNodeId());
 
             this.node = node;
+
+            nodeId = node.id();
         }
 
-        @Override protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
-            // log.info("P2p load class: " + name);
+        /**
+         * @return Target node ID.
+         */
+        UUID nodeId() {
+            return nodeId;
+        }
 
-            return super.loadClass(name, resolve);
+        /**
+         * Node left callback.
+         */
+        void onNodeLeft() {
+            lock.writeLock().lock();
+
+            try {
+                if (sock != null) {
+                    if (log.isDebugEnabled())
+                        log.debug("Closing deployment class loader connection on node left [node=" + nodeId + ']');
+
+                    U.closeQuiet(sock);
+
+                    sock = null;
+                }
+
+                node = null;
+            }
+            finally {
+                lock.writeLock().unlock();
+            }
+        }
+
+        /**
+         * Closes connection if there is no class loading in progress.
+         */
+        void closeConnectionIfNotUsed() {
+            if (lock.writeLock().tryLock()) {
+                try {
+                    if (sock != null) {
+                        if (log.isDebugEnabled())
+                            log.debug("Closing idle deployment class loader connection [node=" + nodeId + ']');
+
+                        U.closeQuiet(sock);
+
+                        sock = null;
+                    }
+                }
+                finally {
+                    lock.writeLock().unlock();
+                }
+            }
         }
 
         /** {@inheritDoc} */
         @Override protected Class<?> findClass(String name) throws ClassNotFoundException {
-            log.info("P2p find class: " + name);
+            if (node == null)
+                throw new ClassNotFoundException("Failed to load class, peer node left " +
+                    "[cls=" +name + ", node=" + nodeId + ']');
 
-            TcpDiscoveryGetClassResponse res = requestClass(name);
+            lock.readLock().lock();
 
-            if (res.error() != null)
-                throw new ClassNotFoundException(res.error());
+            try {
+                TcpDiscoveryGetClassResponse res = requestClass(name);
 
-            log.info("P2p loaded: " + name);
+                if (res == null)
+                    throw new ClassNotFoundException("Failed to load class, can not connect to peer node " +
+                        "[cls=" + name + ", node=" + nodeId + ']');
 
-            assert res.classBytes() != null;
+                if (res.error() != null)
+                    throw new ClassNotFoundException(res.error());
 
-            Class<?> cls = defineClass(name, res.classBytes(), 0, res.classBytes().length);
+                assert res.classBytes() != null;
 
-            return cls;
+                return defineClass(name, res.classBytes(), 0, res.classBytes().length);
+            }
+            finally {
+                lock.readLock().unlock();
+            }
         }
 
         /**
          * @param name Class name.
-         * @return Class response.
-         * @throws ClassNotFoundException If request failed.
+         * @return Class response or {@code null} if failed to connect.
          */
-        private TcpDiscoveryGetClassResponse requestClass(String name) throws ClassNotFoundException {
-            sock = connect();
+        @Nullable private synchronized TcpDiscoveryGetClassResponse requestClass(String name) {
+            TcpDiscoveryGetClassRequest msg = new TcpDiscoveryGetClassRequest(getLocalNodeId(), name);
 
-            if (sock == null)
-                throw new ClassNotFoundException("Failed to load class, can not connect to peer node " +
-                    "[cls=" + name + ", node=" + nodeId + ']');
+            for (int i = 0; i < reconCnt; i++) {
+                if (sock == null) {
+                    TcpDiscoveryNode node0 = node;
 
-            try {
-                writeToSocket(sock, new TcpDiscoveryGetClassRequest(getLocalNodeId(), name));
+                    if (node0 == null)
+                        return null; // Node left.
 
-                TcpDiscoveryGetClassResponse res = readMessage(sock, null, netTimeout);
+                    sock = connect(node0);
 
-                return res;
-            }
-            catch (IOException | IgniteCheckedException e) {
-                e.printStackTrace();
+                    if (sock == null)
+                        break;
+                }
+
+                try {
+                    return request(sock, msg);
+                }
+                catch (IOException | IgniteCheckedException e) {
+                    U.closeQuiet(sock);
 
-                throw new ClassNotFoundException("Failed to load class: " + name, e);
+                    sock = null;
+                }
             }
+
+            node = null; // Consider node failed.
+
+            p2pLdrs.remove(nodeId, this);
+
+            return null;
         }
 
-        private Socket connect() {
-            if (sock == null) {
-                for (InetSocketAddress addr : getNodeAddresses(node, U.sameMacs(locNode, node))) {
-                    sock = connect(addr);
+        /**
+         * @param sock Socket.
+         * @param msg Message.
+         * @return Response.
+         * @throws IOException If request failed.
+         * @throws IgniteCheckedException If request failed.
+         */
+        private TcpDiscoveryGetClassResponse request(Socket sock, TcpDiscoveryGetClassRequest msg)
+            throws IOException, IgniteCheckedException
+        {
+            long tstamp = U.currentTimeMillis();
 
-                    if (sock != null)
-                        break;
-                }
+            writeToSocket(sock, msg);
+
+            stats.onMessageSent(msg, U.currentTimeMillis() - tstamp);
+
+            TcpDiscoveryGetClassResponse res = readMessage(sock, null, netTimeout);
+
+            stats.onMessageReceived(res);
+
+            return res;
+        }
+
+        /**
+         * @param node Node.
+         * @return Socket or {@code null} if failed to connect.
+         */
+        private Socket connect(TcpDiscoveryNode node) {
+            Socket sock = null;
+
+            for (InetSocketAddress addr : getNodeAddresses(node, U.sameMacs(locNode, node))) {
+                sock = connect(addr);
+
+                if (sock != null)
+                    break;
             }
 
             return sock;
         }
 
+        /**
+         * @param addr Address.
+         * @return Socket or {@code null} if failed to connect.
+         */
         private Socket connect(InetSocketAddress addr) {
-            UUID locNodeId  = getLocalNodeId();
-
-            Socket sock = null;
+            TcpDiscoveryHandshakeRequest req = new TcpDiscoveryHandshakeRequest(getLocalNodeId());
 
             for (int i = 0; i < reconCnt; i++) {
+                Socket sock = null;
+
+                long tstamp = U.currentTimeMillis();
+
                 try {
                     sock = openSocket(addr);
 
-                    writeToSocket(sock, new TcpDiscoveryHandshakeRequest(locNodeId));
+                    writeToSocket(sock, req);
 
                     TcpDiscoveryHandshakeResponse res = readMessage(sock, null, netTimeout);
 
-                    break;
+                    if (!res.creatorNodeId().equals(nodeId))
+                        return null;
+
+                    stats.onClientSocketInitialized(U.currentTimeMillis() - tstamp);
+
+                    return sock;
                 }
                 catch (IOException | IgniteCheckedException e) {
-                    e.printStackTrace();
-
                     U.closeQuiet(sock);
                 }
             }
 
-            return sock;
+            return null;
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b8870305/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiAdapter.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiAdapter.java
index 9cde198..db75051 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiAdapter.java
@@ -744,6 +744,33 @@ abstract class TcpDiscoverySpiAdapter extends IgniteSpiAdapter implements Discov
     }
 
     /**
+     * @param joiningNodeID Joining node ID.
+     * @param nodeId Remote node ID for which data is provided.
+     * @param data Collection of marshalled discovery data objects from different components.
+     * @param clsLdr Class loader for discovery data unmarshalling.
+     */
+    protected void onExchange(UUID joiningNodeID,
+        UUID nodeId,
+        Map<Integer, byte[]> data,
+        ClassLoader clsLdr)
+    {
+        Map<Integer, Object> data0 = U.newHashMap(data.size());
+
+        for (Map.Entry<Integer, byte[]> entry : data.entrySet()) {
+            try {
+                Object compData = marsh.unmarshal(entry.getValue(), clsLdr);
+
+                data0.put(entry.getKey(), compData);
+            }
+            catch (IgniteCheckedException e) {
+                U.error(log, "Failed to unmarshal discovery data for component: "  + entry.getKey(), e);
+            }
+        }
+
+        exchange.onExchange(joiningNodeID, nodeId, data0);
+    }
+
+    /**
      * Handles sockets timeouts.
      */
     protected class SocketTimeoutWorker extends IgniteSpiThread {

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b8870305/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryCustomEventMessage.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryCustomEventMessage.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryCustomEventMessage.java
index 234efaa..6f78953 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryCustomEventMessage.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryCustomEventMessage.java
@@ -17,7 +17,6 @@
 
 package org.apache.ignite.spi.discovery.tcp.messages;
 
-import java.io.*;
 import java.util.*;
 
 /**
@@ -29,21 +28,22 @@ public class TcpDiscoveryCustomEventMessage extends TcpDiscoveryAbstractMessage
     private static final long serialVersionUID = 0L;
 
     /** */
-    private final Serializable msg;
+    private final byte[] msgBytes;
 
     /**
      * @param creatorNodeId Creator node id.
+     * @param msgBytes Serialized message.
      */
-    public TcpDiscoveryCustomEventMessage(UUID creatorNodeId, Serializable msg) {
+    public TcpDiscoveryCustomEventMessage(UUID creatorNodeId, byte[] msgBytes) {
         super(creatorNodeId);
 
-        this.msg = msg;
+        this.msgBytes = msgBytes;
     }
 
     /**
-     * @return Message.
+     * @return Serialized message.
      */
-    public Serializable message() {
-        return msg;
+    public byte[] messageBytes() {
+        return msgBytes;
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b8870305/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryGetClassResponse.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryGetClassResponse.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryGetClassResponse.java
index b1afe1c..d377aee 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryGetClassResponse.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryGetClassResponse.java
@@ -26,6 +26,9 @@ import java.util.*;
  */
 public class TcpDiscoveryGetClassResponse extends TcpDiscoveryAbstractMessage {
     /** */
+    private static final long serialVersionUID = 0L;
+
+    /** */
     private String errMsg;
 
     /** */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b8870305/modules/core/src/test/java/org/apache/ignite/internal/processors/continuous/GridEventConsumeSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/continuous/GridEventConsumeSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/continuous/GridEventConsumeSelfTest.java
index 4bd2901..4273c9d 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/continuous/GridEventConsumeSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/continuous/GridEventConsumeSelfTest.java
@@ -763,7 +763,7 @@ public class GridEventConsumeSelfTest extends GridCommonAbstractTest implements
      * @throws Exception If failed.
      */
     // TODO: GG-6730
-    public void testNodeJoinWithP2P() throws Exception {
+    public void _testNodeJoinWithP2P() throws Exception {
         final Collection<UUID> nodeIds = new HashSet<>();
         final AtomicInteger cnt = new AtomicInteger();
         final CountDownLatch latch = new CountDownLatch(GRID_CNT + 1);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b8870305/modules/core/src/test/java/org/apache/ignite/spi/discovery/AbstractDiscoverySelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/spi/discovery/AbstractDiscoverySelfTest.java b/modules/core/src/test/java/org/apache/ignite/spi/discovery/AbstractDiscoverySelfTest.java
index 91d3514..234e3cd 100644
--- a/modules/core/src/test/java/org/apache/ignite/spi/discovery/AbstractDiscoverySelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/spi/discovery/AbstractDiscoverySelfTest.java
@@ -383,9 +383,7 @@ public abstract class AbstractDiscoverySelfTest<T extends IgniteSpi> extends Gri
                         return new HashMap<>();
                     }
 
-                    @Override public void onExchange(UUID joiningNodeId,
-                        UUID nodeId,
-                        Map<Integer, Object> data) {
+                    @Override public void onExchange(UUID joiningNodeId, UUID nodeId, Map<Integer, Object> data) {
                         // No-op.
                     }
                 });

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b8870305/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiStartStopSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiStartStopSelfTest.java b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiStartStopSelfTest.java
index 058d908..b0e22b4 100644
--- a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiStartStopSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiStartStopSelfTest.java
@@ -48,9 +48,7 @@ public class TcpDiscoverySpiStartStopSelfTest extends GridSpiStartStopAbstractTe
                 return null;
             }
 
-            @Override public void onExchange(UUID joiningNodeId,
-                UUID nodeId,
-                Map<Integer, Object> data) {
+            @Override public void onExchange(UUID joiningNodeId, UUID nodeId, Map<Integer, Object> data) {
                 // No-op.
             }
         };

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/b8870305/modules/core/src/test/java/org/apache/ignite/testframework/junits/spi/GridSpiAbstractTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/junits/spi/GridSpiAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/testframework/junits/spi/GridSpiAbstractTest.java
index 82f3d6c..7898c3d 100644
--- a/modules/core/src/test/java/org/apache/ignite/testframework/junits/spi/GridSpiAbstractTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/testframework/junits/spi/GridSpiAbstractTest.java
@@ -219,9 +219,7 @@ public abstract class GridSpiAbstractTest<T extends IgniteSpi> extends GridAbstr
                     return new HashMap<>();
                 }
 
-                @Override public void onExchange(UUID joiningNodeId,
-                    UUID nodeId,
-                    Map<Integer, Object> data) {
+                @Override public void onExchange(UUID joiningNodeId, UUID nodeId, Map<Integer, Object> data) {
                 }
             });
 


[14/31] incubator-ignite git commit: Merge remote-tracking branch 'remotes/origin/ignite-sprint-3' into ignite-537

Posted by ag...@apache.org.
Merge remote-tracking branch 'remotes/origin/ignite-sprint-3' into ignite-537


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

Branch: refs/heads/ignite-721
Commit: 0b14239d611c2150740fcbb97dfda5ca9478d15b
Parents: 9f44423 baaf8bb
Author: sboikov <se...@inria.fr>
Authored: Fri Apr 10 20:06:30 2015 +0300
Committer: sboikov <se...@inria.fr>
Committed: Fri Apr 10 20:06:30 2015 +0300

----------------------------------------------------------------------
 examples/pom.xml                                |   2 +-
 modules/aop/pom.xml                             |   2 +-
 modules/aws/pom.xml                             |   2 +-
 modules/clients/pom.xml                         |   2 +-
 modules/codegen/pom.xml                         |   2 +-
 modules/core/pom.xml                            |   2 +-
 .../configuration/CacheConfiguration.java       |   7 +-
 .../query/GridQueryFieldMetadata.java           |   2 +-
 .../processors/query/GridQueryProcessor.java    |  89 +++---
 .../visor/cache/VisorCacheConfiguration.java    |   2 +-
 .../internal/visor/cache/VisorCacheMetrics.java |   2 +-
 .../visor/node/VisorNodeDataCollectorTask.java  |   1 +
 .../internal/visor/query/VisorQueryArg.java     |  82 ++++++
 .../visor/query/VisorQueryCleanupTask.java      |  10 +-
 .../internal/visor/query/VisorQueryCursor.java  |  96 +++++++
 .../internal/visor/query/VisorQueryField.java   |  66 ++++-
 .../internal/visor/query/VisorQueryJob.java     | 174 ++++++++++++
 .../visor/query/VisorQueryNextPageTask.java     |  75 +++--
 .../internal/visor/query/VisorQueryResult.java  |   6 +-
 .../visor/query/VisorQueryResultEx.java         |  16 +-
 .../internal/visor/query/VisorQueryTask.java    | 281 ++-----------------
 .../internal/visor/query/VisorQueryUtils.java   |  55 ++--
 .../ignite/startup/BasicWarmupClosure.java      |   9 +-
 .../resources/META-INF/classnames.properties    |  36 ++-
 .../cache/IgniteWarmupClosureSelfTest.java      |  82 ++++++
 .../IgniteFairAffinityDynamicCacheSelfTest.java |  96 +++++++
 .../ignite/testsuites/IgniteCacheTestSuite.java |   5 +
 modules/extdata/p2p/pom.xml                     |   2 +-
 modules/extdata/uri/pom.xml                     |   2 +-
 modules/geospatial/pom.xml                      |   2 +-
 modules/hadoop/pom.xml                          |   2 +-
 modules/hibernate/pom.xml                       |   2 +-
 modules/indexing/pom.xml                        |   2 +-
 .../processors/query/h2/IgniteH2Indexing.java   |  17 +-
 .../query/h2/sql/BaseH2CompareQueryTest.java    |  20 ++
 modules/jcl/pom.xml                             |   2 +-
 modules/jta/pom.xml                             |   2 +-
 modules/log4j/pom.xml                           |   2 +-
 modules/rest-http/pom.xml                       |   2 +-
 modules/scalar/pom.xml                          |   2 +-
 modules/schedule/pom.xml                        |   2 +-
 modules/schema-import/pom.xml                   |   2 +-
 modules/slf4j/pom.xml                           |   2 +-
 modules/spring/pom.xml                          |   2 +-
 modules/ssh/pom.xml                             |   2 +-
 modules/tools/pom.xml                           |   2 +-
 modules/urideploy/pom.xml                       |   2 +-
 modules/visor-console/pom.xml                   |   2 +-
 .../commands/cache/VisorCacheScanCommand.scala  |  13 +-
 modules/visor-plugins/pom.xml                   |   2 +-
 modules/web/pom.xml                             |   2 +-
 modules/yardstick/pom.xml                       |   2 +-
 pom.xml                                         |  48 ++--
 53 files changed, 878 insertions(+), 468 deletions(-)
----------------------------------------------------------------------



[26/31] incubator-ignite git commit: Merge remote-tracking branch 'remotes/origin/ignite-537' into ignite-sprint-3

Posted by ag...@apache.org.
Merge remote-tracking branch 'remotes/origin/ignite-537' into ignite-sprint-3


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

Branch: refs/heads/ignite-721
Commit: 59537866520271d27f8191690932e40985970a87
Parents: 7bb7586 98587c6
Author: sboikov <se...@inria.fr>
Authored: Sat Apr 11 00:51:15 2015 +0300
Committer: sboikov <se...@inria.fr>
Committed: Sat Apr 11 00:51:15 2015 +0300

----------------------------------------------------------------------
 .../apache/ignite/internal/GridComponent.java   |   5 +-
 .../ignite/internal/GridPluginComponent.java    |   5 +-
 .../internal/managers/GridManagerAdapter.java   |   4 +-
 .../discovery/GridDiscoveryManager.java         |  10 +-
 .../processors/GridProcessorAdapter.java        |   5 +-
 .../processors/cache/GridCacheProcessor.java    |   4 +-
 .../continuous/GridContinuousProcessor.java     |   4 +-
 .../plugin/IgnitePluginProcessor.java           |  13 +-
 .../ignite/internal/util/GridJavaProcess.java   |  38 +-
 .../apache/ignite/plugin/PluginProvider.java    |   5 +-
 .../spi/discovery/DiscoverySpiDataExchange.java |   5 +-
 .../discovery/tcp/TcpClientDiscoverySpi.java    |  14 +-
 .../spi/discovery/tcp/TcpDiscoverySpi.java      | 474 +++++++++++++++++--
 .../discovery/tcp/TcpDiscoverySpiAdapter.java   |  27 ++
 .../tcp/messages/TcpDiscoveryClassRequest.java  |  55 +++
 .../tcp/messages/TcpDiscoveryClassResponse.java |  76 +++
 .../TcpDiscoveryCustomEventMessage.java         |  23 +-
 .../TcpDiscoveryJoinRequestMessage.java         |   6 +-
 .../messages/TcpDiscoveryNodeAddedMessage.java  |  16 +-
 .../cache/CacheConfigurationP2PTest.java        | 122 +++++
 .../cache/CacheConfigurationP2PTestServer.java  |  63 +++
 .../continuous/GridEventConsumeSelfTest.java    |   3 +-
 .../discovery/AbstractDiscoverySelfTest.java    |   4 +-
 .../tcp/TcpDiscoverySpiStartStopSelfTest.java   |   5 +-
 .../junits/spi/GridSpiAbstractTest.java         |   4 +-
 .../p2p/startcache/CacheAllNodesFilter.java     |  31 ++
 .../CacheConfigurationP2PTestClient.java        | 155 ++++++
 27 files changed, 1082 insertions(+), 94 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/59537866/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
----------------------------------------------------------------------


[30/31] incubator-ignite git commit: Merge branch 'ignite-sprint-3' of https://git-wip-us.apache.org/repos/asf/incubator-ignite into ignite-721

Posted by ag...@apache.org.
Merge branch 'ignite-sprint-3' of https://git-wip-us.apache.org/repos/asf/incubator-ignite into ignite-721


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

Branch: refs/heads/ignite-721
Commit: c0085a30eb350e0202879fd4443d6dcf716cd7db
Parents: 2d3eac7 df1fbef
Author: Alexey Goncharuk <ag...@gridgain.com>
Authored: Sat Apr 11 00:44:41 2015 -0700
Committer: Alexey Goncharuk <ag...@gridgain.com>
Committed: Sat Apr 11 00:44:41 2015 -0700

----------------------------------------------------------------------
 examples/pom.xml                                |   2 +-
 modules/aop/pom.xml                             |   2 +-
 modules/aws/pom.xml                             |   2 +-
 modules/clients/pom.xml                         |   2 +-
 modules/codegen/pom.xml                         |   2 +-
 modules/core/pom.xml                            |   2 +-
 .../apache/ignite/internal/GridComponent.java   |   5 +-
 .../ignite/internal/GridPluginComponent.java    |   5 +-
 .../internal/managers/GridManagerAdapter.java   |   4 +-
 .../discovery/GridDiscoveryManager.java         |  10 +-
 .../processors/GridProcessorAdapter.java        |   5 +-
 .../processors/cache/GridCacheProcessor.java    |   4 +-
 .../continuous/GridContinuousProcessor.java     |   4 +-
 .../processors/igfs/IgfsInputStreamImpl.java    |   2 +-
 .../processors/igfs/IgfsOutputStreamImpl.java   |   6 +-
 .../plugin/IgnitePluginProcessor.java           |  13 +-
 .../ignite/internal/util/GridJavaProcess.java   |  38 +-
 .../internal/visor/query/VisorQueryTask.java    |   4 +-
 .../apache/ignite/plugin/PluginProvider.java    |   5 +-
 .../spi/discovery/DiscoverySpiDataExchange.java |   5 +-
 .../discovery/tcp/TcpClientDiscoverySpi.java    |  10 +-
 .../spi/discovery/tcp/TcpDiscoverySpi.java      | 479 +++++++++++++++++--
 .../discovery/tcp/TcpDiscoverySpiAdapter.java   |  27 ++
 .../tcp/internal/TcpDiscoveryNode.java          |  12 +-
 .../tcp/messages/TcpDiscoveryClassRequest.java  |  55 +++
 .../tcp/messages/TcpDiscoveryClassResponse.java |  76 +++
 .../TcpDiscoveryCustomEventMessage.java         |  23 +-
 .../TcpDiscoveryJoinRequestMessage.java         |   6 +-
 .../messages/TcpDiscoveryNodeAddedMessage.java  |  16 +-
 .../CacheMetricsForClusterGroupSelfTest.java    |  18 +-
 .../continuous/GridEventConsumeSelfTest.java    |   3 +-
 .../discovery/AbstractDiscoverySelfTest.java    |   4 +-
 .../tcp/TcpDiscoverySpiStartStopSelfTest.java   |   5 +-
 .../junits/spi/GridSpiAbstractTest.java         |   4 +-
 modules/extdata/p2p/pom.xml                     |   2 +-
 .../p2p/startcache/CacheAllNodesFilter.java     |  31 ++
 .../CacheConfigurationP2PTestClient.java        | 114 +++++
 .../tests/p2p/startcache/Organization1.java     |  52 ++
 .../tests/p2p/startcache/Organization2.java     |  52 ++
 modules/extdata/uri/pom.xml                     |   2 +-
 modules/geospatial/pom.xml                      |   2 +-
 modules/hadoop/pom.xml                          |   2 +-
 modules/hibernate/pom.xml                       |   2 +-
 modules/indexing/pom.xml                        |   2 +-
 .../cache/CacheConfigurationP2PTest.java        | 177 +++++++
 .../cache/CacheConfigurationP2PTestServer.java  |  49 ++
 .../IgniteCacheWithIndexingTestSuite.java       |   2 +
 modules/jcl/pom.xml                             |   2 +-
 modules/jta/pom.xml                             |   2 +-
 modules/log4j/pom.xml                           |   2 +-
 modules/rest-http/pom.xml                       |   2 +-
 modules/scalar/pom.xml                          |   2 +-
 modules/schedule/pom.xml                        |   2 +-
 modules/schema-import/pom.xml                   |   2 +-
 modules/slf4j/pom.xml                           |   2 +-
 modules/spring/pom.xml                          |   2 +-
 modules/ssh/pom.xml                             |   2 +-
 modules/tools/pom.xml                           |   2 +-
 modules/urideploy/pom.xml                       |   2 +-
 modules/visor-console/pom.xml                   |   2 +-
 modules/visor-plugins/pom.xml                   |   2 +-
 modules/web/pom.xml                             |   2 +-
 modules/yardstick/pom.xml                       |   2 +-
 pom.xml                                         |   2 +-
 64 files changed, 1248 insertions(+), 135 deletions(-)
----------------------------------------------------------------------



[13/31] incubator-ignite git commit: # ignite-537

Posted by ag...@apache.org.
# ignite-537


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

Branch: refs/heads/ignite-721
Commit: 9f44423cd819f76e636aad82bb777253b56db412
Parents: 9837a4a
Author: sboikov <se...@inria.fr>
Authored: Fri Apr 10 20:06:07 2015 +0300
Committer: sboikov <se...@inria.fr>
Committed: Fri Apr 10 20:06:07 2015 +0300

----------------------------------------------------------------------
 .../org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java     | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9f44423c/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
index 7da004a..82a2e59 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
@@ -5504,7 +5504,7 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
                 }
             }
 
-            p2pLdrs.remove(nodeId, this);
+            p2pLdrs.remove(node.id(), this);
 
             return null;
         }
@@ -5568,7 +5568,7 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
 
                     TcpDiscoveryHandshakeResponse res = readMessage(sock, null, netTimeout);
 
-                    if (!res.creatorNodeId().equals(nodeId))
+                    if (!res.creatorNodeId().equals(node.id()))
                         return null;
 
                     stats.onClientSocketInitialized(U.currentTimeMillis() - tstamp);


[28/31] incubator-ignite git commit: # ignite-sprint-3 reverted ignoring disovery data exchange for daemon nodes (was done in ignite-537)

Posted by ag...@apache.org.
# ignite-sprint-3 reverted ignoring disovery data exchange for daemon nodes (was done in ignite-537)


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

Branch: refs/heads/ignite-721
Commit: 46d1369c2fb17efec325793ced87276b8be98450
Parents: 5953786
Author: sboikov <se...@inria.fr>
Authored: Sat Apr 11 05:58:13 2015 +0300
Committer: sboikov <se...@inria.fr>
Committed: Sat Apr 11 06:53:57 2015 +0300

----------------------------------------------------------------------
 .../discovery/tcp/TcpClientDiscoverySpi.java    |   4 +-
 .../spi/discovery/tcp/TcpDiscoverySpi.java      |  26 +--
 .../cache/CacheConfigurationP2PTest.java        | 122 -------------
 .../cache/CacheConfigurationP2PTestServer.java  |  63 -------
 .../CacheConfigurationP2PTestClient.java        |  75 ++------
 .../tests/p2p/startcache/Organization1.java     |  52 ++++++
 .../tests/p2p/startcache/Organization2.java     |  52 ++++++
 .../cache/CacheConfigurationP2PTest.java        | 177 +++++++++++++++++++
 .../cache/CacheConfigurationP2PTestServer.java  |  49 +++++
 .../IgniteCacheWithIndexingTestSuite.java       |   2 +
 10 files changed, 364 insertions(+), 258 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/46d1369c/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpi.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpi.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpi.java
index 312b940..2ab8e8f 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpi.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpi.java
@@ -900,7 +900,7 @@ public class TcpClientDiscoverySpi extends TcpDiscoverySpiAdapter implements Tcp
 
                         Map<UUID, Map<Integer, byte[]>> dataMap = msg.oldNodesDiscoveryData();
 
-                        if (!locNode.isDaemon() && dataMap != null) {
+                        if (dataMap != null) {
                             for (Map.Entry<UUID, Map<Integer, byte[]>> entry : dataMap.entrySet())
                                 onExchange(newNodeId, entry.getKey(), entry.getValue(), null);
                         }
@@ -924,7 +924,7 @@ public class TcpClientDiscoverySpi extends TcpDiscoverySpiAdapter implements Tcp
 
                     Map<Integer, byte[]> data = msg.newNodeDiscoveryData();
 
-                    if (!locNode.isDaemon() && data != null)
+                    if (data != null)
                         onExchange(newNodeId, newNodeId, data, null);
                 }
             }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/46d1369c/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
index e1b1a92..81c608a 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
@@ -2211,7 +2211,7 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
      * @param req Get class request.
      * @return Get class response.
      */
-    private TcpDiscoveryClassResponse processGetClassRequest(TcpDiscoveryClassRequest req) {
+    private TcpDiscoveryClassResponse processClassRequest(TcpDiscoveryClassRequest req) {
         assert !F.isEmpty(req.className()) : req;
 
         String rsrc = U.classNameToResourceName(req.className());
@@ -3722,7 +3722,7 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
 
                     Map<Integer, byte[]> data = msg.newNodeDiscoveryData();
 
-                    if (!locNode.isDaemon() && data != null)
+                    if (data != null)
                         onExchange(node.id(), node.id(), data, exchangeClassLoader(node, node.id()));
 
                     msg.addDiscoveryData(locNodeId, collectExchangeData(node.id()));
@@ -3793,7 +3793,7 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
                 }
 
                 // Notify outside of synchronized block.
-                if (!locNode.isDaemon() && dataMap != null) {
+                if (dataMap != null) {
                     for (Map.Entry<UUID, Map<Integer, byte[]>> entry : dataMap.entrySet()) {
                         onExchange(node.id(),
                             entry.getKey(),
@@ -4594,7 +4594,7 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
 
                 Collection<ClusterNode> snapshot = hist.get(msg.topologyVersion());
 
-                if (!locNode.isDaemon() && lsnr != null && (spiState == CONNECTED || spiState == DISCONNECTING)) {
+                if (lsnr != null && (spiState == CONNECTED || spiState == DISCONNECTING)) {
                     assert msg.messageBytes() != null;
 
                     TcpDiscoveryNode node = ring.node(msg.creatorNodeId());
@@ -4604,17 +4604,17 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
                     try {
                         if (msgObj == null)
                             msgObj = marsh.unmarshal(msg.messageBytes(), customMessageClassLoader(node));
+
+                        lsnr.onDiscovery(DiscoveryCustomEvent.EVT_DISCOVERY_CUSTOM_EVT,
+                            msg.topologyVersion(),
+                            node,
+                            snapshot,
+                            hist,
+                            msgObj);
                     }
                     catch (IgniteCheckedException e) {
-                        throw new IgniteSpiException("Failed to unmarshal discovery custom message.", e);
+                        U.error(log, "Failed to unmarshal discovery custom message.", e);
                     }
-
-                    lsnr.onDiscovery(DiscoveryCustomEvent.EVT_DISCOVERY_CUSTOM_EVT,
-                        msg.topologyVersion(),
-                        node,
-                        snapshot,
-                        hist,
-                        msgObj);
                 }
             }
 
@@ -5091,7 +5091,7 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
                             continue;
                         }
                         else if (msg instanceof TcpDiscoveryClassRequest) {
-                            TcpDiscoveryClassResponse res = processGetClassRequest((TcpDiscoveryClassRequest)msg);
+                            TcpDiscoveryClassResponse res = processClassRequest((TcpDiscoveryClassRequest) msg);
 
                             writeToSocket(sock, res);
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/46d1369c/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheConfigurationP2PTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheConfigurationP2PTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheConfigurationP2PTest.java
deleted file mode 100644
index 96b124c..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheConfigurationP2PTest.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache;
-
-import org.apache.ignite.internal.util.*;
-import org.apache.ignite.internal.util.typedef.*;
-import org.apache.ignite.internal.util.typedef.internal.*;
-import org.apache.ignite.testframework.junits.common.*;
-
-import java.util.concurrent.*;
-
-import static java.util.concurrent.TimeUnit.*;
-
-/**
- *
- */
-public class CacheConfigurationP2PTest extends GridCommonAbstractTest {
-    /** */
-    public static final String NODE_START_MSG = "Test external node started";
-
-    /** */
-    private static final String CLIENT_CLS_NAME =
-        "org.apache.ignite.tests.p2p.startcache.CacheConfigurationP2PTestClient";
-
-    /**
-     * @throws Exception If failed.
-     */
-    public void testCacheConfigurationP2P() throws Exception {
-        final CountDownLatch srvsReadyLatch = new CountDownLatch(2);
-
-        final CountDownLatch clientReadyLatch = new CountDownLatch(1);
-
-        GridJavaProcess node1 = null;
-        GridJavaProcess node2 = null;
-        GridJavaProcess clientNode = null;
-
-        try {
-            node1 = GridJavaProcess.exec(
-                CacheConfigurationP2PTestServer.class.getName(), null,
-                log,
-                new CI1<String>() {
-                    @Override public void apply(String s) {
-                        info("Server node1: " + s);
-
-                        if (s.contains(NODE_START_MSG))
-                            srvsReadyLatch.countDown();
-                    }
-                },
-                null,
-                null,
-                null
-            );
-
-            node2 = GridJavaProcess.exec(
-                CacheConfigurationP2PTestServer.class.getName(), null,
-                log,
-                new CI1<String>() {
-                    @Override public void apply(String s) {
-                        info("Server node2: " + s);
-
-                        if (s.contains(NODE_START_MSG))
-                            srvsReadyLatch.countDown();
-                    }
-                },
-                null,
-                null,
-                null
-            );
-
-            assertTrue(srvsReadyLatch.await(60, SECONDS));
-
-            String str = U.getIgniteHome() + "/modules/extdata/p2p/target/classes/";
-
-            clientNode = GridJavaProcess.exec(
-                CLIENT_CLS_NAME, null,
-                log,
-                new CI1<String>() {
-                    @Override public void apply(String s) {
-                        info("Client node: " + s);
-
-                        if (s.contains(NODE_START_MSG))
-                            clientReadyLatch.countDown();
-                    }
-                },
-                null,
-                null,
-                str
-            );
-
-            assertTrue(clientReadyLatch.await(60, SECONDS));
-
-            int exitCode = clientNode.getProcess().waitFor();
-
-            assertEquals("Unexpected exit code", 0, exitCode);
-        }
-        finally {
-            if (node1 != null)
-                node1.killProcess();
-
-            if (node2 != null)
-                node2.killProcess();
-
-            if (clientNode != null)
-                clientNode.killProcess();
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/46d1369c/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheConfigurationP2PTestServer.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheConfigurationP2PTestServer.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheConfigurationP2PTestServer.java
deleted file mode 100644
index 490f951..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheConfigurationP2PTestServer.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache;
-
-import org.apache.ignite.*;
-import org.apache.ignite.configuration.*;
-import org.apache.ignite.internal.util.typedef.internal.*;
-import org.apache.ignite.spi.discovery.tcp.*;
-import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.*;
-
-import java.util.*;
-
-/**
- *
- */
-public class CacheConfigurationP2PTestServer {
-    /**
-     * @param args Arguments.
-     * @throws Exception If failed.
-     */
-    public static void main(String[] args) throws Exception {
-        System.out.println("Starting test server node.");
-
-        IgniteConfiguration cfg = new IgniteConfiguration();
-
-        cfg.setPeerClassLoadingEnabled(true);
-
-        cfg.setLocalHost("127.0.0.1");
-
-        TcpDiscoverySpi disco = new TcpDiscoverySpi();
-
-        TcpDiscoveryVmIpFinder ipFinder = new TcpDiscoveryVmIpFinder();
-
-        ipFinder.setAddresses(Arrays.asList("127.0.0.1:47500..47509"));
-
-        disco.setIpFinder(ipFinder);
-
-        cfg.setDiscoverySpi(disco);
-
-        U.setWorkDirectory(null, U.getIgniteHome());
-
-        try (Ignite ignite = Ignition.start(cfg)) {
-            System.out.println(CacheConfigurationP2PTest.NODE_START_MSG);
-
-            U.sleep(Long.MAX_VALUE);
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/46d1369c/modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/startcache/CacheConfigurationP2PTestClient.java
----------------------------------------------------------------------
diff --git a/modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/startcache/CacheConfigurationP2PTestClient.java b/modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/startcache/CacheConfigurationP2PTestClient.java
index 0634e5f..be3f3bc 100644
--- a/modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/startcache/CacheConfigurationP2PTestClient.java
+++ b/modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/startcache/CacheConfigurationP2PTestClient.java
@@ -18,13 +18,12 @@
 package org.apache.ignite.tests.p2p.startcache;
 
 import org.apache.ignite.*;
-import org.apache.ignite.cache.query.annotations.*;
+import org.apache.ignite.cache.query.*;
 import org.apache.ignite.configuration.*;
 import org.apache.ignite.internal.util.typedef.internal.*;
 import org.apache.ignite.spi.discovery.tcp.*;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.*;
 
-import java.io.*;
 import java.util.*;
 
 /**
@@ -61,7 +60,7 @@ public class CacheConfigurationP2PTestClient {
 
             int nodes = ignite.cluster().nodes().size();
 
-            if (nodes != 3)
+            if (nodes != 4)
                 throw new Exception("Unexpected nodes number: " + nodes);
 
             CacheConfiguration<Integer, Organization1> ccfg1 = new CacheConfiguration<>();
@@ -79,6 +78,11 @@ public class CacheConfigurationP2PTestClient {
             for (int i = 0; i < 500; i++)
                 cache1.put(i, new Organization1("org-" + i));
 
+            SqlQuery<Integer, Organization1> qry1 = new SqlQuery<>(Organization1.class, "_key >= 0");
+
+            if (cache1.query(qry1).getAll().isEmpty())
+                throw new Exception("Query failed.");
+
             System.out.println("Sleep some time.");
 
             Thread.sleep(5000); // Sleep some time to wait when connection of p2p loader is closed.
@@ -89,67 +93,22 @@ public class CacheConfigurationP2PTestClient {
 
             ccfg2.setName("cache2");
 
-            ccfg2.setIndexedTypes(Integer.class, Organization1.class);
+            ccfg2.setIndexedTypes(Integer.class, Organization2.class);
 
             IgniteCache<Integer, Organization2> cache2 = ignite.createCache(ccfg2);
-        }
-    }
 
-    /**
-     * Organization class.
-     */
-    private static class Organization1 implements Serializable {
-        /** Organization ID (indexed). */
-        @QuerySqlField(index = true)
-        private UUID id;
-
-        /** Organization name (indexed). */
-        @QuerySqlField(index = true)
-        private String name;
-
-        /**
-         * Create organization.
-         *
-         * @param name Organization name.
-         */
-        Organization1(String name) {
-            id = UUID.randomUUID();
-
-            this.name = name;
-        }
+            for (int i = 0; i < 500; i++)
+                cache2.put(i, new Organization2("org-" + i));
 
-        /** {@inheritDoc} */
-        @Override public String toString() {
-            return "Organization [id=" + id + ", name=" + name + ']';
-        }
-    }
+            SqlQuery<Integer, Organization2> qry2 = new SqlQuery<>(Organization2.class, "_key >= 0");
 
-    /**
-     * Organization class.
-     */
-    private static class Organization2 implements Serializable {
-        /** Organization ID (indexed). */
-        @QuerySqlField(index = true)
-        private UUID id;
-
-        /** Organization name (indexed). */
-        @QuerySqlField(index = true)
-        private String name;
-
-        /**
-         * Create organization.
-         *
-         * @param name Organization name.
-         */
-        Organization2(String name) {
-            id = UUID.randomUUID();
-
-            this.name = name;
-        }
+            if (cache2.query(qry2).getAll().isEmpty())
+                throw new Exception("Query failed.");
+
+            cache1.close();
 
-        /** {@inheritDoc} */
-        @Override public String toString() {
-            return "Organization [id=" + id + ", name=" + name + ']';
+            cache2.close();
         }
     }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/46d1369c/modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/startcache/Organization1.java
----------------------------------------------------------------------
diff --git a/modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/startcache/Organization1.java b/modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/startcache/Organization1.java
new file mode 100644
index 0000000..9c371f1
--- /dev/null
+++ b/modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/startcache/Organization1.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.tests.p2p.startcache;
+
+import org.apache.ignite.cache.query.annotations.*;
+
+import java.io.*;
+import java.util.*;
+
+/**
+ * Organization class.
+ */
+class Organization1 implements Serializable {
+    /** Organization ID (indexed). */
+    @QuerySqlField(index = true)
+    private UUID id;
+
+    /** Organization name (indexed). */
+    @QuerySqlField(index = true)
+    private String name;
+
+    /**
+     * Create organization.
+     *
+     * @param name Organization name.
+     */
+    Organization1(String name) {
+        id = UUID.randomUUID();
+
+        this.name = name;
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return "Organization1 [id=" + id + ", name=" + name + ']';
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/46d1369c/modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/startcache/Organization2.java
----------------------------------------------------------------------
diff --git a/modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/startcache/Organization2.java b/modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/startcache/Organization2.java
new file mode 100644
index 0000000..e44ce97
--- /dev/null
+++ b/modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/startcache/Organization2.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.tests.p2p.startcache;
+
+import org.apache.ignite.cache.query.annotations.*;
+
+import java.io.*;
+import java.util.*;
+
+/**
+ * Organization class.
+ */
+class Organization2 implements Serializable {
+    /** Organization ID (indexed). */
+    @QuerySqlField(index = true)
+    private UUID id;
+
+    /** Organization name (indexed). */
+    @QuerySqlField(index = true)
+    private String name;
+
+    /**
+     * Create organization.
+     *
+     * @param name Organization name.
+     */
+    Organization2(String name) {
+        id = UUID.randomUUID();
+
+        this.name = name;
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return "Organization2 [id=" + id + ", name=" + name + ']';
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/46d1369c/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/CacheConfigurationP2PTest.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/CacheConfigurationP2PTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/CacheConfigurationP2PTest.java
new file mode 100644
index 0000000..8f0f4ca
--- /dev/null
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/CacheConfigurationP2PTest.java
@@ -0,0 +1,177 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.processors.cache;
+
+import org.apache.ignite.*;
+import org.apache.ignite.configuration.*;
+import org.apache.ignite.internal.util.*;
+import org.apache.ignite.internal.util.lang.*;
+import org.apache.ignite.internal.util.typedef.*;
+import org.apache.ignite.internal.util.typedef.internal.*;
+import org.apache.ignite.spi.discovery.*;
+import org.apache.ignite.spi.discovery.tcp.*;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.*;
+import org.apache.ignite.testframework.*;
+import org.apache.ignite.testframework.junits.common.*;
+
+import java.util.*;
+import java.util.concurrent.*;
+
+import static java.util.concurrent.TimeUnit.*;
+
+/**
+ *
+ */
+public class CacheConfigurationP2PTest extends GridCommonAbstractTest {
+    /** */
+    public static final String NODE_START_MSG = "Test external node started";
+
+    /** */
+    private static final String CLIENT_CLS_NAME =
+        "org.apache.ignite.tests.p2p.startcache.CacheConfigurationP2PTestClient";
+
+    /**
+     * @return Configuration.
+     */
+    static IgniteConfiguration createConfiguration() {
+        IgniteConfiguration cfg = new IgniteConfiguration();
+
+        cfg.setPeerClassLoadingEnabled(true);
+
+        cfg.setLocalHost("127.0.0.1");
+
+        TcpDiscoverySpi disco = new TcpDiscoverySpi();
+
+        disco.setIpFinderCleanFrequency(1000);
+
+        TcpDiscoveryVmIpFinder ipFinder = new TcpDiscoveryVmIpFinder();
+
+        ipFinder.setAddresses(Arrays.asList("127.0.0.1:47500..47509"));
+
+        disco.setIpFinder(ipFinder);
+
+        cfg.setDiscoverySpi(disco);
+
+        return cfg;
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testCacheConfigurationP2P() throws Exception {
+        try (Ignite ignite = Ignition.start(createConfiguration())) {
+            final CountDownLatch srvsReadyLatch = new CountDownLatch(2);
+
+            final CountDownLatch clientReadyLatch = new CountDownLatch(1);
+
+            GridJavaProcess node1 = null;
+            GridJavaProcess node2 = null;
+            GridJavaProcess clientNode = null;
+
+            Collection<String> jvmArgs = Arrays.asList("-ea", "-DIGNITE_QUIET=false");
+
+            try {
+                node1 = GridJavaProcess.exec(
+                    CacheConfigurationP2PTestServer.class.getName(),
+                    null,
+                    log,
+                    new CI1<String>() {
+                        @Override public void apply(String s) {
+                            info("Server node1: " + s);
+
+                            if (s.contains(NODE_START_MSG))
+                                srvsReadyLatch.countDown();
+                        }
+                    },
+                    null,
+                    jvmArgs,
+                    null
+                );
+
+                node2 = GridJavaProcess.exec(
+                    CacheConfigurationP2PTestServer.class.getName(), null,
+                    log,
+                    new CI1<String>() {
+                        @Override public void apply(String s) {
+                            info("Server node2: " + s);
+
+                            if (s.contains(NODE_START_MSG))
+                                srvsReadyLatch.countDown();
+                        }
+                    },
+                    null,
+                    jvmArgs,
+                    null
+                );
+
+                assertTrue(srvsReadyLatch.await(60, SECONDS));
+
+                String cp = U.getIgniteHome() + "/modules/extdata/p2p/target/classes/";
+
+                clientNode = GridJavaProcess.exec(
+                    CLIENT_CLS_NAME, null,
+                    log,
+                    new CI1<String>() {
+                        @Override public void apply(String s) {
+                            info("Client node: " + s);
+
+                            if (s.contains(NODE_START_MSG))
+                                clientReadyLatch.countDown();
+                        }
+                    },
+                    null,
+                    jvmArgs,
+                    cp
+                );
+
+                assertTrue(clientReadyLatch.await(60, SECONDS));
+
+                int exitCode = clientNode.getProcess().waitFor();
+
+                assertEquals("Unexpected exit code", 0, exitCode);
+
+                node1.killProcess();
+                node2.killProcess();
+
+                final DiscoverySpi spi = ignite.configuration().getDiscoverySpi();
+
+                boolean wait = GridTestUtils.waitForCondition(new GridAbsPredicate() {
+                    @Override public boolean apply() {
+                        Map p2pLdrs = GridTestUtils.getFieldValue(spi, "p2pLdrs");
+
+                        log.info("p2pLdrs: " + p2pLdrs.size());
+
+                        return p2pLdrs.isEmpty();
+                    }
+                }, 10_000);
+
+                assertTrue(wait);
+            }
+            finally {
+                if (node1 != null)
+                    node1.killProcess();
+
+                if (node2 != null)
+                    node2.killProcess();
+
+                if (clientNode != null)
+                    clientNode.killProcess();
+            }
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/46d1369c/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/CacheConfigurationP2PTestServer.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/CacheConfigurationP2PTestServer.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/CacheConfigurationP2PTestServer.java
new file mode 100644
index 0000000..738f7cb
--- /dev/null
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/CacheConfigurationP2PTestServer.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.processors.cache;
+
+import org.apache.ignite.*;
+import org.apache.ignite.configuration.*;
+import org.apache.ignite.internal.util.typedef.internal.*;
+import org.apache.ignite.spi.discovery.tcp.*;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.*;
+
+import java.util.*;
+
+/**
+ *
+ */
+public class CacheConfigurationP2PTestServer {
+    /**
+     * @param args Arguments.
+     * @throws Exception If failed.
+     */
+    public static void main(String[] args) throws Exception {
+        System.out.println("Starting test server node.");
+
+        IgniteConfiguration cfg = CacheConfigurationP2PTest.createConfiguration();
+
+        U.setWorkDirectory(null, U.getIgniteHome());
+
+        try (Ignite ignite = Ignition.start(cfg)) {
+            System.out.println(CacheConfigurationP2PTest.NODE_START_MSG);
+
+            U.sleep(Long.MAX_VALUE);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/46d1369c/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteCacheWithIndexingTestSuite.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteCacheWithIndexingTestSuite.java b/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteCacheWithIndexingTestSuite.java
index ba6fe36..a2ccc82 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteCacheWithIndexingTestSuite.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteCacheWithIndexingTestSuite.java
@@ -46,6 +46,8 @@ public class IgniteCacheWithIndexingTestSuite extends TestSuite {
         suite.addTestSuite(CacheTtlOnheapAtomicLocalSelfTest.class);
         suite.addTestSuite(CacheTtlOnheapAtomicPartitionedSelfTest.class);
 
+        suite.addTestSuite(CacheConfigurationP2PTest.class);
+
         return suite;
     }
 }


[29/31] incubator-ignite git commit: Merge remote-tracking branch 'origin/ignite-sprint-3' into ignite-sprint-3

Posted by ag...@apache.org.
Merge remote-tracking branch 'origin/ignite-sprint-3' into ignite-sprint-3


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

Branch: refs/heads/ignite-721
Commit: df1fbef13774cf57c165023255da6b4d3ddaa22d
Parents: 46d1369 1a5990c
Author: sboikov <se...@inria.fr>
Authored: Sat Apr 11 07:02:03 2015 +0300
Committer: sboikov <se...@inria.fr>
Committed: Sat Apr 11 07:02:03 2015 +0300

----------------------------------------------------------------------
 .../org/apache/ignite/internal/visor/query/VisorQueryTask.java   | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
----------------------------------------------------------------------



[11/31] incubator-ignite git commit: # ignite-537

Posted by ag...@apache.org.
# ignite-537


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

Branch: refs/heads/ignite-721
Commit: d25627c9af1038c7c7c6a573fa0b39ccd48dceb1
Parents: 49996e7
Author: sboikov <sb...@gridgain.com>
Authored: Fri Apr 10 16:16:29 2015 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Fri Apr 10 16:16:29 2015 +0300

----------------------------------------------------------------------
 .../apache/ignite/internal/GridComponent.java   |   5 +-
 .../ignite/internal/GridPluginComponent.java    |   5 +-
 .../internal/managers/GridManagerAdapter.java   |   4 +-
 .../discovery/GridDiscoveryManager.java         |  10 +-
 .../processors/GridProcessorAdapter.java        |   5 +-
 .../processors/cache/GridCacheProcessor.java    |   4 +-
 .../continuous/GridContinuousProcessor.java     |   4 +-
 .../plugin/IgnitePluginProcessor.java           |  13 +-
 .../apache/ignite/plugin/PluginProvider.java    |   5 +-
 .../spi/discovery/DiscoverySpiDataExchange.java |   5 +-
 .../discovery/tcp/TcpClientDiscoverySpi.java    |   4 +-
 .../spi/discovery/tcp/TcpDiscoverySpi.java      | 364 ++++++++-----------
 .../discovery/tcp/TcpDiscoverySpiAdapter.java   |   4 +-
 .../tcp/messages/TcpDiscoveryClassRequest.java  |  55 +++
 .../tcp/messages/TcpDiscoveryClassResponse.java |  76 ++++
 .../TcpDiscoveryCustomEventMessage.java         |   7 +
 .../messages/TcpDiscoveryGetClassRequest.java   |  48 ---
 .../messages/TcpDiscoveryGetClassResponse.java  |  70 ----
 .../discovery/AbstractDiscoverySelfTest.java    |   4 +-
 .../tcp/TcpDiscoverySpiStartStopSelfTest.java   |   5 +-
 .../junits/spi/GridSpiAbstractTest.java         |   4 +-
 .../startcache/CacheConfigP2PStartClient.java   |  38 +-
 22 files changed, 363 insertions(+), 376 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d25627c9/modules/core/src/main/java/org/apache/ignite/internal/GridComponent.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/GridComponent.java b/modules/core/src/main/java/org/apache/ignite/internal/GridComponent.java
index 9f08d6e..fb227cd 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/GridComponent.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/GridComponent.java
@@ -22,6 +22,7 @@ import org.apache.ignite.cluster.*;
 import org.apache.ignite.spi.*;
 import org.jetbrains.annotations.*;
 
+import java.io.*;
 import java.util.*;
 
 /**
@@ -81,7 +82,7 @@ public interface GridComponent {
      * @return Discovery data object or {@code null} if there is nothing
      *      to send for this component.
      */
-    @Nullable public Object collectDiscoveryData(UUID nodeId);
+    @Nullable public Serializable collectDiscoveryData(UUID nodeId);
 
     /**
      * Receives discovery data object from remote nodes (called
@@ -90,7 +91,7 @@ public interface GridComponent {
      * @param rmtNodeId Remote node ID for which data is provided.
      * @param data Discovery data object or {@code null} if nothing was
      */
-    public void onDiscoveryDataReceived(UUID joiningNodeId, UUID rmtNodeId, Object data);
+    public void onDiscoveryDataReceived(UUID joiningNodeId, UUID rmtNodeId, Serializable data);
 
     /**
      * Prints memory statistics (sizes of internal structures, etc.).

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d25627c9/modules/core/src/main/java/org/apache/ignite/internal/GridPluginComponent.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/GridPluginComponent.java b/modules/core/src/main/java/org/apache/ignite/internal/GridPluginComponent.java
index 305a7e3..b438bc1 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/GridPluginComponent.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/GridPluginComponent.java
@@ -23,6 +23,7 @@ import org.apache.ignite.plugin.*;
 import org.apache.ignite.spi.*;
 import org.jetbrains.annotations.*;
 
+import java.io.*;
 import java.util.*;
 
 /**
@@ -73,12 +74,12 @@ public class GridPluginComponent implements GridComponent {
     }
 
     /** {@inheritDoc} */
-    @Nullable @Override public Object collectDiscoveryData(UUID nodeId) {
+    @Nullable @Override public Serializable collectDiscoveryData(UUID nodeId) {
         return null;
     }
 
     /** {@inheritDoc} */
-    @Override public void onDiscoveryDataReceived(UUID joiningNodeId, UUID rmtNodeId, Object data) {
+    @Override public void onDiscoveryDataReceived(UUID joiningNodeId, UUID rmtNodeId, Serializable data) {
         // No-op.
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d25627c9/modules/core/src/main/java/org/apache/ignite/internal/managers/GridManagerAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/GridManagerAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/GridManagerAdapter.java
index a0521c8..cb91313 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/managers/GridManagerAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/GridManagerAdapter.java
@@ -571,12 +571,12 @@ public abstract class GridManagerAdapter<T extends IgniteSpi> implements GridMan
     }
 
     /** {@inheritDoc} */
-    @Override @Nullable public Object collectDiscoveryData(UUID nodeId) {
+    @Override @Nullable public Serializable collectDiscoveryData(UUID nodeId) {
         return null;
     }
 
     /** {@inheritDoc} */
-    @Override public void onDiscoveryDataReceived(UUID joiningNodeId, UUID rmtNodeId, Object data) {
+    @Override public void onDiscoveryDataReceived(UUID joiningNodeId, UUID rmtNodeId, Serializable data) {
         // No-op.
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d25627c9/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java
index 299b3c2..c073596 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java
@@ -419,13 +419,13 @@ public class GridDiscoveryManager extends GridManagerAdapter<DiscoverySpi> {
         });
 
         spi.setDataExchange(new DiscoverySpiDataExchange() {
-            @Override public Map<Integer, Object> collect(UUID nodeId) {
+            @Override public Map<Integer, Serializable> collect(UUID nodeId) {
                 assert nodeId != null;
 
-                Map<Integer, Object> data = new HashMap<>();
+                Map<Integer, Serializable> data = new HashMap<>();
 
                 for (GridComponent comp : ctx.components()) {
-                    Object compData = comp.collectDiscoveryData(nodeId);
+                    Serializable compData = comp.collectDiscoveryData(nodeId);
 
                     if (compData != null) {
                         assert comp.discoveryDataType() != null;
@@ -437,8 +437,8 @@ public class GridDiscoveryManager extends GridManagerAdapter<DiscoverySpi> {
                 return data;
             }
 
-            @Override public void onExchange(UUID joiningNodeId, UUID nodeId, Map<Integer, Object> data) {
-                for (Map.Entry<Integer, Object> e : data.entrySet()) {
+            @Override public void onExchange(UUID joiningNodeId, UUID nodeId, Map<Integer, Serializable> data) {
+                for (Map.Entry<Integer, Serializable> e : data.entrySet()) {
                     GridComponent comp = null;
 
                     for (GridComponent c : ctx.components()) {

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d25627c9/modules/core/src/main/java/org/apache/ignite/internal/processors/GridProcessorAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/GridProcessorAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/GridProcessorAdapter.java
index 39ccd7a..a84c48a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/GridProcessorAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/GridProcessorAdapter.java
@@ -25,6 +25,7 @@ import org.apache.ignite.internal.util.typedef.internal.*;
 import org.apache.ignite.spi.*;
 import org.jetbrains.annotations.*;
 
+import java.io.*;
 import java.util.*;
 
 /**
@@ -66,12 +67,12 @@ public abstract class GridProcessorAdapter implements GridProcessor {
     }
 
     /** {@inheritDoc} */
-    @Override @Nullable public Object collectDiscoveryData(UUID nodeId) {
+    @Override @Nullable public Serializable collectDiscoveryData(UUID nodeId) {
         return null;
     }
 
     /** {@inheritDoc} */
-    @Override public void onDiscoveryDataReceived(UUID joiningNodeId, UUID rmtNodeId, Object data) {
+    @Override public void onDiscoveryDataReceived(UUID joiningNodeId, UUID rmtNodeId, Serializable data) {
         // No-op.
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d25627c9/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
index cc90cd3..2859061 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
@@ -1587,7 +1587,7 @@ public class GridCacheProcessor extends GridProcessorAdapter {
     }
 
     /** {@inheritDoc} */
-    @Nullable @Override public Object collectDiscoveryData(UUID nodeId) {
+    @Nullable @Override public Serializable collectDiscoveryData(UUID nodeId) {
         // Collect dynamically started caches to a single object.
         Collection<DynamicCacheChangeRequest> reqs =
             new ArrayList<>(registeredCaches.size() + registeredTemplates.size());
@@ -1626,7 +1626,7 @@ public class GridCacheProcessor extends GridProcessorAdapter {
     }
 
     /** {@inheritDoc} */
-    @Override public void onDiscoveryDataReceived(UUID joiningNodeId, UUID rmtNodeId, Object data) {
+    @Override public void onDiscoveryDataReceived(UUID joiningNodeId, UUID rmtNodeId, Serializable data) {
         if (data instanceof DynamicCacheChangeBatch) {
             DynamicCacheChangeBatch batch = (DynamicCacheChangeBatch)data;
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d25627c9/modules/core/src/main/java/org/apache/ignite/internal/processors/continuous/GridContinuousProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/continuous/GridContinuousProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/continuous/GridContinuousProcessor.java
index 54da8e6..0d76ad4 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/continuous/GridContinuousProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/continuous/GridContinuousProcessor.java
@@ -318,7 +318,7 @@ public class GridContinuousProcessor extends GridProcessorAdapter {
     }
 
     /** {@inheritDoc} */
-    @Override @Nullable public Object collectDiscoveryData(UUID nodeId) {
+    @Override @Nullable public Serializable collectDiscoveryData(UUID nodeId) {
         if (!nodeId.equals(ctx.localNodeId())) {
             pendingLock.lock();
 
@@ -349,7 +349,7 @@ public class GridContinuousProcessor extends GridProcessorAdapter {
     }
 
     /** {@inheritDoc} */
-    @Override public void onDiscoveryDataReceived(UUID nodeId, UUID rmtNodeId, Object obj) {
+    @Override public void onDiscoveryDataReceived(UUID nodeId, UUID rmtNodeId, Serializable obj) {
         DiscoveryData data = (DiscoveryData)obj;
 
         if (!ctx.isDaemon() && data != null) {

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d25627c9/modules/core/src/main/java/org/apache/ignite/internal/processors/plugin/IgnitePluginProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/plugin/IgnitePluginProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/plugin/IgnitePluginProcessor.java
index 0b9ca5e..8f2cc51 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/plugin/IgnitePluginProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/plugin/IgnitePluginProcessor.java
@@ -26,6 +26,7 @@ import org.apache.ignite.internal.util.typedef.internal.*;
 import org.apache.ignite.plugin.*;
 import org.jetbrains.annotations.*;
 
+import java.io.*;
 import java.lang.reflect.*;
 import java.security.*;
 import java.util.*;
@@ -153,11 +154,11 @@ public class IgnitePluginProcessor extends GridProcessorAdapter {
     }
 
     /** {@inheritDoc} */
-    @Nullable @Override public Object collectDiscoveryData(UUID nodeId) {
-        Map<String, Object> discData = null;
+    @Nullable @Override public Serializable collectDiscoveryData(UUID nodeId) {
+        HashMap<String, Serializable> discData = null;
 
         for (Map.Entry<String, PluginProvider> e : plugins.entrySet()) {
-            Object data = e.getValue().provideDiscoveryData(nodeId);
+            Serializable data = e.getValue().provideDiscoveryData(nodeId);
 
             if (data != null) {
                 if (discData == null)
@@ -171,11 +172,11 @@ public class IgnitePluginProcessor extends GridProcessorAdapter {
     }
 
     /** {@inheritDoc} */
-    @Override public void onDiscoveryDataReceived(UUID nodeId, UUID rmtNodeId, Object data) {
-        Map<String, Object> discData = (Map<String, Object>)data;
+    @Override public void onDiscoveryDataReceived(UUID nodeId, UUID rmtNodeId, Serializable data) {
+        Map<String, Serializable> discData = (Map<String, Serializable>)data;
 
         if (discData != null) {
-            for (Map.Entry<String, Object> e : discData.entrySet()) {
+            for (Map.Entry<String, Serializable> e : discData.entrySet()) {
                 PluginProvider provider = plugins.get(e.getKey());
 
                 if (provider != null)

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d25627c9/modules/core/src/main/java/org/apache/ignite/plugin/PluginProvider.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/plugin/PluginProvider.java b/modules/core/src/main/java/org/apache/ignite/plugin/PluginProvider.java
index d2aedff..17bbc36 100644
--- a/modules/core/src/main/java/org/apache/ignite/plugin/PluginProvider.java
+++ b/modules/core/src/main/java/org/apache/ignite/plugin/PluginProvider.java
@@ -21,6 +21,7 @@ import org.apache.ignite.*;
 import org.apache.ignite.cluster.*;
 import org.jetbrains.annotations.*;
 
+import java.io.*;
 import java.util.*;
 
 /**
@@ -101,7 +102,7 @@ public interface PluginProvider<C extends PluginConfiguration> {
      * @return Discovery data object or {@code null} if there is nothing
      *      to send for this component.
      */
-    @Nullable public Object provideDiscoveryData(UUID nodeId);
+    @Nullable public Serializable provideDiscoveryData(UUID nodeId);
 
     /**
      * Receives plugin discovery data object from remote nodes (called
@@ -112,7 +113,7 @@ public interface PluginProvider<C extends PluginConfiguration> {
      * @param data Discovery data object or {@code null} if nothing was
      *      sent for this component.
      */
-    public void receiveDiscoveryData(UUID nodeId, Object data);
+    public void receiveDiscoveryData(UUID nodeId, Serializable data);
 
     /**
      * Validates that new node can join grid topology, this method is called on coordinator

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d25627c9/modules/core/src/main/java/org/apache/ignite/spi/discovery/DiscoverySpiDataExchange.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/DiscoverySpiDataExchange.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/DiscoverySpiDataExchange.java
index 29f6b5f..46d6716 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/DiscoverySpiDataExchange.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/DiscoverySpiDataExchange.java
@@ -17,6 +17,7 @@
 
 package org.apache.ignite.spi.discovery;
 
+import java.io.*;
 import java.util.*;
 
 /**
@@ -33,7 +34,7 @@ public interface DiscoverySpiDataExchange {
      * @param joiningNodeId ID of new node that joins topology.
      * @return Collection of discovery data objects from different components.
      */
-    public Map<Integer, Object> collect(UUID joiningNodeId);
+    public Map<Integer, Serializable> collect(UUID joiningNodeId);
 
     /**
      * Notifies discovery manager about data received from remote node.
@@ -41,5 +42,5 @@ public interface DiscoverySpiDataExchange {
      * @param joiningNodeId Remote node ID.
      * @param data Collection of discovery data objects from different components.
      */
-    public void onExchange(UUID joiningNodeId, UUID nodeId, Map<Integer, Object> data);
+    public void onExchange(UUID joiningNodeId, UUID nodeId, Map<Integer, Serializable> data);
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d25627c9/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpi.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpi.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpi.java
index 2ab8e8f..312b940 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpi.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpi.java
@@ -900,7 +900,7 @@ public class TcpClientDiscoverySpi extends TcpDiscoverySpiAdapter implements Tcp
 
                         Map<UUID, Map<Integer, byte[]>> dataMap = msg.oldNodesDiscoveryData();
 
-                        if (dataMap != null) {
+                        if (!locNode.isDaemon() && dataMap != null) {
                             for (Map.Entry<UUID, Map<Integer, byte[]>> entry : dataMap.entrySet())
                                 onExchange(newNodeId, entry.getKey(), entry.getValue(), null);
                         }
@@ -924,7 +924,7 @@ public class TcpClientDiscoverySpi extends TcpDiscoverySpiAdapter implements Tcp
 
                     Map<Integer, byte[]> data = msg.newNodeDiscoveryData();
 
-                    if (data != null)
+                    if (!locNode.isDaemon() && data != null)
                         onExchange(newNodeId, newNodeId, data, null);
                 }
             }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d25627c9/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
index 94fbfee..21f1c97 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
@@ -239,9 +239,9 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
     @SuppressWarnings("FieldAccessedSynchronizedAndUnsynchronized")
     private CheckStatusSender chkStatusSnd;
 
-    /** IP finder cleaner. */
+    /** IP finder and p2p loaders cleaner. */
     @SuppressWarnings("FieldAccessedSynchronizedAndUnsynchronized")
-    private IpFinderCleaner ipFinderCleaner;
+    private DiscoveryCleaner cleaner;
 
     /** Statistics printer thread. */
     @SuppressWarnings("FieldAccessedSynchronizedAndUnsynchronized")
@@ -289,15 +289,9 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
     @SuppressWarnings("FieldAccessedSynchronizedAndUnsynchronized")
     private ConcurrentLinkedDeque<String> debugLog;
 
-    /** Thread periodically closing unused p2p class loader connections. */
-    private DeploymentClassLoadersCleaner p2pLdrCleaner;
-
     /** Class loaders for event data unmarshalling. */
     private ConcurrentMap<UUID, DiscoveryDeploymentClassLoader> p2pLdrs = new ConcurrentHashMap<>();
 
-    /** Class loader for local data unmarshalling. */
-    private ClassLoader locLdr = U.gridClassLoader();
-
     /** {@inheritDoc} */
     @IgniteInstanceResource
     @Override public void injectResources(Ignite ignite) {
@@ -770,14 +764,9 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
         chkStatusSnd = new CheckStatusSender();
         chkStatusSnd.start();
 
-        if (ipFinder.isShared()) {
-            ipFinderCleaner = new IpFinderCleaner();
-            ipFinderCleaner.start();
-        }
-
-        if (ignite.configuration().isPeerClassLoadingEnabled()) {
-            p2pLdrCleaner = new DeploymentClassLoadersCleaner();
-            p2pLdrCleaner.start();
+        if (ipFinder.isShared() || ignite.configuration().isPeerClassLoadingEnabled()) {
+            cleaner = new DiscoveryCleaner();
+            cleaner.start();
         }
 
         if (log.isDebugEnabled() && !restart)
@@ -992,8 +981,8 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
         U.interrupt(chkStatusSnd);
         U.join(chkStatusSnd, log);
 
-        U.interrupt(ipFinderCleaner);
-        U.join(ipFinderCleaner, log);
+        U.interrupt(cleaner);
+        U.join(cleaner, log);
 
         U.interrupt(msgWorker);
         U.join(msgWorker, log);
@@ -1004,9 +993,6 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
         U.interrupt(statsPrinter);
         U.join(statsPrinter, log);
 
-        U.interrupt(p2pLdrCleaner);
-        U.join(p2pLdrCleaner, log);
-
         if (ipFinder != null)
             ipFinder.close();
 
@@ -1265,16 +1251,16 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
 
     /** {@inheritDoc} */
     @Override public void sendCustomEvent(Serializable evt) {
-        byte[] msgBytes;
-
         try {
+            byte[] msgBytes;
+
             msgBytes = marsh.marshal(evt);
+
+            msgWorker.addMessage(new TcpDiscoveryCustomEventMessage(getLocalNodeId(), msgBytes));
         }
         catch (IgniteCheckedException e) {
             throw new IgniteSpiException("Failed to marshal custom event: " + evt, e);
         }
-
-        msgWorker.addMessage(new TcpDiscoveryCustomEventMessage(getLocalNodeId(), msgBytes));
     }
 
     /**
@@ -2024,8 +2010,8 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
         U.interrupt(chkStatusSnd);
         U.join(chkStatusSnd, log);
 
-        U.interrupt(ipFinderCleaner);
-        U.join(ipFinderCleaner, log);
+        U.interrupt(cleaner);
+        U.join(cleaner, log);
 
         Collection<SocketReader> tmp;
 
@@ -2123,7 +2109,7 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
             b.append("    Check status sender: ").append(threadStatus(chkStatusSnd)).append(U.nl());
             b.append("    HB sender: ").append(threadStatus(hbsSnd)).append(U.nl());
             b.append("    Socket timeout worker: ").append(threadStatus(sockTimeoutWorker)).append(U.nl());
-            b.append("    IP finder cleaner: ").append(threadStatus(ipFinderCleaner)).append(U.nl());
+            b.append("    Cleaner: ").append(threadStatus(cleaner)).append(U.nl());
             b.append("    Stats printer: ").append(threadStatus(statsPrinter)).append(U.nl());
 
             b.append(U.nl());
@@ -2224,12 +2210,12 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
      * @param req Get class request.
      * @return Get class response.
      */
-    private TcpDiscoveryGetClassResponse processGetClassRequest(TcpDiscoveryGetClassRequest req) {
+    private TcpDiscoveryClassResponse processGetClassRequest(TcpDiscoveryClassRequest req) {
         assert !F.isEmpty(req.className()) : req;
 
         String rsrc = U.classNameToResourceName(req.className());
 
-        InputStream in = locLdr.getResourceAsStream(rsrc);
+        InputStream in = U.gridClassLoader().getResourceAsStream(rsrc);
 
         byte[] clsBytes = null;
         String err = null;
@@ -2243,7 +2229,7 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
                 clsBytes = bytes.entireArray();
             }
             catch (IOException e) {
-                err = "Failed to load class '" + req.className() + "' due IO error: " + e;
+                err = "Failed to load class due IO error [cls=" + req.className() + ", err=" + e + ']';
 
                 U.error(log, err, e);
             }
@@ -2255,22 +2241,121 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
             if (log.isDebugEnabled())
                 log.debug("Failed to find requested class: " + req.className());
 
-            err = "Class '" + req.className() + "' not found.";
+            err = "Failed to find requested class: " + req.className();
         }
 
-        TcpDiscoveryGetClassResponse res;
+        TcpDiscoveryClassResponse res;
 
         if (clsBytes != null)
-            res = new TcpDiscoveryGetClassResponse(getLocalNodeId(), clsBytes);
+            res = new TcpDiscoveryClassResponse(getLocalNodeId(), clsBytes);
         else {
             assert err != null;
 
-            res = new TcpDiscoveryGetClassResponse(getLocalNodeId(), err);
+            res = new TcpDiscoveryClassResponse(getLocalNodeId(), err);
         }
 
         return res;
     }
 
+    /**
+     * @param node Node created event.
+     * @return Class loader for custom event unmarshalling.
+     */
+    @Nullable protected ClassLoader customMessageClassLoader(TcpDiscoveryNode node) {
+        assert ignite != null;
+
+        if (!ignite.configuration().isPeerClassLoadingEnabled())
+            return null;
+
+        if (node.id().equals(getLocalNodeId()) || node.isClient())
+            return U.gridClassLoader();
+
+        DiscoveryDeploymentClassLoader ldr = p2pLdrs.get(node.id());
+
+        if (ldr == null)
+            ldr = F.addIfAbsent(p2pLdrs, node.id(), new DiscoveryDeploymentClassLoader(node));
+
+        return ldr;
+    }
+
+    /**
+     * @param joiningNode Joining node.
+     * @param nodeId Remote node provided data.
+     * @return Class loader for exchange data unmarshalling.
+     */
+    @Nullable protected ClassLoader exchangeClassLoader(TcpDiscoveryNode joiningNode, UUID nodeId) {
+        assert joiningNode != null;
+        assert ignite != null;
+
+        if (!ignite.configuration().isPeerClassLoadingEnabled())
+            return null;
+
+        if (nodeId.equals(getLocalNodeId()))
+            return U.gridClassLoader();
+
+        TcpDiscoveryNode node;
+
+        if (joiningNode.id().equals(nodeId))
+            node = joiningNode;
+        else {
+            node = ring.node(nodeId);
+
+            if (node == null) {
+                if (log.isDebugEnabled())
+                    log.debug("Node provided exchange data left, will use local class loader " +
+                        "for exchange data [nodeId=" + nodeId + ']');
+
+                return U.gridClassLoader();
+            }
+        }
+
+        if (node.isClient()) // Do not support loading from client nodes.
+            return U.gridClassLoader();
+
+        DiscoveryDeploymentClassLoader ldr = p2pLdrs.get(nodeId);
+
+        if (ldr == null)
+            ldr = F.addIfAbsent(p2pLdrs, nodeId, new DiscoveryDeploymentClassLoader(node));
+
+        return ldr;
+    }
+
+    /**
+     * @param nodeId Node ID.
+     * @return Marshalled exchange data.
+     * @throws IgniteSpiException If failed.
+     */
+    private Map<Integer, byte[]> collectExchangeData(UUID nodeId) throws IgniteSpiException {
+        Map<Integer, Serializable> data = exchange.collect(nodeId);
+
+        Map<Integer, byte[]> data0 = U.newHashMap(data.size());
+
+        for (Map.Entry<Integer, Serializable> entry : data.entrySet()) {
+            try {
+                byte[] bytes = marsh.marshal(entry.getValue());
+
+                data0.put(entry.getKey(), bytes);
+            }
+            catch (IgniteCheckedException e) {
+                U.error(log, "Failed to marshal discovery data " +
+                    "[comp=" + entry.getKey() + ", data=" + entry.getValue() + ']', e);
+
+                throw new IgniteSpiException("Failed to marshal discovery data.", e);
+            }
+        }
+
+        return data0;
+    }
+
+    /**
+     * @param msg Message.
+     * @param nodeId Node ID.
+     */
+    private static void removeMetrics(TcpDiscoveryHeartbeatMessage msg, UUID nodeId) {
+        msg.removeMetrics(nodeId);
+        msg.removeCacheMetrics(nodeId);
+    }
+
     /** {@inheritDoc} */
     @Override public String toString() {
         return S.toString(TcpDiscoverySpi.class, this);
@@ -2381,18 +2466,19 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
     }
 
     /**
-     * Thread that cleans IP finder and keeps it in the correct state, unregistering
-     * addresses of the nodes that has left the topology.
+     * Thread that periodically tries to release p2p class loaders connections, cleans
+     * IP finder and keeps it in the correct state, unregistering addresses of the nodes
+     * that has left the topology.
      * <p>
-     * This thread should run only on coordinator node and will clean IP finder
+     * IP finder cleaner should run only on coordinator node and will clean IP finder
      * if and only if {@link TcpDiscoveryIpFinder#isShared()} is {@code true}.
      */
-    private class IpFinderCleaner extends IgniteSpiThread {
+    private class DiscoveryCleaner extends IgniteSpiThread {
         /**
          * Constructor.
          */
-        private IpFinderCleaner() {
-            super(gridName, "tcp-disco-ip-finder-cleaner", log);
+        private DiscoveryCleaner() {
+            super(gridName, "tcp-disco-cleaner", log);
 
             setPriority(threadPri);
         }
@@ -2401,11 +2487,21 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
         @SuppressWarnings("BusyWait")
         @Override protected void body() throws InterruptedException {
             if (log.isDebugEnabled())
-                log.debug("IP finder cleaner has been started.");
+                log.debug("Tcp discovery cleaner has been started.");
 
             while (!isInterrupted()) {
                 Thread.sleep(ipFinderCleanFreq);
 
+                for (DiscoveryDeploymentClassLoader ldr : p2pLdrs.values()) {
+                    if (ring.node(ldr.nodeId()) == null) {
+                        ldr.onNodeLeft();
+
+                        p2pLdrs.remove(ldr.nodeId(), ldr);
+                    }
+                    else
+                        ldr.closeConnectionIfNotUsed();
+                }
+
                 if (!isLocalNodeCoordinator())
                     continue;
 
@@ -2505,41 +2601,6 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
     }
 
     /**
-     *
-     */
-    private class DeploymentClassLoadersCleaner extends IgniteSpiThread {
-        /**
-         * Constructor.
-         */
-        private DeploymentClassLoadersCleaner() {
-            super(gridName, "tcp-disco-p2p-ldr-cleaner", log);
-
-            setPriority(threadPri);
-        }
-
-        /** {@inheritDoc} */
-        @SuppressWarnings("BusyWait")
-        @Override protected void body() throws InterruptedException {
-            if (log.isDebugEnabled())
-                log.debug("Deployment class loader cleaner has been started.");
-
-            while (!isInterrupted()) {
-                Thread.sleep(5000);
-
-                for (DiscoveryDeploymentClassLoader ldr : p2pLdrs.values()) {
-                    if (ring.node(ldr.nodeId()) == null) {
-                        ldr.onNodeLeft();
-
-                        p2pLdrs.remove(ldr.nodeId(), ldr);
-                    }
-                    else
-                        ldr.closeConnectionIfNotUsed();
-                }
-            }
-        }
-    }
-
-    /**
      * Pending messages container.
      */
     private static class PendingMessages {
@@ -3656,7 +3717,7 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
 
                     Map<Integer, byte[]> data = msg.newNodeDiscoveryData();
 
-                    if (data != null)
+                    if (!locNode.isDaemon() && data != null)
                         onExchange(node.id(), node.id(), data, exchangeClassLoader(node, node.id()));
 
                     msg.addDiscoveryData(locNodeId, collectExchangeData(node.id()));
@@ -3727,7 +3788,7 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
                 }
 
                 // Notify outside of synchronized block.
-                if (dataMap != null) {
+                if (!locNode.isDaemon() && dataMap != null) {
                     for (Map.Entry<UUID, Map<Integer, byte[]>> entry : dataMap.entrySet()) {
                         onExchange(node.id(),
                             entry.getKey(),
@@ -4529,7 +4590,7 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
 
                 Collection<ClusterNode> snapshot = hist.get(msg.topologyVersion());
 
-                if (lsnr != null && (spiState == CONNECTED || spiState == DISCONNECTING)) {
+                if (!locNode.isDaemon() && lsnr != null && (spiState == CONNECTED || spiState == DISCONNECTING)) {
                     assert msg.messageBytes() != null;
 
                     TcpDiscoveryNode node = ring.node(msg.creatorNodeId());
@@ -5024,8 +5085,8 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
 
                             continue;
                         }
-                        else if (msg instanceof TcpDiscoveryGetClassRequest) {
-                            TcpDiscoveryGetClassResponse res = processGetClassRequest((TcpDiscoveryGetClassRequest)msg);
+                        else if (msg instanceof TcpDiscoveryClassRequest) {
+                            TcpDiscoveryClassResponse res = processGetClassRequest((TcpDiscoveryClassRequest)msg);
 
                             writeToSocket(sock, res);
 
@@ -5324,104 +5385,11 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
     }
 
     /**
-     * @param node Node created event.
-     * @return Class loader for custom event unmarshalling.
-     */
-    @Nullable protected ClassLoader customMessageClassLoader(TcpDiscoveryNode node) {
-        assert ignite != null;
-
-        if (!ignite.configuration().isPeerClassLoadingEnabled())
-            return null;
-
-        if (node.id().equals(getLocalNodeId()))
-            return locLdr;
-
-        DiscoveryDeploymentClassLoader ldr = p2pLdrs.get(node.id());
-
-        if (ldr == null)
-            ldr = F.addIfAbsent(p2pLdrs, node.id(), new DiscoveryDeploymentClassLoader(node));
-
-        return ldr;
-    }
-
-    /**
-     * @param joiningNode Joining node.
-     * @param nodeId Remote node provided data.
-     * @return Class loader for exchange data unmarshalling.
-     */
-    @Nullable protected ClassLoader exchangeClassLoader(TcpDiscoveryNode joiningNode, UUID nodeId) {
-        assert joiningNode != null;
-        assert ignite != null;
-
-        if (!ignite.configuration().isPeerClassLoadingEnabled())
-            return null;
-
-        if (nodeId.equals(getLocalNodeId()))
-            return locLdr;
-
-        TcpDiscoveryNode node;
-
-        if (joiningNode.id().equals(nodeId))
-            node = joiningNode;
-        else {
-            node = ring.node(nodeId);
-
-            if (node == null) {
-                if (log.isDebugEnabled())
-                    log.debug("Node provided exchange data left, will use local class loader " +
-                        "for exchange data [nodeId=" + nodeId + ']');
-
-                return locLdr;
-            }
-        }
-
-        if (node.isClient()) // Do not support loading from client nodes.
-            return locLdr;
-
-        DiscoveryDeploymentClassLoader ldr = p2pLdrs.get(nodeId);
-
-        if (ldr == null)
-            ldr = F.addIfAbsent(p2pLdrs, nodeId, new DiscoveryDeploymentClassLoader(node));
-
-        return ldr;
-    }
-
-    /**
-     * @param nodeId Node ID.
-     * @return Marshalled exchange data.
-     * @throws IgniteSpiException If failed.
-     */
-    private Map<Integer, byte[]> collectExchangeData(UUID nodeId) throws IgniteSpiException {
-        Map<Integer, Object> data = exchange.collect(nodeId);
-
-        Map<Integer, byte[]> data0 = U.newHashMap(data.size());
-
-        for (Map.Entry<Integer, Object> entry : data.entrySet()) {
-            try {
-                byte[] bytes = marsh.marshal(entry.getValue());
-
-                data0.put(entry.getKey(), bytes);
-            }
-            catch (IgniteCheckedException e) {
-                U.error(log, "Failed to marshal discovery data " +
-                    "[comp=" + entry.getKey() + ", data=" + entry.getValue() + ']', e);
-
-                throw new IgniteSpiException("Failed to marshal discovery data.", e);
-            }
-        }
-
-        return data0;
-    }
-
-    /**
      *
      */
     private class DiscoveryDeploymentClassLoader extends ClassLoader {
         /** */
-        private final UUID nodeId;
-
-        /** */
-        private volatile TcpDiscoveryNode node;
+        private final TcpDiscoveryNode node;
 
         /** */
         private Socket sock;
@@ -5437,15 +5405,13 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
             assert !node.id().equals(getLocalNodeId());
 
             this.node = node;
-
-            nodeId = node.id();
         }
 
         /**
          * @return Target node ID.
          */
         UUID nodeId() {
-            return nodeId;
+            return node.id();
         }
 
         /**
@@ -5457,14 +5423,12 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
             try {
                 if (sock != null) {
                     if (log.isDebugEnabled())
-                        log.debug("Closing deployment class loader connection on node left [node=" + nodeId + ']');
+                        log.debug("Closing deployment class loader connection on node left [node=" + node.id() + ']');
 
                     U.closeQuiet(sock);
 
                     sock = null;
                 }
-
-                node = null;
             }
             finally {
                 lock.writeLock().unlock();
@@ -5479,7 +5443,7 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
                 try {
                     if (sock != null) {
                         if (log.isDebugEnabled())
-                            log.debug("Closing idle deployment class loader connection [node=" + nodeId + ']');
+                            log.debug("Closing idle deployment class loader connection [node=" + node.id() + ']');
 
                         U.closeQuiet(sock);
 
@@ -5494,18 +5458,14 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
 
         /** {@inheritDoc} */
         @Override protected Class<?> findClass(String name) throws ClassNotFoundException {
-            if (node == null)
-                throw new ClassNotFoundException("Failed to load class, peer node left " +
-                    "[cls=" +name + ", node=" + nodeId + ']');
-
             lock.readLock().lock();
 
             try {
-                TcpDiscoveryGetClassResponse res = requestClass(name);
+                TcpDiscoveryClassResponse res = requestClass(name);
 
                 if (res == null)
                     throw new ClassNotFoundException("Failed to load class, can not connect to peer node " +
-                        "[cls=" + name + ", node=" + nodeId + ']');
+                        "[cls=" + name + ", node=" + node.id() + ']');
 
                 if (res.error() != null)
                     throw new ClassNotFoundException(res.error());
@@ -5523,17 +5483,12 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
          * @param name Class name.
          * @return Class response or {@code null} if failed to connect.
          */
-        @Nullable private synchronized TcpDiscoveryGetClassResponse requestClass(String name) {
-            TcpDiscoveryGetClassRequest msg = new TcpDiscoveryGetClassRequest(getLocalNodeId(), name);
+        @Nullable private synchronized TcpDiscoveryClassResponse requestClass(String name) {
+            TcpDiscoveryClassRequest msg = new TcpDiscoveryClassRequest(getLocalNodeId(), name);
 
             for (int i = 0; i < reconCnt; i++) {
                 if (sock == null) {
-                    TcpDiscoveryNode node0 = node;
-
-                    if (node0 == null)
-                        return null; // Node left.
-
-                    sock = connect(node0);
+                    sock = connect(node);
 
                     if (sock == null)
                         break;
@@ -5549,8 +5504,6 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
                 }
             }
 
-            node = null; // Consider node failed.
-
             p2pLdrs.remove(nodeId, this);
 
             return null;
@@ -5563,7 +5516,7 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
          * @throws IOException If request failed.
          * @throws IgniteCheckedException If request failed.
          */
-        private TcpDiscoveryGetClassResponse request(Socket sock, TcpDiscoveryGetClassRequest msg)
+        private TcpDiscoveryClassResponse request(Socket sock, TcpDiscoveryClassRequest msg)
             throws IOException, IgniteCheckedException
         {
             long tstamp = U.currentTimeMillis();
@@ -5572,7 +5525,7 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
 
             stats.onMessageSent(msg, U.currentTimeMillis() - tstamp);
 
-            TcpDiscoveryGetClassResponse res = readMessage(sock, null, netTimeout);
+            TcpDiscoveryClassResponse res = readMessage(sock, null, netTimeout);
 
             stats.onMessageReceived(res);
 
@@ -5630,13 +5583,4 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
             return null;
         }
     }
-
-    /**
-     * @param msg Message.
-     * @param nodeId Node ID.
-     */
-    private static void removeMetrics(TcpDiscoveryHeartbeatMessage msg, UUID nodeId) {
-        msg.removeMetrics(nodeId);
-        msg.removeCacheMetrics(nodeId);
-    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d25627c9/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiAdapter.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiAdapter.java
index db75051..98e048d 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiAdapter.java
@@ -754,11 +754,11 @@ abstract class TcpDiscoverySpiAdapter extends IgniteSpiAdapter implements Discov
         Map<Integer, byte[]> data,
         ClassLoader clsLdr)
     {
-        Map<Integer, Object> data0 = U.newHashMap(data.size());
+        Map<Integer, Serializable> data0 = U.newHashMap(data.size());
 
         for (Map.Entry<Integer, byte[]> entry : data.entrySet()) {
             try {
-                Object compData = marsh.unmarshal(entry.getValue(), clsLdr);
+                Serializable compData = marsh.unmarshal(entry.getValue(), clsLdr);
 
                 data0.put(entry.getKey(), compData);
             }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d25627c9/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryClassRequest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryClassRequest.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryClassRequest.java
new file mode 100644
index 0000000..befe483
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryClassRequest.java
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.spi.discovery.tcp.messages;
+
+import org.apache.ignite.internal.util.typedef.internal.*;
+
+import java.util.*;
+
+/**
+ *
+ */
+public class TcpDiscoveryClassRequest extends TcpDiscoveryAbstractMessage {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /** */
+    private String clsName;
+
+    /**
+     * @param creatorNodeId Creator node ID.
+     * @param clsName Class name.
+     */
+    public TcpDiscoveryClassRequest(UUID creatorNodeId, String clsName) {
+        super(creatorNodeId);
+
+        this.clsName = clsName;
+    }
+
+    /**
+     * @return Class name.
+     */
+    public String className() {
+        return clsName;
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return S.toString(TcpDiscoveryClassRequest.class, this, "super", super.toString());
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d25627c9/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryClassResponse.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryClassResponse.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryClassResponse.java
new file mode 100644
index 0000000..3bfe61d
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryClassResponse.java
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.spi.discovery.tcp.messages;
+
+import org.apache.ignite.internal.util.typedef.internal.*;
+import org.jetbrains.annotations.*;
+
+import java.util.*;
+
+/**
+ *
+ */
+public class TcpDiscoveryClassResponse extends TcpDiscoveryAbstractMessage {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /** */
+    private String errMsg;
+
+    /** */
+    private byte[] clsBytes;
+
+    /**
+     * @param creatorNodeId Creator node ID.
+     * @param clsBytes Class bytes.
+     */
+    public TcpDiscoveryClassResponse(UUID creatorNodeId, byte[] clsBytes) {
+        super(creatorNodeId);
+
+        this.clsBytes = clsBytes;
+    }
+
+    /**
+     * @param creatorNodeId Creator node ID.
+     * @param errMsg Error message.
+     */
+    public TcpDiscoveryClassResponse(UUID creatorNodeId, String errMsg) {
+        super(creatorNodeId);
+
+        this.errMsg = errMsg;
+    }
+
+    /**
+     * @return Error if class loading failed.
+     */
+    @Nullable public String error() {
+        return errMsg;
+    }
+
+    /**
+     * @return Loaded class bytes.
+     */
+    public byte[] classBytes() {
+        return clsBytes;
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return S.toString(TcpDiscoveryClassResponse.class, this, "super", super.toString());
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d25627c9/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryCustomEventMessage.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryCustomEventMessage.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryCustomEventMessage.java
index 6f78953..3144b93 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryCustomEventMessage.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryCustomEventMessage.java
@@ -17,6 +17,8 @@
 
 package org.apache.ignite.spi.discovery.tcp.messages;
 
+import org.apache.ignite.internal.util.typedef.internal.*;
+
 import java.util.*;
 
 /**
@@ -46,4 +48,9 @@ public class TcpDiscoveryCustomEventMessage extends TcpDiscoveryAbstractMessage
     public byte[] messageBytes() {
         return msgBytes;
     }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return S.toString(TcpDiscoveryCustomEventMessage.class, this, "super", super.toString());
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d25627c9/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryGetClassRequest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryGetClassRequest.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryGetClassRequest.java
deleted file mode 100644
index 0f6a0c4..0000000
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryGetClassRequest.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.spi.discovery.tcp.messages;
-
-import java.util.*;
-
-/**
- *
- */
-public class TcpDiscoveryGetClassRequest extends TcpDiscoveryAbstractMessage {
-    /** */
-    private static final long serialVersionUID = 0L;
-
-    /** */
-    private String clsName;
-
-    /**
-     * @param creatorNodeId Creator node ID.
-     * @param clsName Class name.
-     */
-    public TcpDiscoveryGetClassRequest(UUID creatorNodeId, String clsName) {
-        super(creatorNodeId);
-
-        this.clsName = clsName;
-    }
-
-    /**
-     * @return Class name.
-     */
-    public String className() {
-        return clsName;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d25627c9/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryGetClassResponse.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryGetClassResponse.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryGetClassResponse.java
deleted file mode 100644
index d377aee..0000000
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryGetClassResponse.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.spi.discovery.tcp.messages;
-
-import org.jetbrains.annotations.*;
-
-import java.util.*;
-
-/**
- *
- */
-public class TcpDiscoveryGetClassResponse extends TcpDiscoveryAbstractMessage {
-    /** */
-    private static final long serialVersionUID = 0L;
-
-    /** */
-    private String errMsg;
-
-    /** */
-    private byte[] clsBytes;
-
-    /**
-     * @param creatorNodeId Creator node ID.
-     * @param clsBytes Class bytes.
-     */
-    public TcpDiscoveryGetClassResponse(UUID creatorNodeId, byte[] clsBytes) {
-        super(creatorNodeId);
-
-        this.clsBytes = clsBytes;
-    }
-
-    /**
-     * @param creatorNodeId Creator node ID.
-     * @param errMsg Error message.
-     */
-    public TcpDiscoveryGetClassResponse(UUID creatorNodeId, String errMsg) {
-        super(creatorNodeId);
-
-        this.errMsg = errMsg;
-    }
-
-    /**
-     * @return Error if class loading failed.
-     */
-    @Nullable public String error() {
-        return errMsg;
-    }
-
-    /**
-     * @return Loaded class bytes.
-     */
-    public byte[] classBytes() {
-        return clsBytes;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d25627c9/modules/core/src/test/java/org/apache/ignite/spi/discovery/AbstractDiscoverySelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/spi/discovery/AbstractDiscoverySelfTest.java b/modules/core/src/test/java/org/apache/ignite/spi/discovery/AbstractDiscoverySelfTest.java
index 234e3cd..3c61f00 100644
--- a/modules/core/src/test/java/org/apache/ignite/spi/discovery/AbstractDiscoverySelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/spi/discovery/AbstractDiscoverySelfTest.java
@@ -379,11 +379,11 @@ public abstract class AbstractDiscoverySelfTest<T extends IgniteSpi> extends Gri
                 });
 
                 spi.setDataExchange(new DiscoverySpiDataExchange() {
-                    @Override public Map<Integer, Object> collect(UUID nodeId) {
+                    @Override public Map<Integer, Serializable> collect(UUID nodeId) {
                         return new HashMap<>();
                     }
 
-                    @Override public void onExchange(UUID joiningNodeId, UUID nodeId, Map<Integer, Object> data) {
+                    @Override public void onExchange(UUID joiningNodeId, UUID nodeId, Map<Integer, Serializable> data) {
                         // No-op.
                     }
                 });

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d25627c9/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiStartStopSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiStartStopSelfTest.java b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiStartStopSelfTest.java
index b0e22b4..1ce0bcd 100644
--- a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiStartStopSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiStartStopSelfTest.java
@@ -23,6 +23,7 @@ import org.apache.ignite.spi.discovery.tcp.ipfinder.*;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.*;
 import org.apache.ignite.testframework.junits.spi.*;
 
+import java.io.*;
 import java.util.*;
 
 /**
@@ -44,11 +45,11 @@ public class TcpDiscoverySpiStartStopSelfTest extends GridSpiStartStopAbstractTe
     @GridSpiTestConfig
     public DiscoverySpiDataExchange getDataExchange() {
         return new DiscoverySpiDataExchange() {
-            @Override public Map<Integer, Object> collect(UUID nodeId) {
+            @Override public Map<Integer, Serializable> collect(UUID nodeId) {
                 return null;
             }
 
-            @Override public void onExchange(UUID joiningNodeId, UUID nodeId, Map<Integer, Object> data) {
+            @Override public void onExchange(UUID joiningNodeId, UUID nodeId, Map<Integer, Serializable> data) {
                 // No-op.
             }
         };

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d25627c9/modules/core/src/test/java/org/apache/ignite/testframework/junits/spi/GridSpiAbstractTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/junits/spi/GridSpiAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/testframework/junits/spi/GridSpiAbstractTest.java
index bc6b4cb..de8596d 100644
--- a/modules/core/src/test/java/org/apache/ignite/testframework/junits/spi/GridSpiAbstractTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/testframework/junits/spi/GridSpiAbstractTest.java
@@ -208,11 +208,11 @@ public abstract class GridSpiAbstractTest<T extends IgniteSpi> extends GridAbstr
             discoSpi.setMetricsProvider(createMetricsProvider());
 
             discoSpi.setDataExchange(new DiscoverySpiDataExchange() {
-                @Override public Map<Integer, Object> collect(UUID nodeId) {
+                @Override public Map<Integer, Serializable> collect(UUID nodeId) {
                     return new HashMap<>();
                 }
 
-                @Override public void onExchange(UUID joiningNodeId, UUID nodeId, Map<Integer, Object> data) {
+                @Override public void onExchange(UUID joiningNodeId, UUID nodeId, Map<Integer, Serializable> data) {
                 }
             });
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d25627c9/modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/startcache/CacheConfigP2PStartClient.java
----------------------------------------------------------------------
diff --git a/modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/startcache/CacheConfigP2PStartClient.java b/modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/startcache/CacheConfigP2PStartClient.java
index b5e0989..1170175 100644
--- a/modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/startcache/CacheConfigP2PStartClient.java
+++ b/modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/startcache/CacheConfigP2PStartClient.java
@@ -35,25 +35,41 @@ public class CacheConfigP2PStartClient {
     public static void main(String[] args) throws Exception {
         IgniteConfiguration cfg = new IgniteConfiguration();
 
-        Ignite ignite = Ignition.start(cfg);
+        try (Ignite ignite = Ignition.start(cfg)) {
+            int nodes = ignite.cluster().nodes().size();
 
-        int nodes = ignite.cluster().nodes().size();
+            if (nodes != 3)
+                throw new Exception("Unexpected nodes number: " + nodes);
 
-        if (nodes != 3)
-            throw new Exception("Unexpected nodes number: " + nodes);
+            CacheConfiguration<Integer, Organization1> ccfg1 = new CacheConfiguration<>();
 
-        CacheConfiguration<Integer, Organization1> ccfg1 = new CacheConfiguration<>();
+            ccfg1.setName("cache1");
 
-        ccfg1.setNodeFilter(new CacheAllNodesFilter());
+            ccfg1.setNodeFilter(new CacheAllNodesFilter());
 
-        ccfg1.setIndexedTypes(Integer.class, Organization1.class);
+            ccfg1.setIndexedTypes(Integer.class, Organization1.class);
 
-        IgniteCache<Integer, Organization1> cache1 = ignite.createCache(ccfg1);
+            System.out.println("Create cache1.");
 
-        for (int i = 0; i < 500; i++)
-            cache1.put(i, new Organization1("org-" + i));
+            IgniteCache<Integer, Organization1> cache1 = ignite.createCache(ccfg1);
 
-        Thread.sleep(5000);
+            for (int i = 0; i < 500; i++)
+                cache1.put(i, new Organization1("org-" + i));
+
+            System.out.println("Sleep some time.");
+
+            Thread.sleep(5000); // Sleep some time to wait when connection of p2p loader is closed.
+
+            System.out.println("Create cache2.");
+
+            CacheConfiguration<Integer, Organization2> ccfg2 = new CacheConfiguration<>();
+
+            ccfg2.setName("cache2");
+
+            ccfg2.setIndexedTypes(Integer.class, Organization1.class);
+
+            IgniteCache<Integer, Organization2> cache2 = ignite.createCache(ccfg2);
+        }
     }
 
     /**


[25/31] incubator-ignite git commit: # ignite-537

Posted by ag...@apache.org.
# ignite-537


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

Branch: refs/heads/ignite-721
Commit: 98587c6cd66c42eee2fd8a27ad0715599ef8665b
Parents: 35537fa
Author: sboikov <se...@inria.fr>
Authored: Sat Apr 11 00:38:39 2015 +0300
Committer: sboikov <se...@inria.fr>
Committed: Sat Apr 11 00:38:39 2015 +0300

----------------------------------------------------------------------
 .../ignite/spi/discovery/tcp/TcpDiscoverySpi.java     |  7 ++++---
 .../tcp/messages/TcpDiscoveryCustomEventMessage.java  | 14 +++++++++++++-
 2 files changed, 17 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/98587c6c/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
index 3301303..5392331 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
@@ -1257,7 +1257,7 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
 
             msgBytes = marsh.marshal(evt);
 
-            msgWorker.addMessage(new TcpDiscoveryCustomEventMessage(getLocalNodeId(), msgBytes));
+            msgWorker.addMessage(new TcpDiscoveryCustomEventMessage(getLocalNodeId(), evt, msgBytes));
         }
         catch (IgniteCheckedException e) {
             throw new IgniteSpiException("Failed to marshal custom event: " + evt, e);
@@ -4600,10 +4600,11 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
 
                     TcpDiscoveryNode node = ring.node(msg.creatorNodeId());
 
-                    Serializable msgObj;
+                    Serializable msgObj = msg.message();
 
                     try {
-                        msgObj = marsh.unmarshal(msg.messageBytes(), customMessageClassLoader(node));
+                        if (msgObj == null)
+                            msgObj = marsh.unmarshal(msg.messageBytes(), customMessageClassLoader(node));
                     }
                     catch (IgniteCheckedException e) {
                         throw new IgniteSpiException("Failed to unmarshal discovery custom message.", e);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/98587c6c/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryCustomEventMessage.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryCustomEventMessage.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryCustomEventMessage.java
index 3144b93..4e42f2d 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryCustomEventMessage.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryCustomEventMessage.java
@@ -19,6 +19,7 @@ package org.apache.ignite.spi.discovery.tcp.messages;
 
 import org.apache.ignite.internal.util.typedef.internal.*;
 
+import java.io.*;
 import java.util.*;
 
 /**
@@ -30,19 +31,30 @@ public class TcpDiscoveryCustomEventMessage extends TcpDiscoveryAbstractMessage
     private static final long serialVersionUID = 0L;
 
     /** */
+    private transient Serializable msg;
+
+    /** */
     private final byte[] msgBytes;
 
     /**
      * @param creatorNodeId Creator node id.
      * @param msgBytes Serialized message.
      */
-    public TcpDiscoveryCustomEventMessage(UUID creatorNodeId, byte[] msgBytes) {
+    public TcpDiscoveryCustomEventMessage(UUID creatorNodeId, Serializable msg, byte[] msgBytes) {
         super(creatorNodeId);
 
+        this.msg = msg;
         this.msgBytes = msgBytes;
     }
 
     /**
+     * @return Message.
+     */
+    public Serializable message() {
+        return msg;
+    }
+
+    /**
      * @return Serialized message.
      */
     public byte[] messageBytes() {


[15/31] incubator-ignite git commit: sprint-3 1.1.0-SNAPSHOT again ...

Posted by ag...@apache.org.
sprint-3 1.1.0-SNAPSHOT again ...


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

Branch: refs/heads/ignite-721
Commit: 26fa0bf357d07750da3ca0a95d38fbe65e605554
Parents: 232b10b
Author: Anton Vinogradov <av...@gridgain.com>
Authored: Fri Apr 10 20:32:08 2015 +0300
Committer: Anton Vinogradov <av...@gridgain.com>
Committed: Fri Apr 10 20:32:08 2015 +0300

----------------------------------------------------------------------
 examples/pom.xml              | 2 +-
 modules/aop/pom.xml           | 2 +-
 modules/aws/pom.xml           | 2 +-
 modules/clients/pom.xml       | 2 +-
 modules/codegen/pom.xml       | 2 +-
 modules/core/pom.xml          | 2 +-
 modules/extdata/p2p/pom.xml   | 2 +-
 modules/extdata/uri/pom.xml   | 2 +-
 modules/geospatial/pom.xml    | 2 +-
 modules/hadoop/pom.xml        | 2 +-
 modules/hibernate/pom.xml     | 2 +-
 modules/indexing/pom.xml      | 2 +-
 modules/jcl/pom.xml           | 2 +-
 modules/jta/pom.xml           | 2 +-
 modules/log4j/pom.xml         | 2 +-
 modules/rest-http/pom.xml     | 2 +-
 modules/scalar/pom.xml        | 2 +-
 modules/schedule/pom.xml      | 2 +-
 modules/schema-import/pom.xml | 2 +-
 modules/slf4j/pom.xml         | 2 +-
 modules/spring/pom.xml        | 2 +-
 modules/ssh/pom.xml           | 2 +-
 modules/tools/pom.xml         | 2 +-
 modules/urideploy/pom.xml     | 2 +-
 modules/visor-console/pom.xml | 2 +-
 modules/visor-plugins/pom.xml | 2 +-
 modules/web/pom.xml           | 2 +-
 modules/yardstick/pom.xml     | 2 +-
 pom.xml                       | 2 +-
 29 files changed, 29 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/26fa0bf3/examples/pom.xml
----------------------------------------------------------------------
diff --git a/examples/pom.xml b/examples/pom.xml
index f56625a..f38ff9d 100644
--- a/examples/pom.xml
+++ b/examples/pom.xml
@@ -28,7 +28,7 @@
     </parent>
 
     <artifactId>ignite-examples</artifactId>
-    <version>1.1.0</version>
+    <version>1.1.0-SNAPSHOT</version>
 
     <dependencies>
         <dependency>

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/26fa0bf3/modules/aop/pom.xml
----------------------------------------------------------------------
diff --git a/modules/aop/pom.xml b/modules/aop/pom.xml
index 7b91aa3..1b03acd 100644
--- a/modules/aop/pom.xml
+++ b/modules/aop/pom.xml
@@ -31,7 +31,7 @@
     </parent>
 
     <artifactId>ignite-aop</artifactId>
-    <version>1.1.0</version>
+    <version>1.1.0-SNAPSHOT</version>
 
     <dependencies>
         <dependency>

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/26fa0bf3/modules/aws/pom.xml
----------------------------------------------------------------------
diff --git a/modules/aws/pom.xml b/modules/aws/pom.xml
index 63dd298..057f246 100644
--- a/modules/aws/pom.xml
+++ b/modules/aws/pom.xml
@@ -31,7 +31,7 @@
     </parent>
 
     <artifactId>ignite-aws</artifactId>
-    <version>1.1.0</version>
+    <version>1.1.0-SNAPSHOT</version>
 
     <dependencies>
         <dependency>

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/26fa0bf3/modules/clients/pom.xml
----------------------------------------------------------------------
diff --git a/modules/clients/pom.xml b/modules/clients/pom.xml
index 77f681e..19d6a25 100644
--- a/modules/clients/pom.xml
+++ b/modules/clients/pom.xml
@@ -31,7 +31,7 @@
     </parent>
 
     <artifactId>ignite-clients</artifactId>
-    <version>1.1.0</version>
+    <version>1.1.0-SNAPSHOT</version>
 
     <dependencies>
         <dependency>

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/26fa0bf3/modules/codegen/pom.xml
----------------------------------------------------------------------
diff --git a/modules/codegen/pom.xml b/modules/codegen/pom.xml
index b8bff95..d112735 100644
--- a/modules/codegen/pom.xml
+++ b/modules/codegen/pom.xml
@@ -31,7 +31,7 @@
     </parent>
 
     <artifactId>ignite-codegen</artifactId>
-    <version>1.1.0</version>
+    <version>1.1.0-SNAPSHOT</version>
 
     <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/26fa0bf3/modules/core/pom.xml
----------------------------------------------------------------------
diff --git a/modules/core/pom.xml b/modules/core/pom.xml
index 569dba3..cdf2cf2 100644
--- a/modules/core/pom.xml
+++ b/modules/core/pom.xml
@@ -31,7 +31,7 @@
     </parent>
 
     <artifactId>ignite-core</artifactId>
-    <version>1.1.0</version>
+    <version>1.1.0-SNAPSHOT</version>
 
     <dependencies>
         <dependency>

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/26fa0bf3/modules/extdata/p2p/pom.xml
----------------------------------------------------------------------
diff --git a/modules/extdata/p2p/pom.xml b/modules/extdata/p2p/pom.xml
index 86af433..6509c47 100644
--- a/modules/extdata/p2p/pom.xml
+++ b/modules/extdata/p2p/pom.xml
@@ -31,7 +31,7 @@
     </parent>
 
     <artifactId>ignite-extdata-p2p</artifactId>
-    <version>1.1.0</version>
+    <version>1.1.0-SNAPSHOT</version>
 
     <dependencies>
         <dependency>

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/26fa0bf3/modules/extdata/uri/pom.xml
----------------------------------------------------------------------
diff --git a/modules/extdata/uri/pom.xml b/modules/extdata/uri/pom.xml
index 4a501b5..921775f 100644
--- a/modules/extdata/uri/pom.xml
+++ b/modules/extdata/uri/pom.xml
@@ -31,7 +31,7 @@
     </parent>
 
     <artifactId>ignite-extdata-uri</artifactId>
-    <version>1.1.0</version>
+    <version>1.1.0-SNAPSHOT</version>
 
     <dependencies>
         <dependency>

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/26fa0bf3/modules/geospatial/pom.xml
----------------------------------------------------------------------
diff --git a/modules/geospatial/pom.xml b/modules/geospatial/pom.xml
index 11446fd..6a7610c 100644
--- a/modules/geospatial/pom.xml
+++ b/modules/geospatial/pom.xml
@@ -31,7 +31,7 @@
     </parent>
 
     <artifactId>ignite-geospatial</artifactId>
-    <version>1.1.0</version>
+    <version>1.1.0-SNAPSHOT</version>
 
     <dependencies>
         <dependency>

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/26fa0bf3/modules/hadoop/pom.xml
----------------------------------------------------------------------
diff --git a/modules/hadoop/pom.xml b/modules/hadoop/pom.xml
index 26c55e7..9b5bcfb 100644
--- a/modules/hadoop/pom.xml
+++ b/modules/hadoop/pom.xml
@@ -31,7 +31,7 @@
     </parent>
 
     <artifactId>ignite-hadoop</artifactId>
-    <version>1.1.0</version>
+    <version>1.1.0-SNAPSHOT</version>
 
     <dependencies>
         <dependency>

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/26fa0bf3/modules/hibernate/pom.xml
----------------------------------------------------------------------
diff --git a/modules/hibernate/pom.xml b/modules/hibernate/pom.xml
index b76782d..fbd40ce 100644
--- a/modules/hibernate/pom.xml
+++ b/modules/hibernate/pom.xml
@@ -31,7 +31,7 @@
     </parent>
 
     <artifactId>ignite-hibernate</artifactId>
-    <version>1.1.0</version>
+    <version>1.1.0-SNAPSHOT</version>
 
     <dependencies>
         <dependency>

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/26fa0bf3/modules/indexing/pom.xml
----------------------------------------------------------------------
diff --git a/modules/indexing/pom.xml b/modules/indexing/pom.xml
index 38dae94..2949c34 100644
--- a/modules/indexing/pom.xml
+++ b/modules/indexing/pom.xml
@@ -31,7 +31,7 @@
     </parent>
 
     <artifactId>ignite-indexing</artifactId>
-    <version>1.1.0</version>
+    <version>1.1.0-SNAPSHOT</version>
 
     <dependencies>
         <dependency>

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/26fa0bf3/modules/jcl/pom.xml
----------------------------------------------------------------------
diff --git a/modules/jcl/pom.xml b/modules/jcl/pom.xml
index b4214bc..04ab11b 100644
--- a/modules/jcl/pom.xml
+++ b/modules/jcl/pom.xml
@@ -31,7 +31,7 @@
     </parent>
 
     <artifactId>ignite-jcl</artifactId>
-    <version>1.1.0</version>
+    <version>1.1.0-SNAPSHOT</version>
 
     <dependencies>
         <dependency>

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/26fa0bf3/modules/jta/pom.xml
----------------------------------------------------------------------
diff --git a/modules/jta/pom.xml b/modules/jta/pom.xml
index 69094ec..7322da2 100644
--- a/modules/jta/pom.xml
+++ b/modules/jta/pom.xml
@@ -31,7 +31,7 @@
     </parent>
 
     <artifactId>ignite-jta</artifactId>
-    <version>1.1.0</version>
+    <version>1.1.0-SNAPSHOT</version>
 
     <dependencies>
         <dependency>

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/26fa0bf3/modules/log4j/pom.xml
----------------------------------------------------------------------
diff --git a/modules/log4j/pom.xml b/modules/log4j/pom.xml
index 145027d..42c8523 100644
--- a/modules/log4j/pom.xml
+++ b/modules/log4j/pom.xml
@@ -31,7 +31,7 @@
     </parent>
 
     <artifactId>ignite-log4j</artifactId>
-    <version>1.1.0</version>
+    <version>1.1.0-SNAPSHOT</version>
 
     <dependencies>
         <dependency>

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/26fa0bf3/modules/rest-http/pom.xml
----------------------------------------------------------------------
diff --git a/modules/rest-http/pom.xml b/modules/rest-http/pom.xml
index 7a6e361..72bf1ff 100644
--- a/modules/rest-http/pom.xml
+++ b/modules/rest-http/pom.xml
@@ -31,7 +31,7 @@
     </parent>
 
     <artifactId>ignite-rest-http</artifactId>
-    <version>1.1.0</version>
+    <version>1.1.0-SNAPSHOT</version>
 
     <dependencies>
         <dependency>

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/26fa0bf3/modules/scalar/pom.xml
----------------------------------------------------------------------
diff --git a/modules/scalar/pom.xml b/modules/scalar/pom.xml
index 8c48c52..b8840e3 100644
--- a/modules/scalar/pom.xml
+++ b/modules/scalar/pom.xml
@@ -31,7 +31,7 @@
     </parent>
 
     <artifactId>ignite-scalar</artifactId>
-    <version>1.1.0</version>
+    <version>1.1.0-SNAPSHOT</version>
 
     <dependencies>
         <dependency>

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/26fa0bf3/modules/schedule/pom.xml
----------------------------------------------------------------------
diff --git a/modules/schedule/pom.xml b/modules/schedule/pom.xml
index 2ffd916..ee733ad 100644
--- a/modules/schedule/pom.xml
+++ b/modules/schedule/pom.xml
@@ -31,7 +31,7 @@
     </parent>
 
     <artifactId>ignite-schedule</artifactId>
-    <version>1.1.0</version>
+    <version>1.1.0-SNAPSHOT</version>
 
     <dependencies>
         <dependency>

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/26fa0bf3/modules/schema-import/pom.xml
----------------------------------------------------------------------
diff --git a/modules/schema-import/pom.xml b/modules/schema-import/pom.xml
index 69bfeb6..d420681 100644
--- a/modules/schema-import/pom.xml
+++ b/modules/schema-import/pom.xml
@@ -31,7 +31,7 @@
     </parent>
 
     <artifactId>ignite-schema-import</artifactId>
-    <version>1.1.0</version>
+    <version>1.1.0-SNAPSHOT</version>
 
     <dependencies>
         <dependency>

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/26fa0bf3/modules/slf4j/pom.xml
----------------------------------------------------------------------
diff --git a/modules/slf4j/pom.xml b/modules/slf4j/pom.xml
index 3bc60be..9acb521 100644
--- a/modules/slf4j/pom.xml
+++ b/modules/slf4j/pom.xml
@@ -31,7 +31,7 @@
     </parent>
 
     <artifactId>ignite-slf4j</artifactId>
-    <version>1.1.0</version>
+    <version>1.1.0-SNAPSHOT</version>
 
     <dependencies>
         <dependency>

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/26fa0bf3/modules/spring/pom.xml
----------------------------------------------------------------------
diff --git a/modules/spring/pom.xml b/modules/spring/pom.xml
index e0523e7..a0bcaaa 100644
--- a/modules/spring/pom.xml
+++ b/modules/spring/pom.xml
@@ -31,7 +31,7 @@
     </parent>
 
     <artifactId>ignite-spring</artifactId>
-    <version>1.1.0</version>
+    <version>1.1.0-SNAPSHOT</version>
 
     <dependencies>
         <dependency>

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/26fa0bf3/modules/ssh/pom.xml
----------------------------------------------------------------------
diff --git a/modules/ssh/pom.xml b/modules/ssh/pom.xml
index 7d559cc..521c7d0 100644
--- a/modules/ssh/pom.xml
+++ b/modules/ssh/pom.xml
@@ -31,7 +31,7 @@
     </parent>
 
     <artifactId>ignite-ssh</artifactId>
-    <version>1.1.0</version>
+    <version>1.1.0-SNAPSHOT</version>
 
     <dependencies>
         <dependency>

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/26fa0bf3/modules/tools/pom.xml
----------------------------------------------------------------------
diff --git a/modules/tools/pom.xml b/modules/tools/pom.xml
index 58f2e68..674f22f 100644
--- a/modules/tools/pom.xml
+++ b/modules/tools/pom.xml
@@ -31,7 +31,7 @@
     </parent>
 
     <artifactId>ignite-tools</artifactId>
-    <version>1.1.0</version>
+    <version>1.1.0-SNAPSHOT</version>
 
     <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/26fa0bf3/modules/urideploy/pom.xml
----------------------------------------------------------------------
diff --git a/modules/urideploy/pom.xml b/modules/urideploy/pom.xml
index ef1eba0..939966c 100644
--- a/modules/urideploy/pom.xml
+++ b/modules/urideploy/pom.xml
@@ -31,7 +31,7 @@
     </parent>
 
     <artifactId>ignite-urideploy</artifactId>
-    <version>1.1.0</version>
+    <version>1.1.0-SNAPSHOT</version>
 
     <dependencies>
         <dependency>

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/26fa0bf3/modules/visor-console/pom.xml
----------------------------------------------------------------------
diff --git a/modules/visor-console/pom.xml b/modules/visor-console/pom.xml
index e7eb06c..c5b9523 100644
--- a/modules/visor-console/pom.xml
+++ b/modules/visor-console/pom.xml
@@ -31,7 +31,7 @@
     </parent>
 
     <artifactId>ignite-visor-console</artifactId>
-    <version>1.1.0</version>
+    <version>1.1.0-SNAPSHOT</version>
 
     <dependencies>
         <dependency>

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/26fa0bf3/modules/visor-plugins/pom.xml
----------------------------------------------------------------------
diff --git a/modules/visor-plugins/pom.xml b/modules/visor-plugins/pom.xml
index 8b74d41..04dda81 100644
--- a/modules/visor-plugins/pom.xml
+++ b/modules/visor-plugins/pom.xml
@@ -31,7 +31,7 @@
     </parent>
 
     <artifactId>ignite-visor-plugins</artifactId>
-    <version>1.1.0</version>
+    <version>1.1.0-SNAPSHOT</version>
 
     <dependencies>
         <!-- Ignite dependencies -->

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/26fa0bf3/modules/web/pom.xml
----------------------------------------------------------------------
diff --git a/modules/web/pom.xml b/modules/web/pom.xml
index 14ebc25..446d7a0 100644
--- a/modules/web/pom.xml
+++ b/modules/web/pom.xml
@@ -31,7 +31,7 @@
     </parent>
 
     <artifactId>ignite-web</artifactId>
-    <version>1.1.0</version>
+    <version>1.1.0-SNAPSHOT</version>
 
     <dependencies>
         <dependency>

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/26fa0bf3/modules/yardstick/pom.xml
----------------------------------------------------------------------
diff --git a/modules/yardstick/pom.xml b/modules/yardstick/pom.xml
index 5bd949b..108fa62 100644
--- a/modules/yardstick/pom.xml
+++ b/modules/yardstick/pom.xml
@@ -31,7 +31,7 @@
     </parent>
 
     <artifactId>ignite-yardstick</artifactId>
-    <version>1.1.0</version>
+    <version>1.1.0-SNAPSHOT</version>
 
     <properties>
         <yardstick.version>0.7.0</yardstick.version>

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/26fa0bf3/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index c3d3c70..1ebf7c7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -32,7 +32,7 @@
 
     <groupId>org.apache.ignite</groupId>
     <artifactId>ignite</artifactId>
-    <version>1.1.0</version>
+    <version>1.1.0-SNAPSHOT</version>
     <packaging>pom</packaging>
 
     <properties>


[22/31] incubator-ignite git commit: # ignite-537

Posted by ag...@apache.org.
# ignite-537


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

Branch: refs/heads/ignite-721
Commit: 4957a35a2c02096a5e01f4fb06f098334367e621
Parents: b910061
Author: sboikov <se...@inria.fr>
Authored: Fri Apr 10 22:02:17 2015 +0300
Committer: sboikov <se...@inria.fr>
Committed: Fri Apr 10 22:02:17 2015 +0300

----------------------------------------------------------------------
 .../java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java  | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/4957a35a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
index 1ab5332..b61a402 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
@@ -290,7 +290,7 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
     private ConcurrentLinkedDeque<String> debugLog;
 
     /** Class loaders for event data unmarshalling. */
-    private ConcurrentMap<UUID, DiscoveryDeploymentClassLoader> p2pLdrs = new ConcurrentHashMap<>();
+    private transient ConcurrentMap<UUID, DiscoveryDeploymentClassLoader> p2pLdrs = new ConcurrentHashMap<>();
 
     /** {@inheritDoc} */
     @IgniteInstanceResource


[16/31] incubator-ignite git commit: # ignite-537

Posted by ag...@apache.org.
# ignite-537


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

Branch: refs/heads/ignite-721
Commit: 876beff516e02c205e69c02d8bbd48811aec15e6
Parents: 0b14239
Author: sboikov <se...@inria.fr>
Authored: Fri Apr 10 20:36:07 2015 +0300
Committer: sboikov <se...@inria.fr>
Committed: Fri Apr 10 20:36:07 2015 +0300

----------------------------------------------------------------------
 .../org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/876beff5/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
index 82a2e59..117166f 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
@@ -2268,7 +2268,7 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
             return null;
 
         if (node.id().equals(getLocalNodeId()) || node.isClient())
-            return U.gridClassLoader();
+            return null;
 
         DiscoveryDeploymentClassLoader ldr = p2pLdrs.get(node.id());
 
@@ -2291,7 +2291,7 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
             return null;
 
         if (nodeId.equals(getLocalNodeId()))
-            return U.gridClassLoader();
+            return null;
 
         TcpDiscoveryNode node;
 
@@ -2305,12 +2305,12 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
                     log.debug("Node provided exchange data left, will use local class loader " +
                         "for exchange data [nodeId=" + nodeId + ']');
 
-                return U.gridClassLoader();
+                return null;
             }
         }
 
         if (node.isClient()) // Do not support loading from client nodes.
-            return U.gridClassLoader();
+            return null;
 
         DiscoveryDeploymentClassLoader ldr = p2pLdrs.get(nodeId);
 


[31/31] incubator-ignite git commit: IGNITE-721 - Restoring test.

Posted by ag...@apache.org.
IGNITE-721 - Restoring test.


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

Branch: refs/heads/ignite-721
Commit: bf7b9f861add6a9bf73513066938fc49384ad381
Parents: c0085a3
Author: Alexey Goncharuk <ag...@gridgain.com>
Authored: Sat Apr 11 00:47:00 2015 -0700
Committer: Alexey Goncharuk <ag...@gridgain.com>
Committed: Sat Apr 11 00:47:00 2015 -0700

----------------------------------------------------------------------
 .../IgniteFairAffinityDynamicCacheSelfTest.java | 36 +++++++++-----------
 1 file changed, 17 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/bf7b9f86/modules/core/src/test/java/org/apache/ignite/cache/affinity/fair/IgniteFairAffinityDynamicCacheSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/cache/affinity/fair/IgniteFairAffinityDynamicCacheSelfTest.java b/modules/core/src/test/java/org/apache/ignite/cache/affinity/fair/IgniteFairAffinityDynamicCacheSelfTest.java
index 90571a4..18b77e0 100644
--- a/modules/core/src/test/java/org/apache/ignite/cache/affinity/fair/IgniteFairAffinityDynamicCacheSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/cache/affinity/fair/IgniteFairAffinityDynamicCacheSelfTest.java
@@ -70,30 +70,28 @@ public class IgniteFairAffinityDynamicCacheSelfTest extends GridCommonAbstractTe
      * @throws Exception If failed.
      */
     public void testStartStopCache() throws Exception {
-        for (int k = 0; k < 10; k++) {
-            CacheConfiguration<Integer, Integer> cacheCfg = new CacheConfiguration<>();
+        CacheConfiguration<Integer, Integer> cacheCfg = new CacheConfiguration<>();
 
-            cacheCfg.setCacheMode(CacheMode.PARTITIONED);
-            cacheCfg.setAtomicityMode(CacheAtomicityMode.ATOMIC);
-            cacheCfg.setBackups(1);
-            cacheCfg.setName("test");
-            cacheCfg.setAffinity(new FairAffinityFunction());
+        cacheCfg.setCacheMode(CacheMode.PARTITIONED);
+        cacheCfg.setAtomicityMode(CacheAtomicityMode.ATOMIC);
+        cacheCfg.setBackups(1);
+        cacheCfg.setName("test");
+        cacheCfg.setAffinity(new FairAffinityFunction());
 
-            final IgniteCache<Integer, Integer> cache = ignite(0).createCache(cacheCfg);
+        final IgniteCache<Integer, Integer> cache = ignite(0).createCache(cacheCfg);
 
-            for (int i = 0; i < 10_000; i++)
-                cache.put(i, i);
+        for (int i = 0; i < 10_000; i++)
+            cache.put(i, i);
 
-            IgniteInternalFuture<Object> destFut = GridTestUtils.runAsync(new Callable<Object>() {
-                @Override
-                public Object call() throws Exception {
-                    ignite(0).destroyCache(cache.getName());
+        IgniteInternalFuture<Object> destFut = GridTestUtils.runAsync(new Callable<Object>() {
+            @Override
+            public Object call() throws Exception {
+                ignite(0).destroyCache(cache.getName());
 
-                    return null;
-                }
-            });
+                return null;
+            }
+        });
 
-            destFut.get(2000L);
-        }
+        destFut.get(2000L);
     }
 }


[06/31] incubator-ignite git commit: # ignite-537

Posted by ag...@apache.org.
# ignite-537


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

Branch: refs/heads/ignite-721
Commit: eb85f0661d582affa47461358a829ca89394815b
Parents: b887030
Author: sboikov <sb...@gridgain.com>
Authored: Fri Apr 10 15:09:11 2015 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Fri Apr 10 15:09:11 2015 +0300

----------------------------------------------------------------------
 .../p2p/startcache/CacheAllNodesFilter.java     |  31 +++++
 .../startcache/CacheConfigP2PStartClient.java   | 116 +++++++++++++++++++
 2 files changed, 147 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/eb85f066/modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/startcache/CacheAllNodesFilter.java
----------------------------------------------------------------------
diff --git a/modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/startcache/CacheAllNodesFilter.java b/modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/startcache/CacheAllNodesFilter.java
new file mode 100644
index 0000000..f057fb8
--- /dev/null
+++ b/modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/startcache/CacheAllNodesFilter.java
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.tests.p2p.startcache;
+
+import org.apache.ignite.cluster.*;
+import org.apache.ignite.lang.*;
+
+/**
+ *
+ */
+public class CacheAllNodesFilter implements IgnitePredicate<ClusterNode> {
+    /** {@inheritDoc} */
+    @Override public boolean apply(ClusterNode clusterNode) {
+        return true;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/eb85f066/modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/startcache/CacheConfigP2PStartClient.java
----------------------------------------------------------------------
diff --git a/modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/startcache/CacheConfigP2PStartClient.java b/modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/startcache/CacheConfigP2PStartClient.java
new file mode 100644
index 0000000..b5e0989
--- /dev/null
+++ b/modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/startcache/CacheConfigP2PStartClient.java
@@ -0,0 +1,116 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.tests.p2p.startcache;
+
+import org.apache.ignite.*;
+import org.apache.ignite.cache.query.annotations.*;
+import org.apache.ignite.configuration.*;
+
+import java.io.*;
+import java.util.*;
+
+/**
+ *
+ */
+public class CacheConfigP2PStartClient {
+    /**
+     * @param args Arguments.
+     * @throws Exception If failed.
+     */
+    public static void main(String[] args) throws Exception {
+        IgniteConfiguration cfg = new IgniteConfiguration();
+
+        Ignite ignite = Ignition.start(cfg);
+
+        int nodes = ignite.cluster().nodes().size();
+
+        if (nodes != 3)
+            throw new Exception("Unexpected nodes number: " + nodes);
+
+        CacheConfiguration<Integer, Organization1> ccfg1 = new CacheConfiguration<>();
+
+        ccfg1.setNodeFilter(new CacheAllNodesFilter());
+
+        ccfg1.setIndexedTypes(Integer.class, Organization1.class);
+
+        IgniteCache<Integer, Organization1> cache1 = ignite.createCache(ccfg1);
+
+        for (int i = 0; i < 500; i++)
+            cache1.put(i, new Organization1("org-" + i));
+
+        Thread.sleep(5000);
+    }
+
+    /**
+     * Organization class.
+     */
+    private static class Organization1 implements Serializable {
+        /** Organization ID (indexed). */
+        @QuerySqlField(index = true)
+        private UUID id;
+
+        /** Organization name (indexed). */
+        @QuerySqlField(index = true)
+        private String name;
+
+        /**
+         * Create organization.
+         *
+         * @param name Organization name.
+         */
+        Organization1(String name) {
+            id = UUID.randomUUID();
+
+            this.name = name;
+        }
+
+        /** {@inheritDoc} */
+        @Override public String toString() {
+            return "Organization [id=" + id + ", name=" + name + ']';
+        }
+    }
+
+    /**
+     * Organization class.
+     */
+    private static class Organization2 implements Serializable {
+        /** Organization ID (indexed). */
+        @QuerySqlField(index = true)
+        private UUID id;
+
+        /** Organization name (indexed). */
+        @QuerySqlField(index = true)
+        private String name;
+
+        /**
+         * Create organization.
+         *
+         * @param name Organization name.
+         */
+        Organization2(String name) {
+            id = UUID.randomUUID();
+
+            this.name = name;
+        }
+
+        /** {@inheritDoc} */
+        @Override public String toString() {
+            return "Organization [id=" + id + ", name=" + name + ']';
+        }
+    }
+}


[27/31] incubator-ignite git commit: # sprint-3 Fixed Visor tests.

Posted by ag...@apache.org.
# sprint-3 Fixed Visor tests.


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

Branch: refs/heads/ignite-721
Commit: 1a5990c99536580ad934cd916fc64695c86b9350
Parents: 5953786
Author: AKuznetsov <ak...@gridgain.com>
Authored: Sat Apr 11 09:51:17 2015 +0700
Committer: AKuznetsov <ak...@gridgain.com>
Committed: Sat Apr 11 09:51:17 2015 +0700

----------------------------------------------------------------------
 .../org/apache/ignite/internal/visor/query/VisorQueryTask.java   | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1a5990c9/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryTask.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryTask.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryTask.java
index b320842..6683205 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryTask.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/query/VisorQueryTask.java
@@ -44,7 +44,9 @@ public class VisorQueryTask extends VisorOneNodeTask<VisorQueryArg, IgniteBiTupl
         ClusterNode node;
 
         if (taskArg.localCacheNodeId() == null) {
-            ClusterGroup prj = ignite.cluster().forDataNodes(cacheName);
+            ClusterGroup prj = (ignite.cluster().localNode().isDaemon())
+                ? ignite.cluster().forRemotes()
+                : ignite.cluster().forDataNodes(cacheName);
 
             if (prj.nodes().isEmpty())
                 throw new IgniteException("No data nodes for cache: " + escapeName(cacheName));


[12/31] incubator-ignite git commit: # ignite-537

Posted by ag...@apache.org.
# ignite-537


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

Branch: refs/heads/ignite-721
Commit: 9837a4abdc87d81f7d640e413d7b47a782909203
Parents: d25627c
Author: sboikov <sb...@gridgain.com>
Authored: Fri Apr 10 17:14:18 2015 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Fri Apr 10 17:14:18 2015 +0300

----------------------------------------------------------------------
 .../ignite/internal/util/GridJavaProcess.java   |  38 ++++-
 .../spi/discovery/tcp/TcpDiscoverySpi.java      |   4 +-
 .../cache/CacheConfigurationP2PTest.java        | 122 +++++++++++++++
 .../cache/CacheConfigurationP2PTestServer.java  |  63 ++++++++
 .../startcache/CacheConfigP2PStartClient.java   | 132 ----------------
 .../CacheConfigurationP2PTestClient.java        | 155 +++++++++++++++++++
 .../p2p/GridMultiJvmClassPathSelfTest.java      | 109 -------------
 7 files changed, 378 insertions(+), 245 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9837a4ab/modules/core/src/main/java/org/apache/ignite/internal/util/GridJavaProcess.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/GridJavaProcess.java b/modules/core/src/main/java/org/apache/ignite/internal/util/GridJavaProcess.java
index b90c4a9..d62e0b7 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/GridJavaProcess.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/GridJavaProcess.java
@@ -82,7 +82,7 @@ public final class GridJavaProcess {
      */
     public static GridJavaProcess exec(Class cls, String params, @Nullable IgniteLogger log,
         @Nullable IgniteInClosure<String> printC, @Nullable GridAbsClosure procKilledC) throws Exception {
-        return exec(cls, params, log, printC, procKilledC, null, null);
+        return exec(cls.getCanonicalName(), params, log, printC, procKilledC, null, null);
     }
 
     /**
@@ -101,6 +101,25 @@ public final class GridJavaProcess {
     public static GridJavaProcess exec(Class cls, String params, @Nullable IgniteLogger log,
         @Nullable IgniteInClosure<String> printC, @Nullable GridAbsClosure procKilledC,
         @Nullable Collection<String> jvmArgs, @Nullable String cp) throws Exception {
+        return exec(cls.getCanonicalName(), params, log, printC, procKilledC, jvmArgs, cp);
+    }
+
+    /**
+     * Executes main() method of the given class in a separate system process.
+     *
+     * @param clsName Class with main() method to be run.
+     * @param params main() method parameters.
+     * @param printC Optional closure to be called each time wrapped process prints line to system.out or system.err.
+     * @param procKilledC Optional closure to be called when process termination is detected.
+     * @param log Log to use.
+     * @param jvmArgs JVM arguments to use.
+     * @param cp Additional classpath.
+     * @return Wrapper around {@link Process}
+     * @throws Exception If any problem occurred.
+     */
+    public static GridJavaProcess exec(String clsName, String params, @Nullable IgniteLogger log,
+        @Nullable IgniteInClosure<String> printC, @Nullable GridAbsClosure procKilledC,
+        @Nullable Collection<String> jvmArgs, @Nullable String cp) throws Exception {
         if (!(U.isLinux() || U.isMacOs() || U.isWindows()))
             throw new Exception("Your OS is not supported.");
 
@@ -111,7 +130,6 @@ public final class GridJavaProcess {
 
         String javaBin = System.getProperty("java.home") + File.separator + "bin" + File.separator + "java";
         String classpath = System.getProperty("java.class.path");
-        String clsName = cls.getCanonicalName();
 
         if (cp != null)
             classpath += System.getProperty("path.separator") + cp;
@@ -170,6 +188,22 @@ public final class GridJavaProcess {
     }
 
     /**
+     * Kills process using {@link Process#destroy()}.
+     */
+    public void killProcess() {
+        proc.destroy();
+
+        if (procKilledC != null)
+            procKilledC.apply();
+
+        U.interrupt(osGrabber);
+        U.interrupt(esGrabber);
+
+        U.join(osGrabber, log);
+        U.join(esGrabber, log);
+    }
+
+    /**
      * Returns pid of the java process.
      * Wrapped java class should print it's PID to system.out or system.err to make wrapper know about it.
      *

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9837a4ab/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
index 21f1c97..7da004a 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
@@ -5401,8 +5401,8 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
          * @param node Node.
          */
         public DiscoveryDeploymentClassLoader(TcpDiscoveryNode node) {
-            assert !node.isClient();
-            assert !node.id().equals(getLocalNodeId());
+            assert !node.isClient() : node;
+            assert !node.id().equals(getLocalNodeId()) : node;
 
             this.node = node;
         }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9837a4ab/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheConfigurationP2PTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheConfigurationP2PTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheConfigurationP2PTest.java
new file mode 100644
index 0000000..96b124c
--- /dev/null
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheConfigurationP2PTest.java
@@ -0,0 +1,122 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.processors.cache;
+
+import org.apache.ignite.internal.util.*;
+import org.apache.ignite.internal.util.typedef.*;
+import org.apache.ignite.internal.util.typedef.internal.*;
+import org.apache.ignite.testframework.junits.common.*;
+
+import java.util.concurrent.*;
+
+import static java.util.concurrent.TimeUnit.*;
+
+/**
+ *
+ */
+public class CacheConfigurationP2PTest extends GridCommonAbstractTest {
+    /** */
+    public static final String NODE_START_MSG = "Test external node started";
+
+    /** */
+    private static final String CLIENT_CLS_NAME =
+        "org.apache.ignite.tests.p2p.startcache.CacheConfigurationP2PTestClient";
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testCacheConfigurationP2P() throws Exception {
+        final CountDownLatch srvsReadyLatch = new CountDownLatch(2);
+
+        final CountDownLatch clientReadyLatch = new CountDownLatch(1);
+
+        GridJavaProcess node1 = null;
+        GridJavaProcess node2 = null;
+        GridJavaProcess clientNode = null;
+
+        try {
+            node1 = GridJavaProcess.exec(
+                CacheConfigurationP2PTestServer.class.getName(), null,
+                log,
+                new CI1<String>() {
+                    @Override public void apply(String s) {
+                        info("Server node1: " + s);
+
+                        if (s.contains(NODE_START_MSG))
+                            srvsReadyLatch.countDown();
+                    }
+                },
+                null,
+                null,
+                null
+            );
+
+            node2 = GridJavaProcess.exec(
+                CacheConfigurationP2PTestServer.class.getName(), null,
+                log,
+                new CI1<String>() {
+                    @Override public void apply(String s) {
+                        info("Server node2: " + s);
+
+                        if (s.contains(NODE_START_MSG))
+                            srvsReadyLatch.countDown();
+                    }
+                },
+                null,
+                null,
+                null
+            );
+
+            assertTrue(srvsReadyLatch.await(60, SECONDS));
+
+            String str = U.getIgniteHome() + "/modules/extdata/p2p/target/classes/";
+
+            clientNode = GridJavaProcess.exec(
+                CLIENT_CLS_NAME, null,
+                log,
+                new CI1<String>() {
+                    @Override public void apply(String s) {
+                        info("Client node: " + s);
+
+                        if (s.contains(NODE_START_MSG))
+                            clientReadyLatch.countDown();
+                    }
+                },
+                null,
+                null,
+                str
+            );
+
+            assertTrue(clientReadyLatch.await(60, SECONDS));
+
+            int exitCode = clientNode.getProcess().waitFor();
+
+            assertEquals("Unexpected exit code", 0, exitCode);
+        }
+        finally {
+            if (node1 != null)
+                node1.killProcess();
+
+            if (node2 != null)
+                node2.killProcess();
+
+            if (clientNode != null)
+                clientNode.killProcess();
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9837a4ab/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheConfigurationP2PTestServer.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheConfigurationP2PTestServer.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheConfigurationP2PTestServer.java
new file mode 100644
index 0000000..490f951
--- /dev/null
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheConfigurationP2PTestServer.java
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.processors.cache;
+
+import org.apache.ignite.*;
+import org.apache.ignite.configuration.*;
+import org.apache.ignite.internal.util.typedef.internal.*;
+import org.apache.ignite.spi.discovery.tcp.*;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.*;
+
+import java.util.*;
+
+/**
+ *
+ */
+public class CacheConfigurationP2PTestServer {
+    /**
+     * @param args Arguments.
+     * @throws Exception If failed.
+     */
+    public static void main(String[] args) throws Exception {
+        System.out.println("Starting test server node.");
+
+        IgniteConfiguration cfg = new IgniteConfiguration();
+
+        cfg.setPeerClassLoadingEnabled(true);
+
+        cfg.setLocalHost("127.0.0.1");
+
+        TcpDiscoverySpi disco = new TcpDiscoverySpi();
+
+        TcpDiscoveryVmIpFinder ipFinder = new TcpDiscoveryVmIpFinder();
+
+        ipFinder.setAddresses(Arrays.asList("127.0.0.1:47500..47509"));
+
+        disco.setIpFinder(ipFinder);
+
+        cfg.setDiscoverySpi(disco);
+
+        U.setWorkDirectory(null, U.getIgniteHome());
+
+        try (Ignite ignite = Ignition.start(cfg)) {
+            System.out.println(CacheConfigurationP2PTest.NODE_START_MSG);
+
+            U.sleep(Long.MAX_VALUE);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9837a4ab/modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/startcache/CacheConfigP2PStartClient.java
----------------------------------------------------------------------
diff --git a/modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/startcache/CacheConfigP2PStartClient.java b/modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/startcache/CacheConfigP2PStartClient.java
deleted file mode 100644
index 1170175..0000000
--- a/modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/startcache/CacheConfigP2PStartClient.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.tests.p2p.startcache;
-
-import org.apache.ignite.*;
-import org.apache.ignite.cache.query.annotations.*;
-import org.apache.ignite.configuration.*;
-
-import java.io.*;
-import java.util.*;
-
-/**
- *
- */
-public class CacheConfigP2PStartClient {
-    /**
-     * @param args Arguments.
-     * @throws Exception If failed.
-     */
-    public static void main(String[] args) throws Exception {
-        IgniteConfiguration cfg = new IgniteConfiguration();
-
-        try (Ignite ignite = Ignition.start(cfg)) {
-            int nodes = ignite.cluster().nodes().size();
-
-            if (nodes != 3)
-                throw new Exception("Unexpected nodes number: " + nodes);
-
-            CacheConfiguration<Integer, Organization1> ccfg1 = new CacheConfiguration<>();
-
-            ccfg1.setName("cache1");
-
-            ccfg1.setNodeFilter(new CacheAllNodesFilter());
-
-            ccfg1.setIndexedTypes(Integer.class, Organization1.class);
-
-            System.out.println("Create cache1.");
-
-            IgniteCache<Integer, Organization1> cache1 = ignite.createCache(ccfg1);
-
-            for (int i = 0; i < 500; i++)
-                cache1.put(i, new Organization1("org-" + i));
-
-            System.out.println("Sleep some time.");
-
-            Thread.sleep(5000); // Sleep some time to wait when connection of p2p loader is closed.
-
-            System.out.println("Create cache2.");
-
-            CacheConfiguration<Integer, Organization2> ccfg2 = new CacheConfiguration<>();
-
-            ccfg2.setName("cache2");
-
-            ccfg2.setIndexedTypes(Integer.class, Organization1.class);
-
-            IgniteCache<Integer, Organization2> cache2 = ignite.createCache(ccfg2);
-        }
-    }
-
-    /**
-     * Organization class.
-     */
-    private static class Organization1 implements Serializable {
-        /** Organization ID (indexed). */
-        @QuerySqlField(index = true)
-        private UUID id;
-
-        /** Organization name (indexed). */
-        @QuerySqlField(index = true)
-        private String name;
-
-        /**
-         * Create organization.
-         *
-         * @param name Organization name.
-         */
-        Organization1(String name) {
-            id = UUID.randomUUID();
-
-            this.name = name;
-        }
-
-        /** {@inheritDoc} */
-        @Override public String toString() {
-            return "Organization [id=" + id + ", name=" + name + ']';
-        }
-    }
-
-    /**
-     * Organization class.
-     */
-    private static class Organization2 implements Serializable {
-        /** Organization ID (indexed). */
-        @QuerySqlField(index = true)
-        private UUID id;
-
-        /** Organization name (indexed). */
-        @QuerySqlField(index = true)
-        private String name;
-
-        /**
-         * Create organization.
-         *
-         * @param name Organization name.
-         */
-        Organization2(String name) {
-            id = UUID.randomUUID();
-
-            this.name = name;
-        }
-
-        /** {@inheritDoc} */
-        @Override public String toString() {
-            return "Organization [id=" + id + ", name=" + name + ']';
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9837a4ab/modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/startcache/CacheConfigurationP2PTestClient.java
----------------------------------------------------------------------
diff --git a/modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/startcache/CacheConfigurationP2PTestClient.java b/modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/startcache/CacheConfigurationP2PTestClient.java
new file mode 100644
index 0000000..0634e5f
--- /dev/null
+++ b/modules/extdata/p2p/src/main/java/org/apache/ignite/tests/p2p/startcache/CacheConfigurationP2PTestClient.java
@@ -0,0 +1,155 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.tests.p2p.startcache;
+
+import org.apache.ignite.*;
+import org.apache.ignite.cache.query.annotations.*;
+import org.apache.ignite.configuration.*;
+import org.apache.ignite.internal.util.typedef.internal.*;
+import org.apache.ignite.spi.discovery.tcp.*;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.*;
+
+import java.io.*;
+import java.util.*;
+
+/**
+ *
+ */
+public class CacheConfigurationP2PTestClient {
+    /**
+     * @param args Arguments.
+     * @throws Exception If failed.
+     */
+    public static void main(String[] args) throws Exception {
+        System.out.println("Starting test client node.");
+
+        IgniteConfiguration cfg = new IgniteConfiguration();
+
+        cfg.setPeerClassLoadingEnabled(true);
+
+        cfg.setLocalHost("127.0.0.1");
+
+        TcpDiscoverySpi disco = new TcpDiscoverySpi();
+
+        TcpDiscoveryVmIpFinder ipFinder = new TcpDiscoveryVmIpFinder();
+
+        ipFinder.setAddresses(Arrays.asList("127.0.0.1:47500..47509"));
+
+        disco.setIpFinder(ipFinder);
+
+        cfg.setDiscoverySpi(disco);
+
+        U.setWorkDirectory(null, U.getIgniteHome());
+
+        try (Ignite ignite = Ignition.start(cfg)) {
+            System.out.println("Test external node started");
+
+            int nodes = ignite.cluster().nodes().size();
+
+            if (nodes != 3)
+                throw new Exception("Unexpected nodes number: " + nodes);
+
+            CacheConfiguration<Integer, Organization1> ccfg1 = new CacheConfiguration<>();
+
+            ccfg1.setName("cache1");
+
+            ccfg1.setNodeFilter(new CacheAllNodesFilter());
+
+            ccfg1.setIndexedTypes(Integer.class, Organization1.class);
+
+            System.out.println("Create cache1.");
+
+            IgniteCache<Integer, Organization1> cache1 = ignite.createCache(ccfg1);
+
+            for (int i = 0; i < 500; i++)
+                cache1.put(i, new Organization1("org-" + i));
+
+            System.out.println("Sleep some time.");
+
+            Thread.sleep(5000); // Sleep some time to wait when connection of p2p loader is closed.
+
+            System.out.println("Create cache2.");
+
+            CacheConfiguration<Integer, Organization2> ccfg2 = new CacheConfiguration<>();
+
+            ccfg2.setName("cache2");
+
+            ccfg2.setIndexedTypes(Integer.class, Organization1.class);
+
+            IgniteCache<Integer, Organization2> cache2 = ignite.createCache(ccfg2);
+        }
+    }
+
+    /**
+     * Organization class.
+     */
+    private static class Organization1 implements Serializable {
+        /** Organization ID (indexed). */
+        @QuerySqlField(index = true)
+        private UUID id;
+
+        /** Organization name (indexed). */
+        @QuerySqlField(index = true)
+        private String name;
+
+        /**
+         * Create organization.
+         *
+         * @param name Organization name.
+         */
+        Organization1(String name) {
+            id = UUID.randomUUID();
+
+            this.name = name;
+        }
+
+        /** {@inheritDoc} */
+        @Override public String toString() {
+            return "Organization [id=" + id + ", name=" + name + ']';
+        }
+    }
+
+    /**
+     * Organization class.
+     */
+    private static class Organization2 implements Serializable {
+        /** Organization ID (indexed). */
+        @QuerySqlField(index = true)
+        private UUID id;
+
+        /** Organization name (indexed). */
+        @QuerySqlField(index = true)
+        private String name;
+
+        /**
+         * Create organization.
+         *
+         * @param name Organization name.
+         */
+        Organization2(String name) {
+            id = UUID.randomUUID();
+
+            this.name = name;
+        }
+
+        /** {@inheritDoc} */
+        @Override public String toString() {
+            return "Organization [id=" + id + ", name=" + name + ']';
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9837a4ab/modules/spring/src/test/java/org/apache/ignite/p2p/GridMultiJvmClassPathSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/spring/src/test/java/org/apache/ignite/p2p/GridMultiJvmClassPathSelfTest.java b/modules/spring/src/test/java/org/apache/ignite/p2p/GridMultiJvmClassPathSelfTest.java
deleted file mode 100644
index 00b61b1..0000000
--- a/modules/spring/src/test/java/org/apache/ignite/p2p/GridMultiJvmClassPathSelfTest.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.p2p;
-
-import org.apache.ignite.*;
-import org.apache.ignite.internal.util.*;
-import org.apache.ignite.internal.util.typedef.*;
-import org.apache.ignite.internal.util.typedef.internal.*;
-import org.apache.ignite.testframework.config.*;
-import org.apache.ignite.testframework.junits.common.*;
-
-import java.util.concurrent.*;
-
-/**
- * Test.
- */
-public class GridMultiJvmClassPathSelfTest extends GridCommonAbstractTest {
-    private static String START = "Start external node";
-
-    public static void main(String[] args) throws Exception {
-        U.setWorkDirectory(null, U.getIgniteHome());
-
-        // Tell our process PID to the wrapper.
-        X.println(GridJavaProcess.PID_MSG_PREFIX + U.jvmPid());
-
-        X.println("Java path: " + System.getProperty("java.class.path"));
-
-        try (Ignite ignite = Ignition.start("examples/config/example-ignite.xml")) {
-            X.println(START);
-            U.sleep(10000);
-        }
-    }
-    /**
-     * @throws Exception If failed.
-     */
-    public void testDifferentClassPath() throws Exception {
-        final CountDownLatch killedLatch = new CountDownLatch(2);
-
-        final CountDownLatch readyLatch = new CountDownLatch(2);
-
-        GridJavaProcess proc1 = GridJavaProcess.exec(
-            GridMultiJvmClassPathSelfTest.class, null,
-            log,
-            new CI1<String>() {
-                @Override public void apply(String s) {
-                    info("Process 1 prints: " + s);
-
-                    if (s.startsWith(START))
-                        readyLatch.countDown();
-                }
-            },
-            new CA() {
-                @Override public void apply() {
-                    info("Process 1 is killed");
-
-                    killedLatch.countDown();
-                }
-            },
-            null,
-            null
-        );
-
-        GridJavaProcess proc2 = GridJavaProcess.exec(
-            GridMultiJvmClassPathSelfTest.class, null,
-            log,
-            new CI1<String>() {
-                @Override public void apply(String s) {
-                    info("Process 2 prints: " + s);
-
-                    if (s.contains(START))
-                        readyLatch.countDown();
-                }
-            },
-            new CA() {
-                @Override public void apply() {
-                    info("Process 2 is killed");
-
-                    killedLatch.countDown();
-                }
-            },
-            null,
-            GridTestProperties.getProperty("p2p.uri.cls")
-        );
-
-        readyLatch.await();
-
-        try(Ignite ignite = Ignition.start("examples/config/example-ignite.xml")){
-            proc1.kill();
-            proc2.kill();
-
-            killedLatch.await();
-        }
-    }
-}


[20/31] incubator-ignite git commit: # ignite-537

Posted by ag...@apache.org.
# ignite-537


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

Branch: refs/heads/ignite-721
Commit: 439af36517d98280805c711eeaf9e24114c3fd6d
Parents: f316e9a
Author: sboikov <se...@inria.fr>
Authored: Fri Apr 10 21:04:01 2015 +0300
Committer: sboikov <se...@inria.fr>
Committed: Fri Apr 10 21:04:01 2015 +0300

----------------------------------------------------------------------
 .../spi/discovery/tcp/TcpDiscoverySpi.java      | 21 ++++++++------------
 1 file changed, 8 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/439af365/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
index bf8cbdb..1ab5332 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
@@ -2265,10 +2265,10 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
         assert ignite != null;
 
         if (!ignite.configuration().isPeerClassLoadingEnabled())
-            return null;
+            return U.gridClassLoader();
 
         if (node.id().equals(getLocalNodeId()) || node.isClient())
-            return null;
+            return U.gridClassLoader();
 
         DiscoveryDeploymentClassLoader ldr = p2pLdrs.get(node.id());
 
@@ -2288,10 +2288,10 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
         assert ignite != null;
 
         if (!ignite.configuration().isPeerClassLoadingEnabled())
-            return null;
+            return U.gridClassLoader();
 
         if (nodeId.equals(getLocalNodeId()))
-            return null;
+            return U.gridClassLoader();
 
         TcpDiscoveryNode node;
 
@@ -2305,12 +2305,12 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
                     log.debug("Node provided exchange data left, will use local class loader " +
                         "for exchange data [nodeId=" + nodeId + ']');
 
-                return null;
+                return U.gridClassLoader();
             }
         }
 
         if (node.isClient()) // Do not support loading from client nodes.
-            return null;
+            return U.gridClassLoader();
 
         DiscoveryDeploymentClassLoader ldr = p2pLdrs.get(nodeId);
 
@@ -5405,6 +5405,8 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
          * @param node Node.
          */
         public DiscoveryDeploymentClassLoader(TcpDiscoveryNode node) {
+            super(U.gridClassLoader());
+
             assert !node.isClient() : node;
             assert !node.id().equals(getLocalNodeId()) : node;
 
@@ -5462,13 +5464,6 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
 
         /** {@inheritDoc} */
         @Override protected Class<?> findClass(String name) throws ClassNotFoundException {
-            try {
-                return U.gridClassLoader().loadClass(name);
-            }
-            catch (ClassNotFoundException ignore) {
-                // Ignore.
-            }
-
             lock.readLock().lock();
 
             try {


[08/31] incubator-ignite git commit: # ignite-537

Posted by ag...@apache.org.
# ignite-537


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

Branch: refs/heads/ignite-721
Commit: 3ca7c8ab0008710698f58c4bfebfffa3e5fbcb52
Parents: 347f3ad
Author: sboikov <sb...@gridgain.com>
Authored: Fri Apr 10 15:15:21 2015 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Fri Apr 10 15:15:21 2015 +0300

----------------------------------------------------------------------
 .../java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java  | 2 +-
 .../spi/discovery/tcp/messages/TcpDiscoveryGetClassRequest.java    | 1 +
 2 files changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/3ca7c8ab/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
index 7bd1a97..94fbfee 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
@@ -289,7 +289,7 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
     @SuppressWarnings("FieldAccessedSynchronizedAndUnsynchronized")
     private ConcurrentLinkedDeque<String> debugLog;
 
-    /** */
+    /** Thread periodically closing unused p2p class loader connections. */
     private DeploymentClassLoadersCleaner p2pLdrCleaner;
 
     /** Class loaders for event data unmarshalling. */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/3ca7c8ab/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryGetClassRequest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryGetClassRequest.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryGetClassRequest.java
index e372ea2..0f6a0c4 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryGetClassRequest.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryGetClassRequest.java
@@ -35,6 +35,7 @@ public class TcpDiscoveryGetClassRequest extends TcpDiscoveryAbstractMessage {
      */
     public TcpDiscoveryGetClassRequest(UUID creatorNodeId, String clsName) {
         super(creatorNodeId);
+
         this.clsName = clsName;
     }
 


[02/31] incubator-ignite git commit: Merge remote-tracking branch 'remotes/origin/ignite-sprint-3' into ignite-537

Posted by ag...@apache.org.
Merge remote-tracking branch 'remotes/origin/ignite-sprint-3' into ignite-537


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

Branch: refs/heads/ignite-721
Commit: 5029aeb0fd59f8303fc68586f22c215f913fb902
Parents: 33dbf24 a60f47d
Author: sboikov <se...@inria.fr>
Authored: Thu Apr 9 19:50:40 2015 +0300
Committer: sboikov <se...@inria.fr>
Committed: Thu Apr 9 19:50:40 2015 +0300

----------------------------------------------------------------------
 .../datastructures/IgniteQueueExample.java      |  28 +-
 .../datastructures/IgniteSetExample.java        |  30 +-
 .../java/org/apache/ignite/IgniteCluster.java   |   2 +-
 .../configuration/CacheConfiguration.java       |  20 +-
 .../configuration/CollectionConfiguration.java  | 114 ++++-
 .../ignite/internal/GridPluginContext.java      |  15 +-
 .../apache/ignite/internal/IgniteKernal.java    |  16 +-
 .../ignite/internal/MarshallerContextImpl.java  |   3 +
 .../affinity/GridAffinityProcessor.java         |   5 +-
 .../processors/cache/GridCacheAdapter.java      |   2 +-
 .../processors/cache/GridCacheProcessor.java    |  63 ++-
 .../cache/GridCacheProjectionImpl.java          |   2 +-
 .../processors/cache/GridCacheProxyImpl.java    |   2 +-
 .../cache/query/GridCacheQueriesImpl.java       |   2 +-
 .../continuous/CacheContinuousQueryManager.java |  28 --
 .../cache/version/GridCacheVersionEx.java       |   2 +-
 .../cacheobject/IgniteCacheObjectProcessor.java |   5 +-
 .../IgniteCacheObjectProcessorImpl.java         |  36 +-
 .../datastreamer/DataStreamerImpl.java          |   8 +-
 .../CacheDataStructuresCacheKey.java            |  62 +++
 .../CacheDataStructuresConfigurationKey.java    |   2 +-
 .../datastructures/DataStructuresProcessor.java | 222 ++++++++-
 .../datastructures/GridCacheQueueAdapter.java   |   2 +-
 .../plugin/IgnitePluginProcessor.java           |  58 +--
 .../util/lang/GridMetadataAwareAdapter.java     |   2 +-
 .../ignite/plugin/CachePluginConfiguration.java |   2 +-
 .../org/apache/ignite/plugin/IgnitePlugin.java  |   3 -
 .../ignite/plugin/PluginConfiguration.java      |  10 +-
 .../org/apache/ignite/plugin/PluginContext.java |   7 +-
 .../apache/ignite/plugin/PluginProvider.java    |   4 +-
 .../communication/tcp/TcpCommunicationSpi.java  |   2 +-
 .../discovery/tcp/TcpDiscoverySpiAdapter.java   |   2 +-
 ...actQueueFailoverDataConsistencySelfTest.java |   4 +-
 .../GridCacheQueueApiSelfAbstractTest.java      |  80 ++++
 .../GridCacheQueueCleanupSelfTest.java          |  11 +-
 ...dCacheQueueMultiNodeConsistencySelfTest.java |  11 +-
 .../GridCacheSetAbstractSelfTest.java           |   5 +-
 .../IgniteCollectionAbstractTest.java           | 160 ++-----
 .../IgniteDataStructureUniqueNameTest.java      |  47 +-
 .../GridCacheLocalAtomicOffheapSetSelfTest.java |  32 ++
 .../GridCacheLocalAtomicQueueApiSelfTest.java   |   6 +
 .../local/GridCacheLocalAtomicSetSelfTest.java  |   6 +
 .../GridCacheLocalOffheapQueueApiSelfTest.java  |  31 ++
 .../local/GridCacheLocalQueueApiSelfTest.java   |   6 +
 .../local/GridCacheLocalSetSelfTest.java        |   6 +
 ...artitionedAtomicOffheapQueueApiSelfTest.java |  32 ++
 ...omicOffheapQueueCreateMultiNodeSelfTest.java |  32 ++
 ...onedAtomicOffheapQueueMultiNodeSelfTest.java |  32 ++
 ...dCachePartitionedAtomicQueueApiSelfTest.java |   6 +
 ...ionedAtomicQueueCreateMultiNodeSelfTest.java |   6 +
 ...micQueueFailoverDataConsistencySelfTest.java |   6 +
 ...PartitionedAtomicQueueMultiNodeSelfTest.java |   6 +
 ...itionedAtomicQueueRotativeMultiNodeTest.java |   6 +
 ...chePartitionedAtomicSetFailoverSelfTest.java |   6 +
 ...rtitionedDataStructuresFailoverSelfTest.java |   6 +
 ...artitionedOffHeapValuesQueueApiSelfTest.java |  31 ++
 ...achePartitionedOffHeapValuesSetSelfTest.java |  32 ++
 ...edOffheapDataStructuresFailoverSelfTest.java |  34 ++
 ...hePartitionedOffheapSetFailoverSelfTest.java |  32 ++
 .../GridCachePartitionedQueueApiSelfTest.java   |   6 +
 ...PartitionedQueueCreateMultiNodeSelfTest.java |   6 +
 ...dCachePartitionedQueueEntryMoveSelfTest.java |  10 +-
 ...nedQueueFailoverDataConsistencySelfTest.java |   6 +
 ...CachePartitionedQueueJoinedNodeSelfTest.java |   6 +
 ...dCachePartitionedQueueMultiNodeSelfTest.java |   6 +
 ...hePartitionedQueueRotativeMultiNodeTest.java |   6 +
 ...GridCachePartitionedSetFailoverSelfTest.java |   6 +
 .../GridCachePartitionedSetSelfTest.java        |   6 +
 .../IgnitePartitionedSetNoBackupsSelfTest.java  |   5 +-
 ...eplicatedDataStructuresFailoverSelfTest.java |   6 +
 .../GridCacheReplicatedQueueApiSelfTest.java    |  11 +
 ...idCacheReplicatedQueueMultiNodeSelfTest.java |   6 +
 ...cheReplicatedQueueRotativeMultiNodeTest.java |   6 +
 .../GridCacheReplicatedSetSelfTest.java         |   6 +
 .../IgniteCacheDataStructuresSelfTestSuite.java |  10 +
 .../query/h2/sql/GridSqlQueryParser.java        |  24 +-
 .../h2/sql/AbstractH2CompareQueryTest.java      |  13 +-
 .../query/h2/sql/BaseH2CompareQueryTest.java    |  37 +-
 .../query/h2/sql/H2CompareBigQueryTest.java     |  38 +-
 .../ignite/tools/javadoc/IgniteLinkTaglet.java  |  20 +-
 modules/urideploy/README.txt                    |   2 +-
 modules/urideploy/licenses/edtftp-license.pdf   | Bin 58355 -> 0 bytes
 modules/urideploy/licenses/jtidy-license.txt    |  50 --
 .../urideploy/licenses/jtidy-mit-license.txt    |  50 ++
 modules/urideploy/pom.xml                       |   6 -
 .../spi/deployment/uri/UriDeploymentSpi.java    | 182 +++----
 .../uri/scanners/GridUriDeploymentScanner.java  | 286 -----------
 .../GridUriDeploymentScannerListener.java       |   2 +-
 .../uri/scanners/UriDeploymentScanner.java      |  47 ++
 .../scanners/UriDeploymentScannerContext.java   |  92 ++++
 .../scanners/UriDeploymentScannerManager.java   | 221 +++++++++
 .../file/GridUriDeploymentFileScanner.java      | 311 ------------
 .../scanners/file/UriDeploymentFileScanner.java | 327 +++++++++++++
 .../ftp/GridUriDeploymentFtpClient.java         | 199 --------
 .../ftp/GridUriDeploymentFtpConfiguration.java  | 115 -----
 .../ftp/GridUriDeploymentFtpException.java      |  43 --
 .../scanners/ftp/GridUriDeploymentFtpFile.java  | 119 -----
 .../ftp/GridUriDeploymentFtpScanner.java        | 234 ---------
 .../uri/scanners/ftp/package-info.java          |  22 -
 .../http/GridUriDeploymentHttpScanner.java      | 423 ----------------
 .../scanners/http/UriDeploymentHttpScanner.java | 478 +++++++++++++++++++
 ...loymentMultiScannersErrorThrottlingTest.java |   3 -
 .../GridUriDeploymentMultiScannersSelfTest.java |   3 +-
 .../GridFileDeploymentUndeploySelfTest.java     |   4 +-
 .../uri/scanners/ftp/GridFtpDeploymentTest.java |  46 --
 .../uri/scanners/ftp/package-info.java          |  22 -
 .../scala/org/apache/ignite/visor/visor.scala   |   3 +
 107 files changed, 2468 insertions(+), 2495 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/5029aeb0/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiAdapter.java
----------------------------------------------------------------------


[07/31] incubator-ignite git commit: # ignite-537 merge from sprint-3

Posted by ag...@apache.org.
# ignite-537 merge from sprint-3


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

Branch: refs/heads/ignite-721
Commit: 347f3adba92ba9ca70f9509fc18105f3f5c0d743
Parents: eb85f06 60640de
Author: sboikov <sb...@gridgain.com>
Authored: Fri Apr 10 15:10:20 2015 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Fri Apr 10 15:10:20 2015 +0300

----------------------------------------------------------------------
 assembly/release-hadoop.xml                     |   4 -
 bin/ignitevisorcmd.bat                          |  39 +--
 .../examples/MessagingExamplesSelfTest.java     |   2 +-
 .../java8/examples/BasicExamplesSelfTest.java   |   3 +
 .../java8/examples/CacheExamplesSelfTest.java   |   4 +
 .../examples/CheckpointExamplesSelfTest.java    |   3 +
 .../examples/ClusterGroupExampleSelfTest.java   |   3 +-
 .../examples/ContinuationExamplesSelfTest.java  |   3 +
 .../ContinuousMapperExamplesSelfTest.java       |   4 +-
 .../DeploymentExamplesMultiNodeSelfTest.java    |   2 +
 .../examples/DeploymentExamplesSelfTest.java    |   2 +
 .../HibernateL2CacheExampleSelfTest.java        |   3 +
 .../java8/examples/IgfsExamplesSelfTest.java    |   3 +
 .../examples/LifecycleExamplesSelfTest.java     |   3 +
 .../MemcacheRestExamplesMultiNodeSelfTest.java  |   2 +
 .../examples/MemcacheRestExamplesSelfTest.java  |   2 +
 .../examples/MessagingExamplesSelfTest.java     |   4 +-
 .../examples/MonteCarloExamplesSelfTest.java    |   3 +
 .../examples/SpringBeanExamplesSelfTest.java    |   3 +
 .../java8/examples/TaskExamplesSelfTest.java    |   2 +
 .../client/ClientReconnectionSelfTest.java      |  67 +++---
 .../ignite/codegen/MessageCodeGenerator.java    |   1 -
 modules/core/pom.xml                            |   2 +-
 .../java/org/apache/ignite/IgniteCache.java     |  18 ++
 .../java/org/apache/ignite/IgniteState.java     |   2 +-
 .../configuration/CacheConfiguration.java       |  69 +++---
 .../configuration/IgniteConfiguration.java      |  35 +--
 .../internal/ComputeTaskInternalFuture.java     |   2 +-
 .../ignite/internal/GridJobExecuteRequest.java  |  10 +-
 .../ignite/internal/GridJobExecuteResponse.java |   4 +-
 .../apache/ignite/internal/GridTaskMessage.java |  30 ---
 .../ignite/internal/GridTaskSessionRequest.java |   6 +-
 .../org/apache/ignite/internal/IgnitionEx.java  |   4 +-
 .../client/GridClientConfiguration.java         |  14 +-
 .../GridClientConnectionManagerAdapter.java     |   2 +-
 .../router/GridTcpRouterConfiguration.java      |   6 +-
 .../internal/cluster/ClusterGroupAdapter.java   | 150 ++++++++++--
 .../internal/managers/GridManagerAdapter.java   |   4 +-
 .../discovery/GridDiscoveryManager.java         |  32 ++-
 .../eventstorage/GridEventStorageManager.java   |   4 +-
 .../processors/cache/CacheMetricsImpl.java      |   7 +-
 .../processors/cache/CacheMetricsSnapshot.java  | 223 +++++++++++++++++-
 .../processors/cache/GridCacheAdapter.java      |  12 +-
 .../processors/cache/GridCacheContext.java      |  64 ++++-
 .../cache/GridCacheEvictionManager.java         |   6 +-
 .../cache/GridCacheExplicitLockSpan.java        |   2 +-
 .../processors/cache/GridCacheMapEntry.java     |   6 +-
 .../processors/cache/GridCacheMvcc.java         |   2 +-
 .../cache/GridCacheMvccCandidate.java           |  50 +++-
 .../processors/cache/GridCacheMvccManager.java  |  44 +++-
 .../processors/cache/GridCacheProcessor.java    |  52 ++--
 .../processors/cache/IgniteCacheProxy.java      |  26 ++
 .../distributed/GridDistributedCacheEntry.java  |  12 +-
 .../distributed/dht/GridDhtCacheEntry.java      |  36 ++-
 .../distributed/dht/GridDhtLockFuture.java      |  15 +-
 .../dht/GridDhtTransactionalCacheAdapter.java   |  14 +-
 .../distributed/dht/GridDhtTxFinishFuture.java  |  22 +-
 .../cache/distributed/dht/GridDhtTxLocal.java   |   2 +
 .../distributed/dht/GridDhtTxLocalAdapter.java  |  30 ++-
 .../distributed/dht/GridDhtTxPrepareFuture.java |  28 ++-
 .../dht/atomic/GridDhtAtomicCache.java          |   6 +-
 .../dht/colocated/GridDhtColocatedCache.java    |  35 ++-
 .../colocated/GridDhtColocatedLockFuture.java   |  46 +++-
 .../GridDhtPartitionsExchangeFuture.java        |  39 ++-
 .../distributed/near/GridNearAtomicCache.java   |   2 +-
 .../distributed/near/GridNearCacheEntry.java    |  10 +-
 .../distributed/near/GridNearLockFuture.java    |  13 +-
 .../near/GridNearTransactionalCache.java        |   2 +-
 .../near/GridNearTxFinishFuture.java            |   8 +-
 .../cache/distributed/near/GridNearTxLocal.java |   7 +
 .../near/GridNearTxPrepareFuture.java           | 122 ++++++----
 .../near/GridNearTxPrepareRequest.java          |  64 +++--
 .../local/atomic/GridLocalAtomicCache.java      |   6 +-
 .../cache/query/GridCacheQueryAdapter.java      |   2 +-
 .../continuous/CacheContinuousQueryManager.java |   2 +-
 .../cache/transactions/IgniteTxAdapter.java     |   3 +-
 .../cache/transactions/IgniteTxHandler.java     | 120 +++++++---
 .../transactions/IgniteTxLocalAdapter.java      |  82 ++++---
 .../cache/transactions/IgniteTxManager.java     |   7 +
 .../internal/processors/igfs/IgfsAsyncImpl.java |   4 +-
 .../ignite/internal/processors/igfs/IgfsEx.java |   4 +-
 .../processors/igfs/IgfsFileWorker.java         | 180 --------------
 .../processors/igfs/IgfsFileWorkerBatch.java    | 225 +++++++-----------
 .../processors/igfs/IgfsFileWorkerTask.java     |  32 ---
 .../internal/processors/igfs/IgfsImpl.java      | 150 +++++++-----
 .../internal/processors/igfs/IgfsProcessor.java |   2 +-
 .../processors/rest/GridRestProcessor.java      |  33 +--
 .../security/GridSecurityProcessor.java         |  13 +-
 .../processors/security/SecurityContext.java    |   8 +-
 .../security/os/GridOsSecurityProcessor.java    |  11 +-
 .../processors/task/GridTaskProcessor.java      |   9 +-
 .../internal/util/future/GridFutureAdapter.java |  20 +-
 .../ignite/internal/util/worker/GridWorker.java |   6 +-
 .../visor/cache/VisorCacheClearTask.java        |   3 +
 .../cache/VisorCacheQueryConfiguration.java     |   9 -
 .../internal/visor/log/VisorLogSearchTask.java  |  12 +-
 .../node/VisorNodeEventsCollectorTask.java      |   3 +
 .../node/VisorSegmentationConfiguration.java    |   4 +-
 .../internal/visor/util/VisorTaskUtils.java     |   3 +
 .../plugin/security/AuthenticationContext.java  |  12 +-
 .../security/GridSecurityCredentials.java       | 184 ---------------
 .../GridSecurityCredentialsBasicProvider.java   |  44 ----
 .../GridSecurityCredentialsProvider.java        |  44 ----
 .../plugin/security/GridSecurityException.java  |  58 -----
 .../plugin/security/GridSecurityPermission.java |  69 ------
 .../security/GridSecurityPermissionSet.java     |  66 ------
 .../plugin/security/GridSecuritySubject.java    |  62 -----
 .../security/GridSecuritySubjectType.java       |  48 ----
 .../plugin/security/SecurityCredentials.java    | 191 +++++++++++++++
 .../SecurityCredentialsBasicProvider.java       |  44 ++++
 .../security/SecurityCredentialsProvider.java   |  44 ++++
 .../plugin/security/SecurityException.java      |  61 +++++
 .../plugin/security/SecurityPermission.java     |  69 ++++++
 .../plugin/security/SecurityPermissionSet.java  |  66 ++++++
 .../ignite/plugin/security/SecuritySubject.java |  62 +++++
 .../plugin/security/SecuritySubjectType.java    |  48 ++++
 .../segmentation/GridSegmentationPolicy.java    |  47 ----
 .../segmentation/GridSegmentationResolver.java  |  64 -----
 .../plugin/segmentation/SegmentationPolicy.java |  49 ++++
 .../segmentation/SegmentationResolver.java      |  65 +++++
 .../org/apache/ignite/spi/IgniteSpiAdapter.java |   4 +-
 .../org/apache/ignite/spi/IgniteSpiContext.java |   4 +-
 .../spi/discovery/DiscoveryMetricsProvider.java |  10 +
 .../DiscoverySpiNodeAuthenticator.java          |   2 +-
 .../discovery/tcp/TcpClientDiscoverySpi.java    |  35 ++-
 .../spi/discovery/tcp/TcpDiscoverySpi.java      |  57 ++++-
 .../tcp/internal/TcpDiscoveryNode.java          |  76 +++++-
 .../messages/TcpDiscoveryHeartbeatMessage.java  |  65 +++++
 .../startup/cmdline/CommandLineStartup.java     |   7 +-
 .../internal/GridLifecycleAwareSelfTest.java    |   2 +-
 .../ignite/internal/GridProjectionSelfTest.java |  82 +++++++
 .../ignite/internal/GridStartStopSelfTest.java  |   8 +-
 .../CacheMetricsForClusterGroupSelfTest.java    | 236 +++++++++++++++++++
 .../cache/GridCacheBasicApiAbstractTest.java    |   4 +-
 ...CacheOffHeapMultiThreadedUpdateSelfTest.java |  42 ++--
 .../GridCacheOffHeapTieredAbstractSelfTest.java |   4 +-
 .../cache/GridCacheReloadSelfTest.java          |   3 +-
 .../GridCacheReturnValueTransferSelfTest.java   |  15 +-
 .../IgniteTxMultiThreadedAbstractTest.java      |   5 +-
 ...GridCacheQueueMultiNodeAbstractSelfTest.java |   5 +-
 .../GridCacheSetAbstractSelfTest.java           |  10 +-
 .../GridCacheSetFailoverAbstractSelfTest.java   |   6 +-
 .../distributed/GridCacheEventAbstractTest.java |  16 +-
 .../GridCacheNodeFailureAbstractTest.java       |  15 +-
 .../dht/IgniteCacheLockFailoverSelfTest.java    | 156 ++++++++++++
 .../dht/IgniteCacheMultiTxLockSelfTest.java     | 219 +++++++++++++++++
 ...licatedNearOnlyMultiNodeFullApiSelfTest.java |   2 +-
 .../continuous/GridEventConsumeSelfTest.java    |   7 +-
 .../processors/igfs/IgfsAbstractSelfTest.java   |  24 +-
 .../tostring/GridToStringBuilderSelfTest.java   |   5 +-
 .../GridP2PMissedResourceCacheSizeSelfTest.java |   2 +-
 .../tcp/TcpClientDiscoverySelfTest.java         |   5 +-
 .../testframework/GridSpiTestContext.java       |   4 +-
 .../testframework/junits/GridAbstractTest.java  |   6 +-
 .../junits/spi/GridSpiAbstractTest.java         |  72 +-----
 .../IgniteCacheMetricsSelfTestSuite.java        |   4 +
 .../ignite/testsuites/IgniteCacheTestSuite.java |   3 +
 .../IgniteSpiDiscoverySelfTestSuite.java        |   2 +
 ...rrentLinkedHashMapMultiThreadedSelfTest.java |   4 +-
 .../HadoopDefaultMapReducePlannerSelfTest.java  |   2 +-
 .../GridCacheAbstractFieldsQuerySelfTest.java   |  10 +-
 .../processors/cache/GridCacheSwapSelfTest.java |   5 +-
 ...hePartitionedQueryMultiThreadedSelfTest.java |   2 +-
 .../cache/IgniteCacheQueryIndexSelfTest.java    |   3 +-
 .../IgniteCachePartitionedQuerySelfTest.java    |   5 +-
 .../IgniteCacheReplicatedQuerySelfTest.java     |  18 +-
 .../processors/cache/GridCacheJtaSelfTest.java  |   6 +-
 .../http/jetty/GridJettyRestHandler.java        |   2 +-
 .../p2p/GridP2PUserVersionChangeSelfTest.java   |   8 +-
 .../ignite/tools/classgen/ClassesGenerator.java |   2 +-
 .../ignite/visor/commands/VisorConsole.scala    |  19 ++
 171 files changed, 3389 insertions(+), 1834 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/347f3adb/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpi.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/347f3adb/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
----------------------------------------------------------------------
diff --cc modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
index bc0fec5,4b43fec..7bd1a97
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
@@@ -5302,310 -5186,11 +5324,319 @@@ public class TcpDiscoverySpi extends Tc
      }
  
      /**
 +     * @param node Node created event.
 +     * @return Class loader for custom event unmarshalling.
 +     */
 +    @Nullable protected ClassLoader customMessageClassLoader(TcpDiscoveryNode node) {
 +        assert ignite != null;
 +
 +        if (!ignite.configuration().isPeerClassLoadingEnabled())
 +            return null;
 +
 +        if (node.id().equals(getLocalNodeId()))
 +            return locLdr;
 +
 +        DiscoveryDeploymentClassLoader ldr = p2pLdrs.get(node.id());
 +
 +        if (ldr == null)
 +            ldr = F.addIfAbsent(p2pLdrs, node.id(), new DiscoveryDeploymentClassLoader(node));
 +
 +        return ldr;
 +    }
 +
 +    /**
 +     * @param joiningNode Joining node.
 +     * @param nodeId Remote node provided data.
 +     * @return Class loader for exchange data unmarshalling.
 +     */
 +    @Nullable protected ClassLoader exchangeClassLoader(TcpDiscoveryNode joiningNode, UUID nodeId) {
 +        assert joiningNode != null;
 +        assert ignite != null;
 +
 +        if (!ignite.configuration().isPeerClassLoadingEnabled())
 +            return null;
 +
 +        if (nodeId.equals(getLocalNodeId()))
 +            return locLdr;
 +
 +        TcpDiscoveryNode node;
 +
 +        if (joiningNode.id().equals(nodeId))
 +            node = joiningNode;
 +        else {
 +            node = ring.node(nodeId);
 +
 +            if (node == null) {
 +                if (log.isDebugEnabled())
 +                    log.debug("Node provided exchange data left, will use local class loader " +
 +                        "for exchange data [nodeId=" + nodeId + ']');
 +
 +                return locLdr;
 +            }
 +        }
 +
 +        if (node.isClient()) // Do not support loading from client nodes.
 +            return locLdr;
 +
 +        DiscoveryDeploymentClassLoader ldr = p2pLdrs.get(nodeId);
 +
 +        if (ldr == null)
 +            ldr = F.addIfAbsent(p2pLdrs, nodeId, new DiscoveryDeploymentClassLoader(node));
 +
 +        return ldr;
 +    }
 +
 +    /**
 +     * @param nodeId Node ID.
 +     * @return Marshalled exchange data.
 +     * @throws IgniteSpiException If failed.
 +     */
 +    private Map<Integer, byte[]> collectExchangeData(UUID nodeId) throws IgniteSpiException {
 +        Map<Integer, Object> data = exchange.collect(nodeId);
 +
 +        Map<Integer, byte[]> data0 = U.newHashMap(data.size());
 +
 +        for (Map.Entry<Integer, Object> entry : data.entrySet()) {
 +            try {
 +                byte[] bytes = marsh.marshal(entry.getValue());
 +
 +                data0.put(entry.getKey(), bytes);
 +            }
 +            catch (IgniteCheckedException e) {
 +                U.error(log, "Failed to marshal discovery data " +
 +                    "[comp=" + entry.getKey() + ", data=" + entry.getValue() + ']', e);
 +
 +                throw new IgniteSpiException("Failed to marshal discovery data.", e);
 +            }
 +        }
 +
 +        return data0;
 +    }
 +
 +    /**
 +     *
 +     */
 +    private class DiscoveryDeploymentClassLoader extends ClassLoader {
 +        /** */
 +        private final UUID nodeId;
 +
 +        /** */
 +        private volatile TcpDiscoveryNode node;
 +
 +        /** */
 +        private Socket sock;
 +
 +        /** */
 +        private final ReadWriteLock lock = new ReentrantReadWriteLock();
 +
 +        /**
 +         * @param node Node.
 +         */
 +        public DiscoveryDeploymentClassLoader(TcpDiscoveryNode node) {
 +            assert !node.isClient();
 +            assert !node.id().equals(getLocalNodeId());
 +
 +            this.node = node;
 +
 +            nodeId = node.id();
 +        }
 +
 +        /**
 +         * @return Target node ID.
 +         */
 +        UUID nodeId() {
 +            return nodeId;
 +        }
 +
 +        /**
 +         * Node left callback.
 +         */
 +        void onNodeLeft() {
 +            lock.writeLock().lock();
 +
 +            try {
 +                if (sock != null) {
 +                    if (log.isDebugEnabled())
 +                        log.debug("Closing deployment class loader connection on node left [node=" + nodeId + ']');
 +
 +                    U.closeQuiet(sock);
 +
 +                    sock = null;
 +                }
 +
 +                node = null;
 +            }
 +            finally {
 +                lock.writeLock().unlock();
 +            }
 +        }
 +
 +        /**
 +         * Closes connection if there is no class loading in progress.
 +         */
 +        void closeConnectionIfNotUsed() {
 +            if (lock.writeLock().tryLock()) {
 +                try {
 +                    if (sock != null) {
 +                        if (log.isDebugEnabled())
 +                            log.debug("Closing idle deployment class loader connection [node=" + nodeId + ']');
 +
 +                        U.closeQuiet(sock);
 +
 +                        sock = null;
 +                    }
 +                }
 +                finally {
 +                    lock.writeLock().unlock();
 +                }
 +            }
 +        }
 +
 +        /** {@inheritDoc} */
 +        @Override protected Class<?> findClass(String name) throws ClassNotFoundException {
 +            if (node == null)
 +                throw new ClassNotFoundException("Failed to load class, peer node left " +
 +                    "[cls=" +name + ", node=" + nodeId + ']');
 +
 +            lock.readLock().lock();
 +
 +            try {
 +                TcpDiscoveryGetClassResponse res = requestClass(name);
 +
 +                if (res == null)
 +                    throw new ClassNotFoundException("Failed to load class, can not connect to peer node " +
 +                        "[cls=" + name + ", node=" + nodeId + ']');
 +
 +                if (res.error() != null)
 +                    throw new ClassNotFoundException(res.error());
 +
 +                assert res.classBytes() != null;
 +
 +                return defineClass(name, res.classBytes(), 0, res.classBytes().length);
 +            }
 +            finally {
 +                lock.readLock().unlock();
 +            }
 +        }
 +
 +        /**
 +         * @param name Class name.
 +         * @return Class response or {@code null} if failed to connect.
 +         */
 +        @Nullable private synchronized TcpDiscoveryGetClassResponse requestClass(String name) {
 +            TcpDiscoveryGetClassRequest msg = new TcpDiscoveryGetClassRequest(getLocalNodeId(), name);
 +
 +            for (int i = 0; i < reconCnt; i++) {
 +                if (sock == null) {
 +                    TcpDiscoveryNode node0 = node;
 +
 +                    if (node0 == null)
 +                        return null; // Node left.
 +
 +                    sock = connect(node0);
 +
 +                    if (sock == null)
 +                        break;
 +                }
 +
 +                try {
 +                    return request(sock, msg);
 +                }
 +                catch (IOException | IgniteCheckedException e) {
 +                    U.closeQuiet(sock);
 +
 +                    sock = null;
 +                }
 +            }
 +
 +            node = null; // Consider node failed.
 +
 +            p2pLdrs.remove(nodeId, this);
 +
 +            return null;
 +        }
 +
 +        /**
 +         * @param sock Socket.
 +         * @param msg Message.
 +         * @return Response.
 +         * @throws IOException If request failed.
 +         * @throws IgniteCheckedException If request failed.
 +         */
 +        private TcpDiscoveryGetClassResponse request(Socket sock, TcpDiscoveryGetClassRequest msg)
 +            throws IOException, IgniteCheckedException
 +        {
 +            long tstamp = U.currentTimeMillis();
 +
 +            writeToSocket(sock, msg);
 +
 +            stats.onMessageSent(msg, U.currentTimeMillis() - tstamp);
 +
 +            TcpDiscoveryGetClassResponse res = readMessage(sock, null, netTimeout);
 +
 +            stats.onMessageReceived(res);
 +
 +            return res;
 +        }
 +
 +        /**
 +         * @param node Node.
 +         * @return Socket or {@code null} if failed to connect.
 +         */
 +        private Socket connect(TcpDiscoveryNode node) {
 +            Socket sock = null;
 +
 +            for (InetSocketAddress addr : getNodeAddresses(node, U.sameMacs(locNode, node))) {
 +                sock = connect(addr);
 +
 +                if (sock != null)
 +                    break;
 +            }
 +
 +            return sock;
 +        }
 +
 +        /**
 +         * @param addr Address.
 +         * @return Socket or {@code null} if failed to connect.
 +         */
 +        private Socket connect(InetSocketAddress addr) {
 +            TcpDiscoveryHandshakeRequest req = new TcpDiscoveryHandshakeRequest(getLocalNodeId());
 +
 +            for (int i = 0; i < reconCnt; i++) {
 +                Socket sock = null;
 +
 +                long tstamp = U.currentTimeMillis();
 +
 +                try {
 +                    sock = openSocket(addr);
 +
 +                    writeToSocket(sock, req);
 +
 +                    TcpDiscoveryHandshakeResponse res = readMessage(sock, null, netTimeout);
 +
 +                    if (!res.creatorNodeId().equals(nodeId))
 +                        return null;
 +
 +                    stats.onClientSocketInitialized(U.currentTimeMillis() - tstamp);
 +
 +                    return sock;
 +                }
 +                catch (IOException | IgniteCheckedException e) {
 +                    U.closeQuiet(sock);
 +                }
 +            }
 +
 +            return null;
 +        }
 +    }
++
++    /**
+      * @param msg Message.
+      * @param nodeId Node ID.
+      */
+     private static void removeMetrics(TcpDiscoveryHeartbeatMessage msg, UUID nodeId) {
+         msg.removeMetrics(nodeId);
+         msg.removeCacheMetrics(nodeId);
+     }
  }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/347f3adb/modules/core/src/test/java/org/apache/ignite/internal/processors/continuous/GridEventConsumeSelfTest.java
----------------------------------------------------------------------


[24/31] incubator-ignite git commit: ignite-724 Cluster doesn't start with daemon node and cache metrics enabled

Posted by ag...@apache.org.
ignite-724 Cluster doesn't start with daemon node and cache metrics enabled


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

Branch: refs/heads/ignite-721
Commit: 7bb7586b202ee2c6dec8db85e86d6f0c5d94025a
Parents: c3210d8
Author: Andrey Gura <ag...@gridgain.com>
Authored: Fri Apr 10 22:30:19 2015 +0300
Committer: Andrey Gura <ag...@gridgain.com>
Committed: Fri Apr 10 22:55:25 2015 +0300

----------------------------------------------------------------------
 .../ignite/spi/discovery/tcp/TcpDiscoverySpi.java |  1 -
 .../discovery/tcp/internal/TcpDiscoveryNode.java  | 12 +++++++-----
 .../CacheMetricsForClusterGroupSelfTest.java      | 18 +++++++++++++++++-
 3 files changed, 24 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7bb7586b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
index 4b43fec..6cf6de8 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
@@ -4330,7 +4330,6 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
         {
             assert nodeId != null;
             assert metrics != null;
-            assert cacheMetrics != null;
 
             TcpDiscoveryNode node = ring.node(nodeId);
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7bb7586b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/internal/TcpDiscoveryNode.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/internal/TcpDiscoveryNode.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/internal/TcpDiscoveryNode.java
index f5c1edb..bb8f051 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/internal/TcpDiscoveryNode.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/internal/TcpDiscoveryNode.java
@@ -128,8 +128,11 @@ public class TcpDiscoveryNode extends GridMetadataAwareAdapter implements Cluste
      * @param metricsProvider Metrics provider.
      * @param ver Version.
      */
-    public TcpDiscoveryNode(UUID id, Collection<String> addrs, Collection<String> hostNames, int discPort,
-                            DiscoveryMetricsProvider metricsProvider, IgniteProductVersion ver) {
+    public TcpDiscoveryNode(UUID id,
+        Collection<String> addrs,
+        Collection<String> hostNames, int discPort,
+        DiscoveryMetricsProvider metricsProvider, IgniteProductVersion ver)
+    {
         assert id != null;
         assert !F.isEmpty(addrs);
         assert metricsProvider != null;
@@ -145,6 +148,7 @@ public class TcpDiscoveryNode extends GridMetadataAwareAdapter implements Cluste
         consistentId = U.consistentId(addrs, discPort);
 
         metrics = metricsProvider.metrics();
+        cacheMetrics = metricsProvider.cacheMetrics();
         sockAddrs = U.toSocketAddresses(this, discPort);
     }
 
@@ -248,9 +252,7 @@ public class TcpDiscoveryNode extends GridMetadataAwareAdapter implements Cluste
      * @param cacheMetrics Cache metrics.
      */
     public void setCacheMetrics(Map<Integer, CacheMetrics> cacheMetrics) {
-        assert cacheMetrics != null;
-
-        this.cacheMetrics = cacheMetrics;
+        this.cacheMetrics = cacheMetrics != null ? cacheMetrics : Collections.<Integer, CacheMetrics>emptyMap();
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7bb7586b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheMetricsForClusterGroupSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheMetricsForClusterGroupSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheMetricsForClusterGroupSelfTest.java
index 19d7aab..1ba24e3 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheMetricsForClusterGroupSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheMetricsForClusterGroupSelfTest.java
@@ -56,9 +56,25 @@ public class CacheMetricsForClusterGroupSelfTest extends GridCommonAbstractTest
     /** Cache 2. */
     private IgniteCache<Integer, Integer> cache2;
 
+    /** Daemon grid. */
+    private boolean daemon;
+
+    /** {@inheritDoc} */
+    @Override protected IgniteConfiguration getConfiguration(String gridName) throws Exception {
+        IgniteConfiguration cfg = super.getConfiguration(gridName);
+
+        cfg.setDaemon(daemon);
+
+        return cfg;
+    }
+
     /** {@inheritDoc} */
     @Override protected void beforeTestsStarted() throws Exception {
         startGrids(GRID_CNT);
+
+        daemon = true;
+
+        startGrid(GRID_CNT);
     }
 
     /** {@inheritDoc} */
@@ -150,7 +166,7 @@ public class CacheMetricsForClusterGroupSelfTest extends GridCommonAbstractTest
      * Wait for {@link EventType#EVT_NODE_METRICS_UPDATED} event will be receieved.
      */
     private void awaitMetricsUpdate() throws InterruptedException {
-        final CountDownLatch latch = new CountDownLatch(GRID_CNT * 2);
+        final CountDownLatch latch = new CountDownLatch((GRID_CNT + 1) * 2);
 
         IgnitePredicate<Event> lsnr = new IgnitePredicate<Event>() {
             @Override public boolean apply(Event ignore) {


[03/31] incubator-ignite git commit: # ignite-537

Posted by ag...@apache.org.
# ignite-537


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

Branch: refs/heads/ignite-721
Commit: 88e1ff8810ebc617e08c8eea554ec451f2df603c
Parents: 5029aeb
Author: sboikov <se...@inria.fr>
Authored: Thu Apr 9 23:49:42 2015 +0300
Committer: sboikov <se...@inria.fr>
Committed: Thu Apr 9 23:49:42 2015 +0300

----------------------------------------------------------------------
 .../discovery/GridDiscoveryManager.java         |  41 +---
 .../continuous/GridContinuousProcessor.java     |  25 ++-
 .../spi/discovery/DiscoverySpiDataExchange.java |   6 +-
 .../discovery/tcp/TcpClientDiscoverySpi.java    |  11 +-
 .../spi/discovery/tcp/TcpDiscoverySpi.java      | 223 +++++++++++++++++--
 .../discovery/tcp/TcpDiscoverySpiAdapter.java   |  13 --
 .../continuous/GridEventConsumeSelfTest.java    |   5 +-
 .../discovery/AbstractDiscoverySelfTest.java    |   5 +-
 .../tcp/TcpDiscoverySpiStartStopSelfTest.java   |   5 +-
 .../junits/spi/GridSpiAbstractTest.java         |   5 +-
 10 files changed, 253 insertions(+), 86 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/88e1ff88/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java
index 7662bcc..04ff423 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java
@@ -36,7 +36,6 @@ import org.apache.ignite.internal.util.typedef.*;
 import org.apache.ignite.internal.util.typedef.internal.*;
 import org.apache.ignite.internal.util.worker.*;
 import org.apache.ignite.lang.*;
-import org.apache.ignite.marshaller.jdk.*;
 import org.apache.ignite.plugin.security.*;
 import org.apache.ignite.plugin.segmentation.*;
 import org.apache.ignite.spi.*;
@@ -172,9 +171,6 @@ public class GridDiscoveryManager extends GridManagerAdapter<DiscoverySpi> {
     /** Map of dynamic cache filters. */
     private Map<String, CachePredicate> registeredCaches = new HashMap<>();
 
-    /** */
-    private JdkMarshaller jdkMarsh = new JdkMarshaller();
-
     /** @param ctx Context. */
     public GridDiscoveryManager(GridKernalContext ctx) {
         super(ctx, ctx.config().getDiscoverySpi());
@@ -421,10 +417,10 @@ public class GridDiscoveryManager extends GridManagerAdapter<DiscoverySpi> {
         });
 
         spi.setDataExchange(new DiscoverySpiDataExchange() {
-            @Override public Map<Integer, byte[]> collect(UUID nodeId) {
+            @Override public Map<Integer, Object> collect(UUID nodeId) {
                 assert nodeId != null;
 
-                Map<Integer, byte[]> data = new HashMap<>();
+                Map<Integer, Object> data = new HashMap<>();
 
                 for (GridComponent comp : ctx.components()) {
                     Object compData = comp.collectDiscoveryData(nodeId);
@@ -432,48 +428,29 @@ public class GridDiscoveryManager extends GridManagerAdapter<DiscoverySpi> {
                     if (compData != null) {
                         assert comp.discoveryDataType() != null;
 
-                        try {
-                            byte[] bytes = jdkMarsh.marshal(compData);
-
-                            data.put(comp.discoveryDataType().ordinal(), bytes);
-                        }
-                        catch (IgniteCheckedException e) {
-                            U.error(log, "Failed to marshal discovery data " +
-                                "[comp=" + comp + ", data=" + compData + ']', e);
-                        }
+                        data.put(comp.discoveryDataType().ordinal(), compData);
                     }
                 }
 
                 return data;
             }
 
-            @Override public void onExchange(UUID joiningNodeId,
-                UUID nodeId,
-                Map<Integer, byte[]> data,
-                ClassLoader clsLdr) {
-                for (Map.Entry<Integer, byte[]> entry : data.entrySet()) {
+            @Override public void onExchange(UUID joiningNodeId, UUID nodeId, Map<Integer, Object> data) {
+                for (Map.Entry<Integer, Object> e : data.entrySet()) {
                     GridComponent comp = null;
 
                     for (GridComponent c : ctx.components()) {
-                        if (c.discoveryDataType() != null && c.discoveryDataType().ordinal() == entry.getKey()) {
+                        if (c.discoveryDataType() != null && c.discoveryDataType().ordinal() == e.getKey()) {
                             comp = c;
 
                             break;
                         }
                     }
 
-                    if (comp != null) {
-                        try {
-                            Object compData = jdkMarsh.unmarshal(entry.getValue(), clsLdr);
-
-                            comp.onDiscoveryDataReceived(joiningNodeId, nodeId, compData);
-                        }
-                        catch (IgniteCheckedException e) {
-                            U.error(log, "Failed to unmarshal discovery data for component: "  + comp, e);
-                        }
-                    }
+                    if (comp != null)
+                        comp.onDiscoveryDataReceived(joiningNodeId, nodeId, e.getValue());
                     else
-                        U.warn(log, "Received discovery data for unknown component: " + entry.getKey());
+                        U.warn(log, "Received discovery data for unknown component: " + e.getKey());
                 }
             }
         });

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/88e1ff88/modules/core/src/main/java/org/apache/ignite/internal/processors/continuous/GridContinuousProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/continuous/GridContinuousProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/continuous/GridContinuousProcessor.java
index 54da8e6..99b9c0c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/continuous/GridContinuousProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/continuous/GridContinuousProcessor.java
@@ -30,6 +30,7 @@ import org.apache.ignite.internal.processors.cache.*;
 import org.apache.ignite.internal.processors.timeout.*;
 import org.apache.ignite.internal.util.*;
 import org.apache.ignite.internal.util.future.*;
+import org.apache.ignite.internal.util.lang.*;
 import org.apache.ignite.internal.util.tostring.*;
 import org.apache.ignite.internal.util.typedef.*;
 import org.apache.ignite.internal.util.typedef.internal.*;
@@ -1559,7 +1560,7 @@ public class GridContinuousProcessor extends GridProcessorAdapter {
     /**
      * Discovery data.
      */
-    private static class DiscoveryData implements Externalizable {
+    private static class DiscoveryData implements Externalizable, GridPeerDeployAware {
         /** */
         private static final long serialVersionUID = 0L;
 
@@ -1577,6 +1578,16 @@ public class GridContinuousProcessor extends GridProcessorAdapter {
             // No-op.
         }
 
+        @Override
+        public Class<?> deployClass() {
+            return U.peerDeployAware0(items).deployClass();
+        }
+
+        @Override
+        public ClassLoader classLoader() {
+            return U.peerDeployAware0(items).classLoader();
+        }
+
         /**
          * @param nodeId Node ID.
          */
@@ -1616,7 +1627,7 @@ public class GridContinuousProcessor extends GridProcessorAdapter {
     /**
      * Discovery data item.
      */
-    private static class DiscoveryDataItem implements Externalizable {
+    private static class DiscoveryDataItem implements Externalizable, GridPeerDeployAware {
         /** */
         private static final long serialVersionUID = 0L;
 
@@ -1666,6 +1677,16 @@ public class GridContinuousProcessor extends GridProcessorAdapter {
             this.interval = interval;
         }
 
+        @Override
+        public Class<?> deployClass() {
+            return prjPred.getClass();
+        }
+
+        @Override
+        public ClassLoader classLoader() {
+            return prjPred.getClass().getClassLoader();
+        }
+
         /** {@inheritDoc} */
         @Override public void writeExternal(ObjectOutput out) throws IOException {
             U.writeUuid(out, routineId);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/88e1ff88/modules/core/src/main/java/org/apache/ignite/spi/discovery/DiscoverySpiDataExchange.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/DiscoverySpiDataExchange.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/DiscoverySpiDataExchange.java
index 06f1af8..1f64c87 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/DiscoverySpiDataExchange.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/DiscoverySpiDataExchange.java
@@ -33,7 +33,7 @@ public interface DiscoverySpiDataExchange {
      * @param joiningNodeId ID of new node that joins topology.
      * @return Collection of discovery data objects from different components.
      */
-    public Map<Integer, byte[]> collect(UUID joiningNodeId);
+    public Map<Integer, Object> collect(UUID joiningNodeId);
 
     /**
      * Notifies discovery manager about data received from remote node.
@@ -41,10 +41,8 @@ public interface DiscoverySpiDataExchange {
      * @param joiningNodeId Joining node ID.
      * @param nodeId Remote node ID for which data is provided.
      * @param data Collection of marshalled discovery data objects from different components.
-     * @param clsLdr Class loader to use for discovery data unmarshalling.
      */
     public void onExchange(UUID joiningNodeId,
         UUID nodeId,
-        Map<Integer, byte[]> data,
-        ClassLoader clsLdr);
+        Map<Integer, Object> data);
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/88e1ff88/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpi.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpi.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpi.java
index 6ced987..f613f4a 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpi.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpi.java
@@ -897,10 +897,9 @@ public class TcpClientDiscoverySpi extends TcpDiscoverySpiAdapter implements Tcp
 
                         if (dataMap != null) {
                             for (Map.Entry<UUID, Map<Integer, byte[]>> entry : dataMap.entrySet()) {
-                                exchange.onExchange(newNodeId,
-                                    entry.getKey(),
-                                    entry.getValue(),
-                                    exchangeClassLoader(newNodeId));
+//                                exchange.onExchange(newNodeId,
+//                                    entry.getKey(),
+//                                    entry.getValue());
                             }
                         }
 
@@ -923,8 +922,8 @@ public class TcpClientDiscoverySpi extends TcpDiscoverySpiAdapter implements Tcp
 
                     Map<Integer, byte[]> data = msg.newNodeDiscoveryData();
 
-                    if (data != null)
-                        exchange.onExchange(newNodeId, newNodeId, data, exchangeClassLoader(newNodeId));
+//                    if (data != null)
+//                        exchange.onExchange(newNodeId, newNodeId, data);
                 }
             }
         }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/88e1ff88/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
index ef22291..3fa6fd1 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
@@ -1377,6 +1377,87 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
             log.debug("Discovery SPI has been connected to topology with order: " + locNode.internalOrder());
     }
 
+    /** */
+    private GridConcurrentHashSet<ClassLoader> exchangeLdrs = new GridConcurrentHashSet();
+
+    /**
+     * @param nodeId Node ID>
+     * @return Marshalled exchange data.
+     * @throws IgniteSpiException If failed.
+     */
+    protected Map<Integer, byte[]> collectExchangeData(UUID nodeId) throws IgniteSpiException {
+        boolean p2pEnaled = ignite.configuration().isPeerClassLoadingEnabled();
+
+        Map<Integer, Object> data = exchange.collect(nodeId);
+
+        Map<Integer, byte[]> data0 = U.newHashMap(data.size());
+
+        for (Map.Entry<Integer, Object> entry : data.entrySet()) {
+            try {
+                byte[] bytes = marsh.marshal(entry.getValue());
+
+                data0.put(entry.getKey(), bytes);
+
+                if (p2pEnaled) {
+                    ClassLoader ldr;
+
+                    if (entry.getValue() instanceof GridPeerDeployAware)
+                        ldr = ((GridPeerDeployAware)entry.getValue()).classLoader();
+                    else
+                        ldr = entry.getValue().getClass().getClassLoader();
+
+                    log.info("Add loader: " + entry.getValue() + " " + ldr);
+
+                    if (ldr != null) {
+                        if (exchangeLdrs.add(ldr))
+                            log.info("Added loader: " + ldr);
+                    }
+                }
+            }
+            catch (IgniteCheckedException e) {
+                U.error(log, "Failed to marshal discovery data " +
+                    "[comp=" + entry.getKey() + ", data=" + entry.getValue() + ']', e);
+
+                throw new IgniteSpiException("Failed to marshal discovery data.", e);
+            }
+        }
+
+        return data0;
+    }
+
+    /**
+     * @param joiningNode Joining node.
+     * @param nodeId Remote node ID for which data is provided.
+     * @param data Collection of marshalled discovery data objects from different components.
+     */
+    protected void onExchange(TcpDiscoveryNode joiningNode,
+        UUID nodeId,
+        Map<Integer, byte[]> data) {
+        TcpDiscoveryNode node;
+
+        if (joiningNode.id().equals(nodeId))
+            node = joiningNode;
+        else
+            node = ring.node(nodeId);
+
+        ClassLoader clsLdr = exchangeClassLoader(node);
+
+        Map<Integer, Object> data0 = U.newHashMap(data.size());
+
+        for (Map.Entry<Integer, byte[]> entry : data.entrySet()) {
+            try {
+                Object compData = marsh.unmarshal(entry.getValue(), clsLdr);
+
+                data0.put(entry.getKey(), compData);
+            }
+            catch (IgniteCheckedException e) {
+                U.error(log, "Failed to unmarshal discovery data for component: "  + entry.getKey(), e);
+            }
+        }
+
+        exchange.onExchange(joiningNode.id(), nodeId, data0);
+    }
+
     /**
      * Tries to send join request message to a random node presenting in topology.
      * Address is provided by {@link TcpDiscoveryIpFinder} and message is
@@ -1388,7 +1469,7 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
     @SuppressWarnings({"BusyWait"})
     private boolean sendJoinRequestMessage() throws IgniteSpiException {
         TcpDiscoveryAbstractMessage joinReq = new TcpDiscoveryJoinRequestMessage(locNode,
-            exchange.collect(getLocalNodeId()));
+            collectExchangeData(getLocalNodeId()));
 
         // Time when it has been detected, that addresses from IP finder do not respond.
         long noResStart = 0;
@@ -2198,7 +2279,11 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
     private TcpDiscoveryGetClassResponse processGetClassRequest(TcpDiscoveryGetClassRequest req) {
         assert !F.isEmpty(req.className()) : req;
 
-        InputStream in = getClass().getResourceAsStream(req.className());
+        String rsrc = U.classNameToResourceName(req.className());
+
+        log.info("Get class request: " + req.className() + " " + rsrc);
+
+        InputStream in = locLdr.getResourceAsStream(rsrc);
 
         byte[] clsBytes = null;
         String err = null;
@@ -3591,9 +3676,9 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
                     Map<Integer, byte[]> data = msg.newNodeDiscoveryData();
 
                     if (data != null)
-                        exchange.onExchange(node.id(), node.id(), data, exchangeClassLoader(node.id()));
+                        onExchange(node, node.id(), data);
 
-                    msg.addDiscoveryData(locNodeId, exchange.collect(node.id()));
+                    msg.addDiscoveryData(locNodeId, collectExchangeData(node.id()));
                 }
 
                 if (log.isDebugEnabled())
@@ -3662,12 +3747,8 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
 
                 // Notify outside of synchronized block.
                 if (dataMap != null) {
-                    for (Map.Entry<UUID, Map<Integer, byte[]>> entry : dataMap.entrySet()) {
-                        exchange.onExchange(node.id(),
-                            entry.getKey(),
-                            entry.getValue(),
-                            exchangeClassLoader(node.id()));
-                    }
+                    for (Map.Entry<UUID, Map<Integer, byte[]>> entry : dataMap.entrySet())
+                        onExchange(node, entry.getKey(), entry.getValue());
                 }
             }
 
@@ -5221,30 +5302,109 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
             U.closeQuiet(sock);
         }
     }
+
+    /** */
+    private ConcurrentMap<UUID, DiscoveryDeploymentClassLoader> ldrs = new ConcurrentHashMap<>();
+
+    /** */
+    private LocalDeploymentClassLoader locLdr = new LocalDeploymentClassLoader(null);
+
+    /**
+     *
+     */
+    class LocalDeploymentClassLoader extends ClassLoader {
+        public LocalDeploymentClassLoader(ClassLoader parent) {
+            super(parent);
+        }
+
+        @Override
+        public InputStream getResourceAsStream(String name) {
+            log.info("Local getResourceAsStream: " + name);
+
+            for (ClassLoader ldr : exchangeLdrs) {
+                InputStream  in = ldr.getResourceAsStream(name);
+
+                if (in != null)
+                    return in;
+            }
+
+            return super.getResourceAsStream(name);
+        }
+
+        @Override public Class<?> loadClass(String name) throws ClassNotFoundException {
+            log.info("Local loadClass: " + name);
+
+            for (ClassLoader ldr : exchangeLdrs) {
+                try {
+                    return ldr.loadClass(name);
+                }
+                catch (ClassNotFoundException ignore) {
+                }
+            }
+
+            return super.loadClass(name);
+        }
+    }
+
+    /**
+     * @param nodeId Node ID.
+     * @return Class loader for exchange data unmarshalling.
+     */
+    protected ClassLoader exchangeClassLoader(TcpDiscoveryNode node) {
+        assert ignite != null;
+
+        UUID nodeId = node.id();
+
+        if (!ignite.configuration().isPeerClassLoadingEnabled())
+            return null;
+
+        if (nodeId.equals(getLocalNodeId()))
+            return locLdr;
+
+        DiscoveryDeploymentClassLoader ldr = ldrs.get(nodeId);
+
+        if (ldr == null)
+            ldr = F.addIfAbsent(ldrs, nodeId, new DiscoveryDeploymentClassLoader(node));
+
+        return ldr;
+    }
+
     /**
      *
      */
     private class DiscoveryDeploymentClassLoader extends ClassLoader {
         /** */
-        private final UUID nodeId;
+        private final TcpDiscoveryNode node;
 
         /** */
         private Socket sock;
 
         /**
-         * @param nodeId Node ID.
+         * @param node Node.
          */
-        public DiscoveryDeploymentClassLoader(UUID nodeId) {
-            this.nodeId = nodeId;
+        public DiscoveryDeploymentClassLoader(TcpDiscoveryNode node) {
+            assert !node.id().equals(getLocalNodeId());
+
+            this.node = node;
+        }
+
+        @Override protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
+            // log.info("P2p load class: " + name);
+
+            return super.loadClass(name, resolve);
         }
 
         /** {@inheritDoc} */
         @Override protected Class<?> findClass(String name) throws ClassNotFoundException {
+            log.info("P2p find class: " + name);
+
             TcpDiscoveryGetClassResponse res = requestClass(name);
 
             if (res.error() != null)
                 throw new ClassNotFoundException(res.error());
 
+            log.info("P2p loaded: " + name);
+
             assert res.classBytes() != null;
 
             Class<?> cls = defineClass(name, res.classBytes(), 0, res.classBytes().length);
@@ -5272,16 +5432,45 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
                 return res;
             }
             catch (IOException | IgniteCheckedException e) {
+                e.printStackTrace();
+
                 throw new ClassNotFoundException("Failed to load class: " + name, e);
             }
         }
 
         private Socket connect() {
             if (sock == null) {
-                TcpDiscoveryNode node = ring.node(nodeId);
+                for (InetSocketAddress addr : getNodeAddresses(node, U.sameMacs(locNode, node))) {
+                    sock = connect(addr);
+
+                    if (sock != null)
+                        break;
+                }
+            }
+
+            return sock;
+        }
+
+        private Socket connect(InetSocketAddress addr) {
+            UUID locNodeId  = getLocalNodeId();
+
+            Socket sock = null;
+
+            for (int i = 0; i < reconCnt; i++) {
+                try {
+                    sock = openSocket(addr);
 
-                if (node == null)
-                    return null;
+                    writeToSocket(sock, new TcpDiscoveryHandshakeRequest(locNodeId));
+
+                    TcpDiscoveryHandshakeResponse res = readMessage(sock, null, netTimeout);
+
+                    break;
+                }
+                catch (IOException | IgniteCheckedException e) {
+                    e.printStackTrace();
+
+                    U.closeQuiet(sock);
+                }
             }
 
             return sock;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/88e1ff88/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiAdapter.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiAdapter.java
index 5712d25..9cde198 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiAdapter.java
@@ -725,19 +725,6 @@ abstract class TcpDiscoverySpiAdapter extends IgniteSpiAdapter implements Discov
     }
 
     /**
-     * @param nodeId Node ID.
-     * @return Class loader for exchange data unmarshalling.
-     */
-    protected ClassLoader exchangeClassLoader(UUID nodeId) {
-        assert ignite != null;
-
-        if (!ignite.configuration().isPeerClassLoadingEnabled() || nodeId.equals(getLocalNodeId()))
-            return null;
-
-        return null;
-    }
-
-    /**
      * @param msg Message.
      * @return Whether delivery of the message is ensured.
      */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/88e1ff88/modules/core/src/test/java/org/apache/ignite/internal/processors/continuous/GridEventConsumeSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/continuous/GridEventConsumeSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/continuous/GridEventConsumeSelfTest.java
index a51d1a8..4bd2901 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/continuous/GridEventConsumeSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/continuous/GridEventConsumeSelfTest.java
@@ -763,7 +763,7 @@ public class GridEventConsumeSelfTest extends GridCommonAbstractTest implements
      * @throws Exception If failed.
      */
     // TODO: GG-6730
-    public void _testNodeJoinWithP2P() throws Exception {
+    public void testNodeJoinWithP2P() throws Exception {
         final Collection<UUID> nodeIds = new HashSet<>();
         final AtomicInteger cnt = new AtomicInteger();
         final CountDownLatch latch = new CountDownLatch(GRID_CNT + 1);
@@ -800,8 +800,7 @@ public class GridEventConsumeSelfTest extends GridCommonAbstractTest implements
             assertEquals(GRID_CNT + 1, cnt.get());
         }
         finally {
-            stopGrid("anotherGrid1");
-            stopGrid("anotherGrid2");
+            stopGrid("anotherGrid");
 
             grid(0).events().stopRemoteListen(consumeId);
         }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/88e1ff88/modules/core/src/test/java/org/apache/ignite/spi/discovery/AbstractDiscoverySelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/spi/discovery/AbstractDiscoverySelfTest.java b/modules/core/src/test/java/org/apache/ignite/spi/discovery/AbstractDiscoverySelfTest.java
index 78710fe..91d3514 100644
--- a/modules/core/src/test/java/org/apache/ignite/spi/discovery/AbstractDiscoverySelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/spi/discovery/AbstractDiscoverySelfTest.java
@@ -379,14 +379,13 @@ public abstract class AbstractDiscoverySelfTest<T extends IgniteSpi> extends Gri
                 });
 
                 spi.setDataExchange(new DiscoverySpiDataExchange() {
-                    @Override public Map<Integer, byte[]> collect(UUID nodeId) {
+                    @Override public Map<Integer, Object> collect(UUID nodeId) {
                         return new HashMap<>();
                     }
 
                     @Override public void onExchange(UUID joiningNodeId,
                         UUID nodeId,
-                        Map<Integer, byte[]> data,
-                        ClassLoader clsLdr) {
+                        Map<Integer, Object> data) {
                         // No-op.
                     }
                 });

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/88e1ff88/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiStartStopSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiStartStopSelfTest.java b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiStartStopSelfTest.java
index 6692046..058d908 100644
--- a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiStartStopSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiStartStopSelfTest.java
@@ -44,14 +44,13 @@ public class TcpDiscoverySpiStartStopSelfTest extends GridSpiStartStopAbstractTe
     @GridSpiTestConfig
     public DiscoverySpiDataExchange getDataExchange() {
         return new DiscoverySpiDataExchange() {
-            @Override public Map<Integer, byte[]> collect(UUID nodeId) {
+            @Override public Map<Integer, Object> collect(UUID nodeId) {
                 return null;
             }
 
             @Override public void onExchange(UUID joiningNodeId,
                 UUID nodeId,
-                Map<Integer, byte[]> data,
-                ClassLoader clsLdr) {
+                Map<Integer, Object> data) {
                 // No-op.
             }
         };

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/88e1ff88/modules/core/src/test/java/org/apache/ignite/testframework/junits/spi/GridSpiAbstractTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/junits/spi/GridSpiAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/testframework/junits/spi/GridSpiAbstractTest.java
index 7b83979..82f3d6c 100644
--- a/modules/core/src/test/java/org/apache/ignite/testframework/junits/spi/GridSpiAbstractTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/testframework/junits/spi/GridSpiAbstractTest.java
@@ -215,14 +215,13 @@ public abstract class GridSpiAbstractTest<T extends IgniteSpi> extends GridAbstr
             discoSpi.setMetricsProvider(createMetricsProvider());
 
             discoSpi.setDataExchange(new DiscoverySpiDataExchange() {
-                @Override public Map<Integer, byte[]> collect(UUID nodeId) {
+                @Override public Map<Integer, Object> collect(UUID nodeId) {
                     return new HashMap<>();
                 }
 
                 @Override public void onExchange(UUID joiningNodeId,
                     UUID nodeId,
-                    Map<Integer, byte[]> data,
-                    ClassLoader clsLdr) {
+                    Map<Integer, Object> data) {
                 }
             });
 


[18/31] incubator-ignite git commit: # Last-minute fix to IGFS: we were throwing IOError in some pretty valid cases what led to missed future completion and eventual hang.

Posted by ag...@apache.org.
# Last-minute fix to IGFS: we were throwing IOError in some pretty valid cases what led to missed future completion and eventual hang.


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

Branch: refs/heads/ignite-721
Commit: c3210d8035bca7dccae2b1accacd7e641c4e8cc6
Parents: 26fa0bf
Author: thatcoach <pp...@list.ru>
Authored: Fri Apr 10 20:57:51 2015 +0300
Committer: thatcoach <pp...@list.ru>
Committed: Fri Apr 10 20:57:51 2015 +0300

----------------------------------------------------------------------
 .../ignite/internal/processors/igfs/IgfsInputStreamImpl.java   | 2 +-
 .../ignite/internal/processors/igfs/IgfsOutputStreamImpl.java  | 6 +++---
 2 files changed, 4 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/c3210d80/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsInputStreamImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsInputStreamImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsInputStreamImpl.java
index 30d2cf3..6c35032 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsInputStreamImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsInputStreamImpl.java
@@ -312,7 +312,7 @@ public class IgfsInputStreamImpl extends IgfsInputStreamAdapter {
             }
         }
         catch (IgniteCheckedException e) {
-            throw new IOError(e); // Something unrecoverable.
+            throw new IOException("File to close the file: " + fileInfo.path(), e);
         }
         finally {
             closed = true;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/c3210d80/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsOutputStreamImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsOutputStreamImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsOutputStreamImpl.java
index c5b3e20..298733a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsOutputStreamImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsOutputStreamImpl.java
@@ -262,7 +262,7 @@ class IgfsOutputStreamImpl extends IgfsOutputStreamAdapter {
             exists = meta.exists(fileInfo.id());
         }
         catch (IgniteCheckedException e) {
-            throw new IOError(e); // Something unrecoverable.
+            throw new IOException("File to read file metadata: " + fileInfo.path(), e);
         }
 
         if (!exists) {
@@ -330,7 +330,7 @@ class IgfsOutputStreamImpl extends IgfsOutputStreamAdapter {
                 exists = !deleted && meta.exists(fileInfo.id());
             }
             catch (IgniteCheckedException e) {
-                throw new IOError(e); // Something unrecoverable.
+                throw new IOException("File to read file metadata: " + fileInfo.path(), e);
             }
 
             if (exists) {
@@ -370,7 +370,7 @@ class IgfsOutputStreamImpl extends IgfsOutputStreamAdapter {
                     throw new IOException("File was concurrently deleted: " + path);
                 }
                 catch (IgniteCheckedException e) {
-                    throw new IOError(e); // Something unrecoverable.
+                    throw new IOException("File to read file metadata: " + fileInfo.path(), e);
                 }
 
                 meta.updateParentListingAsync(parentId, fileInfo.id(), fileName, bytes, modificationTime);