You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2014/12/05 15:07:35 UTC
[34/52] [abbrv] incubator-ignite git commit: # Renaming
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryAbstractMessage.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryAbstractMessage.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryAbstractMessage.java
new file mode 100644
index 0000000..dd8807e
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryAbstractMessage.java
@@ -0,0 +1,266 @@
+/* @java.file.header */
+
+/* _________ _____ __________________ _____
+ * __ ____/___________(_)______ /__ ____/______ ____(_)_______
+ * _ / __ __ ___/__ / _ __ / _ / __ _ __ `/__ / __ __ \
+ * / /_/ / _ / _ / / /_/ / / /_/ / / /_/ / _ / _ / / /
+ * \____/ /_/ /_/ \_,__/ \____/ \__,_/ /_/ /_/ /_/
+ */
+
+package org.apache.ignite.spi.discovery.tcp.messages;
+
+import org.apache.ignite.lang.*;
+import org.gridgain.grid.util.tostring.*;
+import org.gridgain.grid.util.typedef.internal.*;
+
+import java.io.*;
+import java.util.*;
+
+/**
+ * Base class to implement discovery messages.
+ */
+public abstract class TcpDiscoveryAbstractMessage implements Externalizable {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /** */
+ protected static final int CLIENT_FLAG_POS = 0;
+
+ /** */
+ protected static final int RESPONDED_FLAG_POS = 1;
+
+ /** */
+ protected static final int CLIENT_RECON_SUCCESS_FLAG_POS = 2;
+
+ /** Sender of the message (transient). */
+ private UUID senderNodeId;
+
+ /** Message ID. */
+ private IgniteUuid id;
+
+ /** Verifier node ID. */
+ private UUID verifierNodeId;
+
+ /** Topology version. */
+ private long topVer;
+
+ /** Destination client node ID. */
+ private UUID destClientNodeId;
+
+ /** Flags. */
+ @GridToStringExclude
+ private int flags;
+
+ /** Pending message index. */
+ private short pendingIdx;
+
+ /**
+ * Default no-arg constructor for {@link Externalizable} interface.
+ */
+ protected TcpDiscoveryAbstractMessage() {
+ // No-op.
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param creatorNodeId Creator node ID.
+ */
+ protected TcpDiscoveryAbstractMessage(UUID creatorNodeId) {
+ id = IgniteUuid.fromUuid(creatorNodeId);
+ }
+
+ /**
+ * Gets creator node.
+ *
+ * @return Creator node ID.
+ */
+ public UUID creatorNodeId() {
+ return id.globalId();
+ }
+
+ /**
+ * Gets message ID.
+ *
+ * @return Message ID.
+ */
+ public IgniteUuid id() {
+ return id;
+ }
+
+ /**
+ * Gets sender node ID.
+ *
+ * @return Sender node ID.
+ */
+ public UUID senderNodeId() {
+ return senderNodeId;
+ }
+
+ /**
+ * Sets sender node ID.
+ *
+ * @param senderNodeId Sender node ID.
+ */
+ public void senderNodeId(UUID senderNodeId) {
+ this.senderNodeId = senderNodeId;
+ }
+
+ /**
+ * Checks whether message is verified.
+ *
+ * @return {@code true} if message was verified.
+ */
+ public boolean verified() {
+ return verifierNodeId != null;
+ }
+
+ /**
+ * Gets verifier node ID.
+ *
+ * @return verifier node ID.
+ */
+ public UUID verifierNodeId() {
+ return verifierNodeId;
+ }
+
+ /**
+ * Verifies the message and stores verifier ID.
+ *
+ * @param verifierNodeId Verifier node ID.
+ */
+ public void verify(UUID verifierNodeId) {
+ this.verifierNodeId = verifierNodeId;
+ }
+
+ /**
+ * Gets topology version.
+ *
+ * @return Topology version.
+ */
+ public long topologyVersion() {
+ return topVer;
+ }
+
+ /**
+ * Sets topology version.
+ *
+ * @param topVer Topology version.
+ */
+ public void topologyVersion(long topVer) {
+ this.topVer = topVer;
+ }
+
+ /**
+ * Get client node flag.
+ *
+ * @return Client node flag.
+ */
+ public boolean client() {
+ return getFlag(CLIENT_FLAG_POS);
+ }
+
+ /**
+ * Sets client node flag.
+ *
+ * @param client Client node flag.
+ */
+ public void client(boolean client) {
+ setFlag(CLIENT_FLAG_POS, client);
+ }
+
+ /**
+ * @return Destination client node ID.
+ */
+ public UUID destinationClientNodeId() {
+ return destClientNodeId;
+ }
+
+ /**
+ * @param destClientNodeId Destination client node ID.
+ */
+ public void destinationClientNodeId(UUID destClientNodeId) {
+ this.destClientNodeId = destClientNodeId;
+ }
+
+ /**
+ * @return Pending message index.
+ */
+ public short pendingIndex() {
+ return pendingIdx;
+ }
+
+ /**
+ * @param pendingIdx Pending message index.
+ */
+ public void pendingIndex(short pendingIdx) {
+ this.pendingIdx = pendingIdx;
+ }
+
+ /**
+ * @param pos Flag position.
+ * @return Flag value.
+ */
+ protected boolean getFlag(int pos) {
+ assert pos >= 0 && pos < 32;
+
+ int mask = 1 << pos;
+
+ return (flags & mask) == mask;
+ }
+
+ /**
+ * @param pos Flag position.
+ * @param val Flag value.
+ */
+ protected void setFlag(int pos, boolean val) {
+ assert pos >= 0 && pos < 32;
+
+ int mask = 1 << pos;
+
+ if (val)
+ flags |= mask;
+ else
+ flags &= ~mask;
+ }
+
+ /** {@inheritDoc} */
+ @Override public void writeExternal(ObjectOutput out) throws IOException {
+ U.writeGridUuid(out, id);
+ U.writeUuid(out, verifierNodeId);
+ out.writeLong(topVer);
+ U.writeUuid(out, destClientNodeId);
+ out.writeInt(flags);
+ out.writeShort(pendingIdx);
+ }
+
+ /** {@inheritDoc} */
+ @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ id = U.readGridUuid(in);
+ verifierNodeId = U.readUuid(in);
+ topVer = in.readLong();
+ destClientNodeId = U.readUuid(in);
+ flags = in.readInt();
+ pendingIdx = in.readShort();
+ }
+
+ /** {@inheritDoc} */
+ @Override public final boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ else if (obj instanceof TcpDiscoveryAbstractMessage)
+ return id.equals(((TcpDiscoveryAbstractMessage)obj).id);
+
+ return false;
+ }
+
+ /** {@inheritDoc} */
+ @Override public final int hashCode() {
+ return id.hashCode();
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(TcpDiscoveryAbstractMessage.class, this, "isClient", getFlag(CLIENT_FLAG_POS));
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryAuthFailedMessage.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryAuthFailedMessage.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryAuthFailedMessage.java
new file mode 100644
index 0000000..1d31d04
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryAuthFailedMessage.java
@@ -0,0 +1,72 @@
+/* @java.file.header */
+
+/* _________ _____ __________________ _____
+ * __ ____/___________(_)______ /__ ____/______ ____(_)_______
+ * _ / __ __ ___/__ / _ __ / _ / __ _ __ `/__ / __ __ \
+ * / /_/ / _ / _ / / /_/ / / /_/ / / /_/ / _ / _ / / /
+ * \____/ /_/ /_/ \_,__/ \____/ \__,_/ /_/ /_/ /_/
+ */
+
+package org.apache.ignite.spi.discovery.tcp.messages;
+
+import org.gridgain.grid.util.typedef.internal.*;
+
+import java.io.*;
+import java.net.*;
+import java.util.*;
+
+/**
+ * Message telling joining node that its authentication failed on coordinator.
+ */
+public class TcpDiscoveryAuthFailedMessage extends TcpDiscoveryAbstractMessage {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /** Coordinator address. */
+ private InetAddress addr;
+
+ /**
+ * Public default no-arg constructor for {@link Externalizable} interface.
+ */
+ public TcpDiscoveryAuthFailedMessage() {
+ // No-op.
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param creatorNodeId Creator node ID.
+ * @param addr Coordinator address.
+ */
+ public TcpDiscoveryAuthFailedMessage(UUID creatorNodeId, InetAddress addr) {
+ super(creatorNodeId);
+
+ this.addr = addr;
+ }
+
+ /**
+ * @return Coordinator address.
+ */
+ public InetAddress address() {
+ return addr;
+ }
+
+ /** {@inheritDoc} */
+ @Override public void writeExternal(ObjectOutput out) throws IOException {
+ super.writeExternal(out);
+
+ U.writeByteArray(out, addr.getAddress());
+ }
+
+ /** {@inheritDoc} */
+ @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ super.readExternal(in);
+
+ addr = InetAddress.getByAddress(U.readByteArray(in));
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(TcpDiscoveryAuthFailedMessage.class, this, "super", super.toString());
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryCheckFailedMessage.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryCheckFailedMessage.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryCheckFailedMessage.java
new file mode 100644
index 0000000..348e7cc
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryCheckFailedMessage.java
@@ -0,0 +1,71 @@
+/* @java.file.header */
+
+/* _________ _____ __________________ _____
+ * __ ____/___________(_)______ /__ ____/______ ____(_)_______
+ * _ / __ __ ___/__ / _ __ / _ / __ _ __ `/__ / __ __ \
+ * / /_/ / _ / _ / / /_/ / / /_/ / / /_/ / _ / _ / / /
+ * \____/ /_/ /_/ \_,__/ \____/ \__,_/ /_/ /_/ /_/
+ */
+
+package org.apache.ignite.spi.discovery.tcp.messages;
+
+import org.gridgain.grid.util.typedef.internal.*;
+
+import java.io.*;
+import java.util.*;
+
+/**
+ * Message telling joining node that it failed coordinator's validation check.
+ */
+public class TcpDiscoveryCheckFailedMessage extends TcpDiscoveryAbstractMessage {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /** Coordinator version. */
+ private String err;
+
+ /**
+ * Public default no-arg constructor for {@link Externalizable} interface.
+ */
+ public TcpDiscoveryCheckFailedMessage() {
+ // No-op.
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param creatorNodeId Creator node ID.
+ * @param err Error message from coordinator.
+ */
+ public TcpDiscoveryCheckFailedMessage(UUID creatorNodeId, String err) {
+ super(creatorNodeId);
+
+ this.err = err;
+ }
+
+ /**
+ * @return Error message from coordinator.
+ */
+ public String error() {
+ return err;
+ }
+
+ /** {@inheritDoc} */
+ @Override public void writeExternal(ObjectOutput out) throws IOException {
+ super.writeExternal(out);
+
+ U.writeString(out, err);
+ }
+
+ /** {@inheritDoc} */
+ @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ super.readExternal(in);
+
+ err = U.readString(in);
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(TcpDiscoveryCheckFailedMessage.class, this, "super", super.toString());
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryClientReconnectMessage.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryClientReconnectMessage.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryClientReconnectMessage.java
new file mode 100644
index 0000000..273afe8
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryClientReconnectMessage.java
@@ -0,0 +1,119 @@
+/* @java.file.header */
+
+/* _________ _____ __________________ _____
+ * __ ____/___________(_)______ /__ ____/______ ____(_)_______
+ * _ / __ __ ___/__ / _ __ / _ / __ _ __ `/__ / __ __ \
+ * / /_/ / _ / _ / / /_/ / / /_/ / / /_/ / _ / _ / / /
+ * \____/ /_/ /_/ \_,__/ \____/ \__,_/ /_/ /_/ /_/
+ */
+
+package org.apache.ignite.spi.discovery.tcp.messages;
+
+import org.apache.ignite.lang.*;
+import org.gridgain.grid.util.tostring.*;
+import org.gridgain.grid.util.typedef.internal.*;
+
+import java.io.*;
+import java.util.*;
+
+/**
+ * Message telling that client node is reconnecting to topology.
+ */
+public class TcpDiscoveryClientReconnectMessage extends TcpDiscoveryAbstractMessage {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /** New router nodeID. */
+ private UUID routerNodeId;
+
+ /** Last message ID. */
+ private IgniteUuid lastMsgId;
+
+ /** Pending messages. */
+ @GridToStringExclude
+ private Collection<TcpDiscoveryAbstractMessage> msgs;
+
+ /**
+ * For {@link Externalizable}.
+ */
+ public TcpDiscoveryClientReconnectMessage() {
+ // No-op.
+ }
+
+ /**
+ * @param creatorNodeId Creator node ID.
+ * @param routerNodeId New router node ID.
+ * @param lastMsgId Last message ID.
+ */
+ public TcpDiscoveryClientReconnectMessage(UUID creatorNodeId, UUID routerNodeId, IgniteUuid lastMsgId) {
+ super(creatorNodeId);
+
+ this.routerNodeId = routerNodeId;
+ this.lastMsgId = lastMsgId;
+ }
+
+ /**
+ * @return New router node ID.
+ */
+ public UUID routerNodeId() {
+ return routerNodeId;
+ }
+
+ /**
+ * @return Last message ID.
+ */
+ public IgniteUuid lastMessageId() {
+ return lastMsgId;
+ }
+
+ /**
+ * @param msgs Pending messages.
+ */
+ public void pendingMessages(Collection<TcpDiscoveryAbstractMessage> msgs) {
+ this.msgs = msgs;
+ }
+
+ /**
+ * @return Pending messages.
+ */
+ public Collection<TcpDiscoveryAbstractMessage> pendingMessages() {
+ return msgs;
+ }
+
+ /**
+ * @param success Success flag.
+ */
+ public void success(boolean success) {
+ setFlag(CLIENT_RECON_SUCCESS_FLAG_POS, success);
+ }
+
+ /**
+ * @return Success flag.
+ */
+ public boolean success() {
+ return getFlag(CLIENT_RECON_SUCCESS_FLAG_POS);
+ }
+
+ /** {@inheritDoc} */
+ @Override public void writeExternal(ObjectOutput out) throws IOException {
+ super.writeExternal(out);
+
+ U.writeUuid(out, routerNodeId);
+ U.writeGridUuid(out, lastMsgId);
+ U.writeCollection(out, msgs);
+ }
+
+ /** {@inheritDoc} */
+ @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ super.readExternal(in);
+
+ routerNodeId = U.readUuid(in);
+ lastMsgId = U.readGridUuid(in);
+ msgs = U.readCollection(in);
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(TcpDiscoveryClientReconnectMessage.class, this, "super", super.toString());
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryDiscardMessage.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryDiscardMessage.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryDiscardMessage.java
new file mode 100644
index 0000000..0d1e4dd
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryDiscardMessage.java
@@ -0,0 +1,75 @@
+/* @java.file.header */
+
+/* _________ _____ __________________ _____
+ * __ ____/___________(_)______ /__ ____/______ ____(_)_______
+ * _ / __ __ ___/__ / _ __ / _ / __ _ __ `/__ / __ __ \
+ * / /_/ / _ / _ / / /_/ / / /_/ / / /_/ / _ / _ / / /
+ * \____/ /_/ /_/ \_,__/ \____/ \__,_/ /_/ /_/ /_/
+ */
+
+package org.apache.ignite.spi.discovery.tcp.messages;
+
+import org.apache.ignite.lang.*;
+import org.gridgain.grid.util.typedef.internal.*;
+
+import java.io.*;
+import java.util.*;
+
+/**
+ * Message sent by coordinator when some operation handling is over. All receiving
+ * nodes should discard this and all preceding messages in local buffers.
+ */
+public class TcpDiscoveryDiscardMessage extends TcpDiscoveryAbstractMessage {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /** ID of the message to discard (this and all preceding). */
+ private IgniteUuid msgId;
+
+ /**
+ * Public default no-arg constructor for {@link Externalizable} interface.
+ */
+ public TcpDiscoveryDiscardMessage() {
+ // No-op.
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param creatorNodeId Creator node ID.
+ * @param msgId Message ID.
+ */
+ public TcpDiscoveryDiscardMessage(UUID creatorNodeId, IgniteUuid msgId) {
+ super(creatorNodeId);
+
+ this.msgId = msgId;
+ }
+
+ /**
+ * Gets message ID to discard (this and all preceding).
+ *
+ * @return Message ID.
+ */
+ public IgniteUuid msgId() {
+ return msgId;
+ }
+
+ /** {@inheritDoc} */
+ @Override public void writeExternal(ObjectOutput out) throws IOException {
+ super.writeExternal(out);
+
+ U.writeGridUuid(out, msgId);
+ }
+
+ /** {@inheritDoc} */
+ @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ super.readExternal(in);
+
+ msgId = U.readGridUuid(in);
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(TcpDiscoveryDiscardMessage.class, this, "super", super.toString());
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryDuplicateIdMessage.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryDuplicateIdMessage.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryDuplicateIdMessage.java
new file mode 100644
index 0000000..01fe2ee
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryDuplicateIdMessage.java
@@ -0,0 +1,75 @@
+/* @java.file.header */
+
+/* _________ _____ __________________ _____
+ * __ ____/___________(_)______ /__ ____/______ ____(_)_______
+ * _ / __ __ ___/__ / _ __ / _ / __ _ __ `/__ / __ __ \
+ * / /_/ / _ / _ / / /_/ / / /_/ / / /_/ / _ / _ / / /
+ * \____/ /_/ /_/ \_,__/ \____/ \__,_/ /_/ /_/ /_/
+ */
+
+package org.apache.ignite.spi.discovery.tcp.messages;
+
+import org.apache.ignite.spi.discovery.tcp.internal.*;
+import org.gridgain.grid.util.typedef.internal.*;
+
+import java.io.*;
+import java.util.*;
+
+/**
+ * Message telling joining node that new topology already contain
+ * different node with same ID.
+ */
+public class TcpDiscoveryDuplicateIdMessage extends TcpDiscoveryAbstractMessage {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /** Node with duplicate ID. */
+ private TcpDiscoveryNode node;
+
+ /**
+ * Public default no-arg constructor for {@link Externalizable} interface.
+ */
+ public TcpDiscoveryDuplicateIdMessage() {
+ // No-op.
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param creatorNodeId Creator node ID.
+ * @param node Node with same ID.
+ */
+ public TcpDiscoveryDuplicateIdMessage(UUID creatorNodeId, TcpDiscoveryNode node) {
+ super(creatorNodeId);
+
+ assert node != null;
+
+ this.node = node;
+ }
+
+ /**
+ * @return Node with duplicate ID.
+ */
+ public TcpDiscoveryNode node() {
+ return node;
+ }
+
+ /** {@inheritDoc} */
+ @Override public void writeExternal(ObjectOutput out) throws IOException {
+ super.writeExternal(out);
+
+ out.writeObject(node);
+ }
+
+ /** {@inheritDoc} */
+ @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ super.readExternal(in);
+
+ node = (TcpDiscoveryNode)in.readObject();
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(TcpDiscoveryDuplicateIdMessage.class, this, "super", super.toString());
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryEnsureDelivery.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryEnsureDelivery.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryEnsureDelivery.java
new file mode 100644
index 0000000..bee04a1
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryEnsureDelivery.java
@@ -0,0 +1,23 @@
+/* @java.file.header */
+
+/* _________ _____ __________________ _____
+ * __ ____/___________(_)______ /__ ____/______ ____(_)_______
+ * _ / __ __ ___/__ / _ __ / _ / __ _ __ `/__ / __ __ \
+ * / /_/ / _ / _ / / /_/ / / /_/ / / /_/ / _ / _ / / /
+ * \____/ /_/ /_/ \_,__/ \____/ \__,_/ /_/ /_/ /_/
+ */
+
+package org.apache.ignite.spi.discovery.tcp.messages;
+
+import java.lang.annotation.*;
+
+/**
+ * Message classes with this annotation attached are processed in a special way to
+ * ensure messages delivery.
+ */
+@Documented
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.TYPE)
+public @interface TcpDiscoveryEnsureDelivery {
+ // No-op.
+}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryHandshakeRequest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryHandshakeRequest.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryHandshakeRequest.java
new file mode 100644
index 0000000..7a35823
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryHandshakeRequest.java
@@ -0,0 +1,44 @@
+/* @java.file.header */
+
+/* _________ _____ __________________ _____
+ * __ ____/___________(_)______ /__ ____/______ ____(_)_______
+ * _ / __ __ ___/__ / _ __ / _ / __ _ __ `/__ / __ __ \
+ * / /_/ / _ / _ / / /_/ / / /_/ / / /_/ / _ / _ / / /
+ * \____/ /_/ /_/ \_,__/ \____/ \__,_/ /_/ /_/ /_/
+ */
+
+package org.apache.ignite.spi.discovery.tcp.messages;
+
+import org.gridgain.grid.util.typedef.internal.*;
+
+import java.io.*;
+import java.util.*;
+
+/**
+ * Handshake request.
+ */
+public class TcpDiscoveryHandshakeRequest extends TcpDiscoveryAbstractMessage {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /**
+ * Public default no-arg constructor for {@link Externalizable} interface.
+ */
+ public TcpDiscoveryHandshakeRequest() {
+ // No-op.
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param creatorNodeId Creator node ID.
+ */
+ public TcpDiscoveryHandshakeRequest(UUID creatorNodeId) {
+ super(creatorNodeId);
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(TcpDiscoveryHandshakeRequest.class, this, "super", super.toString());
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryHandshakeResponse.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryHandshakeResponse.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryHandshakeResponse.java
new file mode 100644
index 0000000..6c421c6
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryHandshakeResponse.java
@@ -0,0 +1,82 @@
+/* @java.file.header */
+
+/* _________ _____ __________________ _____
+ * __ ____/___________(_)______ /__ ____/______ ____(_)_______
+ * _ / __ __ ___/__ / _ __ / _ / __ _ __ `/__ / __ __ \
+ * / /_/ / _ / _ / / /_/ / / /_/ / / /_/ / _ / _ / / /
+ * \____/ /_/ /_/ \_,__/ \____/ \__,_/ /_/ /_/ /_/
+ */
+
+package org.apache.ignite.spi.discovery.tcp.messages;
+
+import org.gridgain.grid.util.typedef.internal.*;
+
+import java.io.*;
+import java.util.*;
+
+/**
+ * Handshake response.
+ */
+public class TcpDiscoveryHandshakeResponse extends TcpDiscoveryAbstractMessage {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /** */
+ private long order;
+
+ /**
+ * Public default no-arg constructor for {@link Externalizable} interface.
+ */
+ public TcpDiscoveryHandshakeResponse() {
+ // No-op.
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param creatorNodeId Creator node ID.
+ * @param locNodeOrder Local node order.
+ */
+ public TcpDiscoveryHandshakeResponse(UUID creatorNodeId, long locNodeOrder) {
+ super(creatorNodeId);
+
+ order = locNodeOrder;
+ }
+
+ /**
+ * Gets order of the node sent the response.
+ *
+ * @return Order of the node sent the response.
+ */
+ public long order() {
+ return order;
+ }
+
+ /**
+ * Sets order of the node sent the response.
+ *
+ * @param order Order of the node sent the response.
+ */
+ public void order(long order) {
+ this.order = order;
+ }
+
+ /** {@inheritDoc} */
+ @Override public void writeExternal(ObjectOutput out) throws IOException {
+ super.writeExternal(out);
+
+ out.writeLong(order);
+ }
+
+ /** {@inheritDoc} */
+ @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ super.readExternal(in);
+
+ order = in.readLong();
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(TcpDiscoveryHandshakeResponse.class, this, "super", super.toString());
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryHeartbeatMessage.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryHeartbeatMessage.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryHeartbeatMessage.java
new file mode 100644
index 0000000..d815f79
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryHeartbeatMessage.java
@@ -0,0 +1,308 @@
+/* @java.file.header */
+
+/* _________ _____ __________________ _____
+ * __ ____/___________(_)______ /__ ____/______ ____(_)_______
+ * _ / __ __ ___/__ / _ __ / _ / __ _ __ `/__ / __ __ \
+ * / /_/ / _ / _ / / /_/ / / /_/ / / /_/ / _ / _ / / /
+ * \____/ /_/ /_/ \_,__/ \____/ \__,_/ /_/ /_/ /_/
+ */
+
+package org.apache.ignite.spi.discovery.tcp.messages;
+
+import org.apache.ignite.cluster.*;
+import org.apache.ignite.spi.discovery.*;
+import org.gridgain.grid.util.tostring.*;
+import org.gridgain.grid.util.typedef.*;
+import org.gridgain.grid.util.typedef.internal.*;
+
+import java.io.*;
+import java.util.*;
+
+import static org.apache.ignite.spi.discovery.DiscoveryMetricsHelper.*;
+
+/**
+ * Heartbeat message.
+ * <p>
+ * It is sent by coordinator node across the ring once a configured period.
+ * Message makes two passes:
+ * <ol>
+ * <li>During first pass, all nodes add their metrics to the message and
+ * update local metrics with metrics currently present in the message.</li>
+ * <li>During second pass, all nodes update all metrics present in the message
+ * and remove their own metrics from the message.</li>
+ * </ol>
+ * When message reaches coordinator second time it is discarded (it finishes the
+ * second pass).
+ */
+@TcpDiscoveryRedirectToClient
+public class TcpDiscoveryHeartbeatMessage extends TcpDiscoveryAbstractMessage {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /** Map to store nodes metrics. */
+ @GridToStringExclude
+ private Map<UUID, MetricsSet> metrics;
+
+ /** Client node IDs. */
+ private Collection<UUID> clientNodeIds;
+
+ /**
+ * Public default no-arg constructor for {@link Externalizable} interface.
+ */
+ public TcpDiscoveryHeartbeatMessage() {
+ // No-op.
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param creatorNodeId Creator node.
+ */
+ public TcpDiscoveryHeartbeatMessage(UUID creatorNodeId) {
+ super(creatorNodeId);
+
+ metrics = U.newHashMap(1);
+ clientNodeIds = new HashSet<>();
+ }
+
+ /**
+ * Sets metrics for particular node.
+ *
+ * @param nodeId Node ID.
+ * @param metrics Node metrics.
+ */
+ public void setMetrics(UUID nodeId, ClusterNodeMetrics metrics) {
+ assert nodeId != null;
+ assert metrics != null;
+ assert !this.metrics.containsKey(nodeId);
+
+ this.metrics.put(nodeId, new MetricsSet(metrics));
+ }
+
+ /**
+ * Sets metrics for a client node.
+ *
+ * @param nodeId Server node ID.
+ * @param clientNodeId Client node ID.
+ * @param metrics Node metrics.
+ */
+ public void setClientMetrics(UUID nodeId, UUID clientNodeId, ClusterNodeMetrics metrics) {
+ assert nodeId != null;
+ assert clientNodeId != null;
+ assert metrics != null;
+ assert this.metrics.containsKey(nodeId);
+
+ this.metrics.get(nodeId).addClientMetrics(clientNodeId, metrics);
+ }
+
+ /**
+ * Removes metrics for particular node from the message.
+ *
+ * @param nodeId Node ID.
+ */
+ public void removeMetrics(UUID nodeId) {
+ assert nodeId != null;
+
+ metrics.remove(nodeId);
+ }
+
+ /**
+ * Gets metrics map.
+ *
+ * @return Metrics map.
+ */
+ public Map<UUID, MetricsSet> metrics() {
+ return metrics;
+ }
+
+ /**
+ * @return {@code True} if this message contains metrics.
+ */
+ public boolean hasMetrics() {
+ return !metrics.isEmpty();
+ }
+
+ /**
+ * @return {@code True} if this message contains metrics.
+ */
+ public boolean hasMetrics(UUID nodeId) {
+ assert nodeId != null;
+
+ return metrics.get(nodeId) != null;
+ }
+
+ /**
+ * Gets client node IDs for particular node.
+ *
+ * @return Client node IDs.
+ */
+ public Collection<UUID> clientNodeIds() {
+ return clientNodeIds;
+ }
+
+ /**
+ * Adds client node ID.
+ *
+ * @param clientNodeId Client node ID.
+ */
+ public void addClientNodeId(UUID clientNodeId) {
+ clientNodeIds.add(clientNodeId);
+ }
+
+ /** {@inheritDoc} */
+ @Override public void writeExternal(ObjectOutput out) throws IOException {
+ super.writeExternal(out);
+
+ out.writeInt(metrics.size());
+
+ if (!metrics.isEmpty()) {
+ for (Map.Entry<UUID, MetricsSet> e : metrics.entrySet()) {
+ U.writeUuid(out, e.getKey());
+ out.writeObject(e.getValue());
+ }
+ }
+
+ U.writeCollection(out, clientNodeIds);
+ }
+
+ /** {@inheritDoc} */
+ @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ super.readExternal(in);
+
+ int metricsSize = in.readInt();
+
+ metrics = U.newHashMap(metricsSize);
+
+ for (int i = 0; i < metricsSize; i++)
+ metrics.put(U.readUuid(in), (MetricsSet)in.readObject());
+
+ clientNodeIds = U.readCollection(in);
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(TcpDiscoveryHeartbeatMessage.class, this, "super", super.toString());
+ }
+
+ /**
+ * @param metrics Metrics.
+ * @return Serialized metrics.
+ */
+ private static byte[] serializeMetrics(ClusterNodeMetrics metrics) {
+ assert metrics != null;
+
+ byte[] buf = new byte[DiscoveryMetricsHelper.METRICS_SIZE];
+
+ serialize(buf, 0, metrics);
+
+ return buf;
+ }
+
+ /**
+ * @param nodeId Node ID.
+ * @param metrics Metrics.
+ * @return Serialized metrics.
+ */
+ private static byte[] serializeMetrics(UUID nodeId, ClusterNodeMetrics metrics) {
+ assert nodeId != null;
+ assert metrics != null;
+
+ byte[] buf = new byte[16 + DiscoveryMetricsHelper.METRICS_SIZE];
+
+ U.longToBytes(nodeId.getMostSignificantBits(), buf, 0);
+ U.longToBytes(nodeId.getLeastSignificantBits(), buf, 8);
+
+ serialize(buf, 16, metrics);
+
+ return buf;
+ }
+
+ /**
+ */
+ @SuppressWarnings("PublicInnerClass")
+ public static class MetricsSet implements Externalizable {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /** Metrics. */
+ private byte[] metrics;
+
+ /** Client metrics. */
+ private Collection<byte[]> clientMetrics;
+
+ /**
+ */
+ public MetricsSet() {
+ // No-op.
+ }
+
+ /**
+ * @param metrics Metrics.
+ */
+ public MetricsSet(ClusterNodeMetrics metrics) {
+ assert metrics != null;
+
+ this.metrics = serializeMetrics(metrics);
+ }
+
+ /**
+ * @return Deserialized metrics.
+ */
+ public ClusterNodeMetrics metrics() {
+ return deserialize(metrics, 0);
+ }
+
+ /**
+ * @return Client metrics.
+ */
+ public Collection<T2<UUID, ClusterNodeMetrics>> clientMetrics() {
+ return F.viewReadOnly(clientMetrics, new C1<byte[], T2<UUID, ClusterNodeMetrics>>() {
+ @Override public T2<UUID, ClusterNodeMetrics> apply(byte[] bytes) {
+ UUID nodeId = new UUID(U.bytesToLong(bytes, 0), U.bytesToLong(bytes, 8));
+
+ return new T2<>(nodeId, deserialize(bytes, 16));
+ }
+ });
+ }
+
+ /**
+ * @param nodeId Client node ID.
+ * @param metrics Client metrics.
+ */
+ private void addClientMetrics(UUID nodeId, ClusterNodeMetrics metrics) {
+ assert nodeId != null;
+ assert metrics != null;
+
+ if (clientMetrics == null)
+ clientMetrics = new ArrayList<>();
+
+ clientMetrics.add(serializeMetrics(nodeId, metrics));
+ }
+
+ /** {@inheritDoc} */
+ @Override public void writeExternal(ObjectOutput out) throws IOException {
+ U.writeByteArray(out, metrics);
+
+ out.writeInt(clientMetrics != null ? clientMetrics.size() : -1);
+
+ if (clientMetrics != null) {
+ for (byte[] arr : clientMetrics)
+ U.writeByteArray(out, arr);
+ }
+ }
+
+ /** {@inheritDoc} */
+ @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ metrics = U.readByteArray(in);
+
+ int clientMetricsSize = in.readInt();
+
+ if (clientMetricsSize >= 0) {
+ clientMetrics = new ArrayList<>(clientMetricsSize);
+
+ for (int i = 0; i < clientMetricsSize; i++)
+ clientMetrics.add(U.readByteArray(in));
+ }
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/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
new file mode 100644
index 0000000..0a6bc0a
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryJoinRequestMessage.java
@@ -0,0 +1,102 @@
+/* @java.file.header */
+
+/* _________ _____ __________________ _____
+ * __ ____/___________(_)______ /__ ____/______ ____(_)_______
+ * _ / __ __ ___/__ / _ __ / _ / __ _ __ `/__ / __ __ \
+ * / /_/ / _ / _ / / /_/ / / /_/ / / /_/ / _ / _ / / /
+ * \____/ /_/ /_/ \_,__/ \____/ \__,_/ /_/ /_/ /_/
+ */
+
+package org.apache.ignite.spi.discovery.tcp.messages;
+
+import org.apache.ignite.spi.discovery.tcp.internal.*;
+import org.gridgain.grid.util.typedef.internal.*;
+
+import java.io.*;
+import java.util.*;
+
+/**
+ * Initial message sent by a node that wants to enter topology.
+ * Sent to random node during SPI start. Then forwarded directly to coordinator.
+ */
+public class TcpDiscoveryJoinRequestMessage extends TcpDiscoveryAbstractMessage {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /** New node that wants to join the topology. */
+ private TcpDiscoveryNode node;
+
+ /** Discovery data. */
+ private List<Object> discoData;
+
+ /**
+ * Public default no-arg constructor for {@link Externalizable} interface.
+ */
+ public TcpDiscoveryJoinRequestMessage() {
+ // No-op.
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param node New node that wants to join.
+ * @param discoData Discovery data.
+ */
+ public TcpDiscoveryJoinRequestMessage(TcpDiscoveryNode node, List<Object> discoData) {
+ super(node.id());
+
+ this.node = node;
+ this.discoData = discoData;
+ }
+
+ /**
+ * Gets new node that wants to join the topology.
+ *
+ * @return Node that wants to join the topology.
+ */
+ public TcpDiscoveryNode node() {
+ return node;
+ }
+
+ /**
+ * @return Discovery data.
+ */
+ public List<Object> discoveryData() {
+ return discoData;
+ }
+
+ /**
+ * @return {@code true} flag.
+ */
+ public boolean responded() {
+ return getFlag(RESPONDED_FLAG_POS);
+ }
+
+ /**
+ * @param responded Responded flag.
+ */
+ public void responded(boolean responded) {
+ setFlag(RESPONDED_FLAG_POS, responded);
+ }
+
+ /** {@inheritDoc} */
+ @Override public void writeExternal(ObjectOutput out) throws IOException {
+ super.writeExternal(out);
+
+ out.writeObject(node);
+ U.writeCollection(out, discoData);
+ }
+
+ /** {@inheritDoc} */
+ @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ super.readExternal(in);
+
+ node = (TcpDiscoveryNode)in.readObject();
+ discoData = U.readList(in);
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(TcpDiscoveryJoinRequestMessage.class, this, "super", super.toString());
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryLoopbackProblemMessage.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryLoopbackProblemMessage.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryLoopbackProblemMessage.java
new file mode 100644
index 0000000..cc712c5
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryLoopbackProblemMessage.java
@@ -0,0 +1,87 @@
+/* @java.file.header */
+
+/* _________ _____ __________________ _____
+ * __ ____/___________(_)______ /__ ____/______ ____(_)_______
+ * _ / __ __ ___/__ / _ __ / _ / __ _ __ `/__ / __ __ \
+ * / /_/ / _ / _ / / /_/ / / /_/ / / /_/ / _ / _ / / /
+ * \____/ /_/ /_/ \_,__/ \____/ \__,_/ /_/ /_/ /_/
+ */
+
+package org.apache.ignite.spi.discovery.tcp.messages;
+
+import org.gridgain.grid.util.typedef.internal.*;
+
+import java.io.*;
+import java.util.*;
+
+/**
+ * Message telling joining node that it has loopback problem (misconfiguration).
+ * This means that remote node is configured to use loopback address, but joining node is not, or vise versa.
+ */
+public class TcpDiscoveryLoopbackProblemMessage extends TcpDiscoveryAbstractMessage {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /** Remote node addresses. */
+ private Collection<String> addrs;
+
+ /** Remote node host names. */
+ private Collection<String> hostNames;
+
+ /**
+ * Public default no-arg constructor for {@link Externalizable} interface.
+ */
+ public TcpDiscoveryLoopbackProblemMessage() {
+ // No-op.
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param creatorNodeId Creator node ID.
+ * @param addrs Remote node addresses.
+ * @param hostNames Remote node host names.
+ */
+ public TcpDiscoveryLoopbackProblemMessage(UUID creatorNodeId, Collection<String> addrs,
+ Collection<String> hostNames) {
+ super(creatorNodeId);
+
+ this.addrs = addrs;
+ this.hostNames = hostNames;
+ }
+
+ /**
+ * @return Remote node addresses.
+ */
+ public Collection<String> addresses() {
+ return addrs;
+ }
+
+ /**
+ * @return Remote node host names.
+ */
+ public Collection<String> hostNames() {
+ return hostNames;
+ }
+
+ /** {@inheritDoc} */
+ @Override public void writeExternal(ObjectOutput out) throws IOException {
+ super.writeExternal(out);
+
+ U.writeCollection(out, addrs);
+ U.writeCollection(out, hostNames);
+ }
+
+ /** {@inheritDoc} */
+ @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ super.readExternal(in);
+
+ addrs = U.readCollection(in);
+ hostNames = U.readCollection(in);
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(TcpDiscoveryLoopbackProblemMessage.class, this, "super", super.toString());
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryNodeAddFinishedMessage.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryNodeAddFinishedMessage.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryNodeAddFinishedMessage.java
new file mode 100644
index 0000000..145b53f
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryNodeAddFinishedMessage.java
@@ -0,0 +1,75 @@
+/* @java.file.header */
+
+/* _________ _____ __________________ _____
+ * __ ____/___________(_)______ /__ ____/______ ____(_)_______
+ * _ / __ __ ___/__ / _ __ / _ / __ _ __ `/__ / __ __ \
+ * / /_/ / _ / _ / / /_/ / / /_/ / / /_/ / _ / _ / / /
+ * \____/ /_/ /_/ \_,__/ \____/ \__,_/ /_/ /_/ /_/
+ */
+
+package org.apache.ignite.spi.discovery.tcp.messages;
+
+import org.gridgain.grid.util.typedef.internal.*;
+
+import java.io.*;
+import java.util.*;
+
+/**
+ * Sent by coordinator across the ring to finish node add process.
+ */
+@TcpDiscoveryEnsureDelivery
+@TcpDiscoveryRedirectToClient
+public class TcpDiscoveryNodeAddFinishedMessage extends TcpDiscoveryAbstractMessage {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /** Added node ID. */
+ private UUID nodeId;
+
+ /**
+ * Public default no-arg constructor for {@link Externalizable} interface.
+ */
+ public TcpDiscoveryNodeAddFinishedMessage() {
+ // No-op.
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param creatorNodeId ID of the creator node (coordinator).
+ * @param nodeId Added node ID.
+ */
+ public TcpDiscoveryNodeAddFinishedMessage(UUID creatorNodeId, UUID nodeId) {
+ super(creatorNodeId);
+
+ this.nodeId = nodeId;
+ }
+
+ /**
+ * Gets ID of the node added.
+ *
+ * @return ID of the node added.
+ */
+ public UUID nodeId() {
+ return nodeId;
+ }
+
+ /** {@inheritDoc} */
+ @Override public void writeExternal(ObjectOutput out) throws IOException {
+ super.writeExternal(out);
+
+ U.writeUuid(out, nodeId);
+ }
+
+ /** {@inheritDoc} */
+ @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ super.readExternal(in);
+
+ nodeId = U.readUuid(in);
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(TcpDiscoveryNodeAddFinishedMessage.class, this, "super", super.toString());
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/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
new file mode 100644
index 0000000..2c02363
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryNodeAddedMessage.java
@@ -0,0 +1,246 @@
+/* @java.file.header */
+
+/* _________ _____ __________________ _____
+ * __ ____/___________(_)______ /__ ____/______ ____(_)_______
+ * _ / __ __ ___/__ / _ __ / _ / __ _ __ `/__ / __ __ \
+ * / /_/ / _ / _ / / /_/ / / /_/ / / /_/ / _ / _ / / /
+ * \____/ /_/ /_/ \_,__/ \____/ \__,_/ /_/ /_/ /_/
+ */
+
+package org.apache.ignite.spi.discovery.tcp.messages;
+
+import org.apache.ignite.cluster.*;
+import org.apache.ignite.lang.*;
+import org.apache.ignite.spi.discovery.tcp.internal.*;
+import org.gridgain.grid.util.typedef.internal.*;
+import org.gridgain.grid.util.tostring.*;
+import org.jetbrains.annotations.*;
+
+import java.io.*;
+import java.util.*;
+
+/**
+ * Message telling nodes that new node should be added to topology.
+ * When newly added node receives the message it connects to its next and finishes
+ * join process.
+ */
+@TcpDiscoveryEnsureDelivery
+@TcpDiscoveryRedirectToClient
+public class TcpDiscoveryNodeAddedMessage extends TcpDiscoveryAbstractMessage {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /** Added node. */
+ private TcpDiscoveryNode node;
+
+ /** Pending messages from previous node. */
+ private Collection<TcpDiscoveryAbstractMessage> msgs;
+
+ /** Discarded message ID. */
+ private IgniteUuid discardMsgId;
+
+ /** Current topology. Initialized by coordinator. */
+ @GridToStringInclude
+ private Collection<TcpDiscoveryNode> top;
+
+ /** Topology snapshots history. */
+ private Map<Long, Collection<ClusterNode>> topHist;
+
+ /** Discovery data from new node. */
+ private List<Object> newNodeDiscoData;
+
+ /** Discovery data from old nodes. */
+ private Collection<List<Object>> oldNodesDiscoData;
+
+ /** Start time of the first grid node. */
+ private long gridStartTime;
+
+ /**
+ * Public default no-arg constructor for {@link Externalizable} interface.
+ */
+ public TcpDiscoveryNodeAddedMessage() {
+ // No-op.
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param creatorNodeId Creator node ID.
+ * @param node Node to add to topology.
+ * @param newNodeDiscoData New Node discovery data.
+ * @param gridStartTime Start time of the first grid node.
+ */
+ public TcpDiscoveryNodeAddedMessage(UUID creatorNodeId, TcpDiscoveryNode node,
+ List<Object> newNodeDiscoData, long gridStartTime) {
+ super(creatorNodeId);
+
+ assert node != null;
+ assert gridStartTime > 0;
+
+ this.node = node;
+ this.newNodeDiscoData = newNodeDiscoData;
+ this.gridStartTime = gridStartTime;
+
+ oldNodesDiscoData = new LinkedList<>();
+ }
+
+ /**
+ * Gets newly added node.
+ *
+ * @return New node.
+ */
+ public TcpDiscoveryNode node() {
+ return node;
+ }
+
+ /**
+ * Gets pending messages sent to new node by its previous.
+ *
+ * @return Pending messages from previous node.
+ */
+ @Nullable public Collection<TcpDiscoveryAbstractMessage> messages() {
+ return msgs;
+ }
+
+ /**
+ * Gets discarded message ID.
+ *
+ * @return Discarded message ID.
+ */
+ @Nullable public IgniteUuid discardedMessageId() {
+ return discardMsgId;
+ }
+
+ /**
+ * Sets pending messages to send to new node.
+ *
+ * @param msgs Pending messages to send to new node.
+ * @param discardMsgId Discarded message ID.
+ */
+ public void messages(@Nullable Collection<TcpDiscoveryAbstractMessage> msgs, @Nullable IgniteUuid discardMsgId) {
+ this.msgs = msgs;
+ this.discardMsgId = discardMsgId;
+ }
+
+ /**
+ * Gets topology.
+ *
+ * @return Current topology.
+ */
+ @Nullable public Collection<TcpDiscoveryNode> topology() {
+ return top;
+ }
+
+ /**
+ * Sets topology.
+ *
+ * @param top Current topology.
+ */
+ public void topology(@Nullable Collection<TcpDiscoveryNode> top) {
+ this.top = top;
+ }
+
+ /**
+ * Gets topology snapshots history.
+ *
+ * @return Map with topology snapshots history.
+ */
+ @Nullable public Map<Long, Collection<ClusterNode>> topologyHistory() {
+ return topHist;
+ }
+
+ /**
+ * Sets topology snapshots history.
+ *
+ * @param topHist Map with topology snapshots history.
+ */
+ public void topologyHistory(@Nullable Map<Long, Collection<ClusterNode>> topHist) {
+ this.topHist = topHist;
+ }
+
+ /**
+ * @return Discovery data from new node.
+ */
+ public List<Object> newNodeDiscoveryData() {
+ return newNodeDiscoData;
+ }
+
+ /**
+ * @return Discovery data from old nodes.
+ */
+ public Collection<List<Object>> oldNodesDiscoveryData() {
+ return oldNodesDiscoData;
+ }
+
+ /**
+ * @param discoData Discovery data to add.
+ */
+ public void addDiscoveryData(List<Object> 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)
+ oldNodesDiscoData.add(discoData);
+ }
+
+ /**
+ * Clears discovery data to minimize message size.
+ */
+ public void clearDiscoveryData() {
+ newNodeDiscoData = null;
+ oldNodesDiscoData = null;
+ }
+
+ /**
+ * @return First grid node start time.
+ */
+ public long gridStartTime() {
+ return gridStartTime;
+ }
+
+ /** {@inheritDoc} */
+ @Override public void writeExternal(ObjectOutput out) throws IOException {
+ super.writeExternal(out);
+
+ out.writeObject(node);
+ U.writeCollection(out, msgs);
+ U.writeGridUuid(out, discardMsgId);
+ U.writeCollection(out, top);
+ U.writeMap(out, topHist);
+ out.writeLong(gridStartTime);
+ U.writeCollection(out, newNodeDiscoData);
+
+ out.writeInt(oldNodesDiscoData != null ? oldNodesDiscoData.size() : -1);
+
+ if (oldNodesDiscoData != null) {
+ for (List<Object> list : oldNodesDiscoData)
+ U.writeCollection(out, list);
+ }
+ }
+
+ /** {@inheritDoc} */
+ @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ super.readExternal(in);
+
+ node = (TcpDiscoveryNode)in.readObject();
+ msgs = U.readCollection(in);
+ discardMsgId = U.readGridUuid(in);
+ top = U.readCollection(in);
+ topHist = U.readTreeMap(in);
+ gridStartTime = in.readLong();
+ newNodeDiscoData = U.readList(in);
+
+ int oldNodesDiscoDataSize = in.readInt();
+
+ if (oldNodesDiscoDataSize >= 0) {
+ oldNodesDiscoData = new ArrayList<>(oldNodesDiscoDataSize);
+
+ for (int i = 0; i < oldNodesDiscoDataSize; i++)
+ oldNodesDiscoData.add(U.readList(in));
+ }
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(TcpDiscoveryNodeAddedMessage.class, this, "super", super.toString());
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryNodeFailedMessage.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryNodeFailedMessage.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryNodeFailedMessage.java
new file mode 100644
index 0000000..cd44670
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryNodeFailedMessage.java
@@ -0,0 +1,93 @@
+/* @java.file.header */
+
+/* _________ _____ __________________ _____
+ * __ ____/___________(_)______ /__ ____/______ ____(_)_______
+ * _ / __ __ ___/__ / _ __ / _ / __ _ __ `/__ / __ __ \
+ * / /_/ / _ / _ / / /_/ / / /_/ / / /_/ / _ / _ / / /
+ * \____/ /_/ /_/ \_,__/ \____/ \__,_/ /_/ /_/ /_/
+ */
+
+package org.apache.ignite.spi.discovery.tcp.messages;
+
+import org.gridgain.grid.util.typedef.internal.*;
+
+import java.io.*;
+import java.util.*;
+
+/**
+ * Sent by node that has detected node failure to coordinator across the ring,
+ * then sent by coordinator across the ring.
+ */
+@TcpDiscoveryEnsureDelivery
+@TcpDiscoveryRedirectToClient
+public class TcpDiscoveryNodeFailedMessage extends TcpDiscoveryAbstractMessage {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /** ID of the failed node. */
+ private UUID failedNodeId;
+
+ /** Internal order of the failed node. */
+ private long order;
+
+ /**
+ * Public default no-arg constructor for {@link Externalizable} interface.
+ */
+ public TcpDiscoveryNodeFailedMessage() {
+ // No-op.
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param creatorNodeId ID of the node that detects nodes failure.
+ * @param failedNodeId ID of the failed nodes.
+ * @param order Order of the failed node.
+ */
+ public TcpDiscoveryNodeFailedMessage(UUID creatorNodeId, UUID failedNodeId, long order) {
+ super(creatorNodeId);
+
+ assert failedNodeId != null;
+ assert order > 0;
+
+ this.failedNodeId = failedNodeId;
+ this.order = order;
+ }
+
+ /**
+ * Gets ID of the failed node.
+ *
+ * @return ID of the failed node.
+ */
+ public UUID failedNodeId() {
+ return failedNodeId;
+ }
+
+ /**
+ * @return Internal order of the failed node.
+ */
+ public long order() {
+ return order;
+ }
+
+ /** {@inheritDoc} */
+ @Override public void writeExternal(ObjectOutput out) throws IOException {
+ super.writeExternal(out);
+
+ U.writeUuid(out, failedNodeId);
+ out.writeLong(order);
+ }
+
+ /** {@inheritDoc} */
+ @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ super.readExternal(in);
+
+ failedNodeId = U.readUuid(in);
+ order = in.readLong();
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(TcpDiscoveryNodeFailedMessage.class, this, "super", super.toString());
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryNodeLeftMessage.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryNodeLeftMessage.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryNodeLeftMessage.java
new file mode 100644
index 0000000..b3cbd03
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryNodeLeftMessage.java
@@ -0,0 +1,47 @@
+/* @java.file.header */
+
+/* _________ _____ __________________ _____
+ * __ ____/___________(_)______ /__ ____/______ ____(_)_______
+ * _ / __ __ ___/__ / _ __ / _ / __ _ __ `/__ / __ __ \
+ * / /_/ / _ / _ / / /_/ / / /_/ / / /_/ / _ / _ / / /
+ * \____/ /_/ /_/ \_,__/ \____/ \__,_/ /_/ /_/ /_/
+ */
+
+package org.apache.ignite.spi.discovery.tcp.messages;
+
+import org.gridgain.grid.util.typedef.internal.*;
+
+import java.io.*;
+import java.util.*;
+
+/**
+ * Sent by node that is stopping to coordinator across the ring,
+ * then sent by coordinator across the ring.
+ */
+@TcpDiscoveryEnsureDelivery
+@TcpDiscoveryRedirectToClient
+public class TcpDiscoveryNodeLeftMessage extends TcpDiscoveryAbstractMessage {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /**
+ * Public default no-arg constructor for {@link Externalizable} interface.
+ */
+ public TcpDiscoveryNodeLeftMessage() {
+ // No-op.
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param creatorNodeId ID of the node that is about to leave the topology.
+ */
+ public TcpDiscoveryNodeLeftMessage(UUID creatorNodeId) {
+ super(creatorNodeId);
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(TcpDiscoveryNodeLeftMessage.class, this, "super", super.toString());
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryPingRequest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryPingRequest.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryPingRequest.java
new file mode 100644
index 0000000..9bd775f
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryPingRequest.java
@@ -0,0 +1,65 @@
+/* @java.file.header */
+
+/* _________ _____ __________________ _____
+ * __ ____/___________(_)______ /__ ____/______ ____(_)_______
+ * _ / __ __ ___/__ / _ __ / _ / __ _ __ `/__ / __ __ \
+ * / /_/ / _ / _ / / /_/ / / /_/ / / /_/ / _ / _ / / /
+ * \____/ /_/ /_/ \_,__/ \____/ \__,_/ /_/ /_/ /_/
+ */
+
+package org.apache.ignite.spi.discovery.tcp.messages;
+
+import org.gridgain.grid.util.typedef.internal.*;
+import org.jetbrains.annotations.*;
+
+import java.io.*;
+import java.util.*;
+
+/**
+ * Ping request.
+ */
+public class TcpDiscoveryPingRequest extends TcpDiscoveryAbstractMessage {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /** Pinged client node ID. */
+ private UUID clientNodeId;
+
+ /**
+ * For {@link Externalizable}.
+ */
+ public TcpDiscoveryPingRequest() {
+ // No-op.
+ }
+
+ /**
+ * @param creatorNodeId Creator node ID.
+ * @param clientNodeId Pinged client node ID.
+ */
+ public TcpDiscoveryPingRequest(UUID creatorNodeId, @Nullable UUID clientNodeId) {
+ super(creatorNodeId);
+
+ this.clientNodeId = clientNodeId;
+ }
+
+ /**
+ * @return Pinged client node ID.
+ */
+ @Nullable public UUID clientNodeId() {
+ return clientNodeId;
+ }
+
+ /** {@inheritDoc} */
+ @Override public void writeExternal(ObjectOutput out) throws IOException {
+ super.writeExternal(out);
+
+ U.writeUuid(out, clientNodeId);
+ }
+
+ /** {@inheritDoc} */
+ @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ super.readExternal(in);
+
+ clientNodeId = U.readUuid(in);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryPingResponse.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryPingResponse.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryPingResponse.java
new file mode 100644
index 0000000..dd69a04
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryPingResponse.java
@@ -0,0 +1,66 @@
+/* @java.file.header */
+
+/* _________ _____ __________________ _____
+ * __ ____/___________(_)______ /__ ____/______ ____(_)_______
+ * _ / __ __ ___/__ / _ __ / _ / __ _ __ `/__ / __ __ \
+ * / /_/ / _ / _ / / /_/ / / /_/ / / /_/ / _ / _ / / /
+ * \____/ /_/ /_/ \_,__/ \____/ \__,_/ /_/ /_/ /_/
+ */
+
+package org.apache.ignite.spi.discovery.tcp.messages;
+
+import java.io.*;
+import java.util.*;
+
+/**
+ * Ping response.
+ */
+public class TcpDiscoveryPingResponse extends TcpDiscoveryAbstractMessage {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /** Whether pinged client exists. */
+ private boolean clientExists;
+
+ /**
+ * For {@link Externalizable}.
+ */
+ public TcpDiscoveryPingResponse() {
+ // No-op.
+ }
+
+ /**
+ * @param creatorNodeId Creator node ID.
+ */
+ public TcpDiscoveryPingResponse(UUID creatorNodeId) {
+ super(creatorNodeId);
+ }
+
+ /**
+ * @param clientExists Whether pinged client exists.
+ */
+ public void clientExists(boolean clientExists) {
+ this.clientExists = clientExists;
+ }
+
+ /**
+ * @return Whether pinged client exists.
+ */
+ public boolean clientExists() {
+ return clientExists;
+ }
+
+ /** {@inheritDoc} */
+ @Override public void writeExternal(ObjectOutput out) throws IOException {
+ super.writeExternal(out);
+
+ out.writeBoolean(clientExists);
+ }
+
+ /** {@inheritDoc} */
+ @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ super.readExternal(in);
+
+ clientExists = in.readBoolean();
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryRedirectToClient.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryRedirectToClient.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryRedirectToClient.java
new file mode 100644
index 0000000..338ecf7
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryRedirectToClient.java
@@ -0,0 +1,23 @@
+/* @java.file.header */
+
+/* _________ _____ __________________ _____
+ * __ ____/___________(_)______ /__ ____/______ ____(_)_______
+ * _ / __ __ ___/__ / _ __ / _ / __ _ __ `/__ / __ __ \
+ * / /_/ / _ / _ / / /_/ / / /_/ / / /_/ / _ / _ / / /
+ * \____/ /_/ /_/ \_,__/ \____/ \__,_/ /_/ /_/ /_/
+ */
+
+package org.apache.ignite.spi.discovery.tcp.messages;
+
+import java.lang.annotation.*;
+
+/**
+ * Message classes with this annotation attached will be
+ * redirected to client nodes when going through ring.
+ */
+@Documented
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.TYPE)
+public @interface TcpDiscoveryRedirectToClient {
+ // No-op.
+}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryStatusCheckMessage.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryStatusCheckMessage.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryStatusCheckMessage.java
new file mode 100644
index 0000000..91684f0
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/TcpDiscoveryStatusCheckMessage.java
@@ -0,0 +1,123 @@
+/* @java.file.header */
+
+/* _________ _____ __________________ _____
+ * __ ____/___________(_)______ /__ ____/______ ____(_)_______
+ * _ / __ __ ___/__ / _ __ / _ / __ _ __ `/__ / __ __ \
+ * / /_/ / _ / _ / / /_/ / / /_/ / / /_/ / _ / _ / / /
+ * \____/ /_/ /_/ \_,__/ \____/ \__,_/ /_/ /_/ /_/
+ */
+
+package org.apache.ignite.spi.discovery.tcp.messages;
+
+import org.apache.ignite.spi.discovery.tcp.internal.*;
+import org.gridgain.grid.util.typedef.internal.*;
+
+import java.io.*;
+import java.util.*;
+
+/**
+ * Message sent by node to its next to ensure that next node and
+ * connection to it are alive. Receiving node should send it across the ring,
+ * until message does not reach coordinator. Coordinator responds directly to node.
+ * <p>
+ * If a failed node id is specified then the message is sent across the ring up to the sender node
+ * to ensure that the failed node is actually failed.
+ */
+public class TcpDiscoveryStatusCheckMessage extends TcpDiscoveryAbstractMessage {
+ /** */
+ private static final long serialVersionUID = 0L;
+
+ /** Status OK. */
+ public static final int STATUS_OK = 1;
+
+ /** Status RECONNECT. */
+ public static final int STATUS_RECON = 2;
+
+ /** Creator node. */
+ private TcpDiscoveryNode creatorNode;
+
+ /** Failed node id. */
+ private UUID failedNodeId;
+
+ /** Creator node status (initialized by coordinator). */
+ private int status;
+
+ /**
+ * Public default no-arg constructor for {@link Externalizable} interface.
+ */
+ public TcpDiscoveryStatusCheckMessage() {
+ // No-op.
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param creatorNode Creator node.
+ * @param failedNodeId Failed node id.
+ */
+ public TcpDiscoveryStatusCheckMessage(TcpDiscoveryNode creatorNode, UUID failedNodeId) {
+ super(creatorNode.id());
+
+ this.creatorNode = creatorNode;
+ this.failedNodeId = failedNodeId;
+ }
+
+ /**
+ * Gets creator node.
+ *
+ * @return Creator node.
+ */
+ public TcpDiscoveryNode creatorNode() {
+ return creatorNode;
+ }
+
+ /**
+ * Gets failed node id.
+ *
+ * @return Failed node id.
+ */
+ public UUID failedNodeId() {
+ return failedNodeId;
+ }
+
+ /**
+ * Gets creator status.
+ *
+ * @return Creator node status.
+ */
+ public int status() {
+ return status;
+ }
+
+ /**
+ * Sets creator node status (should be set by coordinator).
+ *
+ * @param status Creator node status.
+ */
+ public void status(int status) {
+ this.status = status;
+ }
+
+ /** {@inheritDoc} */
+ @Override public void writeExternal(ObjectOutput out) throws IOException {
+ super.writeExternal(out);
+
+ out.writeObject(creatorNode);
+ U.writeUuid(out, failedNodeId);
+ out.writeInt(status);
+ }
+
+ /** {@inheritDoc} */
+ @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ super.readExternal(in);
+
+ creatorNode = (TcpDiscoveryNode)in.readObject();
+ failedNodeId = U.readUuid(in);
+ status = in.readInt();
+ }
+
+ /** {@inheritDoc} */
+ @Override public String toString() {
+ return S.toString(TcpDiscoveryStatusCheckMessage.class, this, "super", super.toString());
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/package.html
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/package.html b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/package.html
new file mode 100644
index 0000000..c397e93
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/messages/package.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--
+ @html.file.header
+ _________ _____ __________________ _____
+ __ ____/___________(_)______ /__ ____/______ ____(_)_______
+ _ / __ __ ___/__ / _ __ / _ / __ _ __ `/__ / __ __ \
+ / /_/ / _ / _ / / /_/ / / /_/ / / /_/ / _ / _ / / /
+ \____/ /_/ /_/ \_,__/ \____/ \__,_/ /_/ /_/ /_/
+-->
+<html>
+<body>
+ <!-- Package description. -->
+ Contains implementation messages.
+</body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/package.html
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/package.html b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/package.html
new file mode 100644
index 0000000..7199f2e
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/package.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--
+ @html.file.header
+ _________ _____ __________________ _____
+ __ ____/___________(_)______ /__ ____/______ ____(_)_______
+ _ / __ __ ___/__ / _ __ / _ / __ _ __ `/__ / __ __ \
+ / /_/ / _ / _ / / /_/ / / /_/ / / /_/ / _ / _ / / /
+ \____/ /_/ /_/ \_,__/ \____/ \__,_/ /_/ /_/ /_/
+-->
+<html>
+<body>
+ <!-- Package description. -->
+ Contains <b>default</b> TCP/IP implementation for discovery SPI.
+</body>
+</html>
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/core/src/main/java/org/gridgain/grid/GridBasicWarmupClosure.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/GridBasicWarmupClosure.java b/modules/core/src/main/java/org/gridgain/grid/GridBasicWarmupClosure.java
index ee2c343..aeeec08 100644
--- a/modules/core/src/main/java/org/gridgain/grid/GridBasicWarmupClosure.java
+++ b/modules/core/src/main/java/org/gridgain/grid/GridBasicWarmupClosure.java
@@ -14,9 +14,9 @@ import org.apache.ignite.configuration.*;
import org.apache.ignite.lang.*;
import org.apache.ignite.logger.*;
import org.gridgain.grid.cache.*;
-import org.gridgain.grid.spi.discovery.tcp.*;
-import org.gridgain.grid.spi.discovery.tcp.ipfinder.*;
-import org.gridgain.grid.spi.discovery.tcp.ipfinder.vm.*;
+import org.apache.ignite.spi.discovery.tcp.*;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.*;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.*;
import org.gridgain.grid.util.typedef.*;
import org.gridgain.grid.util.typedef.internal.*;
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/core/src/main/java/org/gridgain/grid/kernal/GridGainEx.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/GridGainEx.java b/modules/core/src/main/java/org/gridgain/grid/kernal/GridGainEx.java
index 5469e86..1442ec9 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/GridGainEx.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/GridGainEx.java
@@ -40,9 +40,9 @@ import org.apache.ignite.spi.communication.*;
import org.apache.ignite.spi.communication.tcp.*;
import org.apache.ignite.spi.deployment.*;
import org.apache.ignite.spi.deployment.local.*;
-import org.gridgain.grid.spi.discovery.*;
-import org.gridgain.grid.spi.discovery.tcp.*;
-import org.gridgain.grid.spi.discovery.tcp.ipfinder.multicast.*;
+import org.apache.ignite.spi.discovery.*;
+import org.apache.ignite.spi.discovery.tcp.*;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.multicast.*;
import org.gridgain.grid.spi.eventstorage.*;
import org.gridgain.grid.spi.eventstorage.memory.*;
import org.gridgain.grid.spi.failover.*;
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/core/src/main/java/org/gridgain/grid/kernal/managers/discovery/GridDiscoveryManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/managers/discovery/GridDiscoveryManager.java b/modules/core/src/main/java/org/gridgain/grid/kernal/managers/discovery/GridDiscoveryManager.java
index bad2129..1acd9d5 100644
--- a/modules/core/src/main/java/org/gridgain/grid/kernal/managers/discovery/GridDiscoveryManager.java
+++ b/modules/core/src/main/java/org/gridgain/grid/kernal/managers/discovery/GridDiscoveryManager.java
@@ -27,7 +27,7 @@ import org.gridgain.grid.kernal.processors.jobmetrics.*;
import org.gridgain.grid.kernal.processors.service.*;
import org.gridgain.grid.security.*;
import org.gridgain.grid.segmentation.*;
-import org.gridgain.grid.spi.discovery.*;
+import org.apache.ignite.spi.discovery.*;
import org.gridgain.grid.util.*;
import org.gridgain.grid.util.future.*;
import org.gridgain.grid.util.lang.*;
@@ -361,7 +361,7 @@ public class GridDiscoveryManager extends GridManagerAdapter<DiscoverySpi> {
* @return {@code True} if specified component should collect data after all other components,
* {@code false} otherwise.
* @deprecated We shouldn't rely on exact order and size of
- * {@link org.gridgain.grid.spi.discovery.DiscoverySpiDataExchange#collect(UUID)} output because it may easily break backward
+ * {@link org.apache.ignite.spi.discovery.DiscoverySpiDataExchange#collect(UUID)} output because it may easily break backward
* compatibility (for example, if we will add new grid component in the middle of components startup
* routine). This method should be changed to return map (component id -> collected data)
* in the next major release.
@@ -1178,7 +1178,7 @@ public class GridDiscoveryManager extends GridManagerAdapter<DiscoverySpi> {
}
/**
- * Gets first grid node start time, see {@link org.gridgain.grid.spi.discovery.DiscoverySpi#getGridStartTime()}.
+ * Gets first grid node start time, see {@link org.apache.ignite.spi.discovery.DiscoverySpi#getGridStartTime()}.
*
* @return Start time of the first grid node.
*/