Repository: ignite Updated Branches: refs/heads/master 1fb236935 -> 6bf7532d8
IGNITE-8372 ZookeeperClusterNode was made Externalizable to preserve serializing local node's metrics - Fixes #3907. Signed-off-by: Alexey Goncharuk <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/6bf7532d Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/6bf7532d Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/6bf7532d Branch: refs/heads/master Commit: 6bf7532d8eea481c829200861fd116d64c6f1b13 Parents: 1fb2369 Author: Sergey Chugunov <[email protected]> Authored: Wed Apr 25 20:59:25 2018 +0300 Committer: Alexey Goncharuk <[email protected]> Committed: Wed Apr 25 20:59:25 2018 +0300 ---------------------------------------------------------------------- .../zk/internal/ZookeeperClusterNode.java | 56 +++++++++++++++++++- .../zk/internal/ZookeeperDiscoveryImpl.java | 5 -- 2 files changed, 55 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/6bf7532d/modules/zookeeper/src/main/java/org/apache/ignite/spi/discovery/zk/internal/ZookeeperClusterNode.java ---------------------------------------------------------------------- diff --git a/modules/zookeeper/src/main/java/org/apache/ignite/spi/discovery/zk/internal/ZookeeperClusterNode.java b/modules/zookeeper/src/main/java/org/apache/ignite/spi/discovery/zk/internal/ZookeeperClusterNode.java index 3cb5fad..2fe3052 100644 --- a/modules/zookeeper/src/main/java/org/apache/ignite/spi/discovery/zk/internal/ZookeeperClusterNode.java +++ b/modules/zookeeper/src/main/java/org/apache/ignite/spi/discovery/zk/internal/ZookeeperClusterNode.java @@ -17,6 +17,10 @@ package org.apache.ignite.spi.discovery.zk.internal; +import java.io.Externalizable; +import java.io.IOException; +import java.io.ObjectInput; +import java.io.ObjectOutput; import java.io.Serializable; import java.util.Collection; import java.util.Collections; @@ -25,6 +29,7 @@ import java.util.Map; import java.util.UUID; import org.apache.ignite.cache.CacheMetrics; import org.apache.ignite.cluster.ClusterMetrics; +import org.apache.ignite.internal.ClusterMetricsSnapshot; import org.apache.ignite.internal.IgniteNodeAttributes; import org.apache.ignite.internal.managers.discovery.IgniteClusterNode; import org.apache.ignite.internal.util.tostring.GridToStringExclude; @@ -41,7 +46,7 @@ import static org.apache.ignite.internal.IgniteNodeAttributes.ATTR_NODE_CONSISTE /** * Zookeeper Cluster Node. */ -public class ZookeeperClusterNode implements IgniteClusterNode, Serializable, Comparable<ZookeeperClusterNode> { +public class ZookeeperClusterNode implements IgniteClusterNode, Externalizable, Comparable<ZookeeperClusterNode> { /** */ private static final long serialVersionUID = 0L; @@ -99,6 +104,11 @@ public class ZookeeperClusterNode implements IgniteClusterNode, Serializable, Co @GridToStringExclude private transient volatile boolean daemonInit; + /** */ + public ZookeeperClusterNode() { + //No-op + } + /** * @param id Node ID. * @param addrs Node addresses. @@ -326,6 +336,50 @@ public class ZookeeperClusterNode implements IgniteClusterNode, Serializable, Co } /** {@inheritDoc} */ + @Override public void writeExternal(ObjectOutput out) throws IOException { + U.writeUuid(out, id); + out.writeObject(consistentId); + out.writeLong(internalId); + out.writeLong(order); + out.writeObject(ver); + U.writeMap(out, attrs); + U.writeCollection(out, addrs); + U.writeCollection(out, hostNames); + out.writeLong(sesTimeout); + out.writeByte(flags); + + // Cluster metrics + byte[] mtr = null; + + ClusterMetrics metrics = this.metrics; + + if (metrics != null) + mtr = ClusterMetricsSnapshot.serialize(metrics); + + U.writeByteArray(out, mtr); + } + + /** {@inheritDoc} */ + @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { + id = U.readUuid(in); + consistentId = (Serializable) in.readObject(); + internalId = in.readLong(); + order = in.readLong(); + ver = (IgniteProductVersion) in.readObject(); + attrs = U.sealMap(U.readMap(in)); + addrs = U.readCollection(in); + hostNames = U.readCollection(in); + sesTimeout = in.readLong(); + flags = in.readByte(); + + // Cluster metrics + byte[] mtr = U.readByteArray(in); + + if (mtr != null) + metrics = ClusterMetricsSnapshot.deserialize(mtr, 0); + } + + /** {@inheritDoc} */ @Override public int compareTo(@Nullable ZookeeperClusterNode node) { if (node == null) return 1; http://git-wip-us.apache.org/repos/asf/ignite/blob/6bf7532d/modules/zookeeper/src/main/java/org/apache/ignite/spi/discovery/zk/internal/ZookeeperDiscoveryImpl.java ---------------------------------------------------------------------- diff --git a/modules/zookeeper/src/main/java/org/apache/ignite/spi/discovery/zk/internal/ZookeeperDiscoveryImpl.java b/modules/zookeeper/src/main/java/org/apache/ignite/spi/discovery/zk/internal/ZookeeperDiscoveryImpl.java index 74670ac..0604458 100644 --- a/modules/zookeeper/src/main/java/org/apache/ignite/spi/discovery/zk/internal/ZookeeperDiscoveryImpl.java +++ b/modules/zookeeper/src/main/java/org/apache/ignite/spi/discovery/zk/internal/ZookeeperDiscoveryImpl.java @@ -51,7 +51,6 @@ import org.apache.ignite.IgniteSystemProperties; import org.apache.ignite.cluster.ClusterNode; import org.apache.ignite.configuration.CommunicationFailureResolver; import org.apache.ignite.events.EventType; -import org.apache.ignite.internal.ClusterMetricsSnapshot; import org.apache.ignite.internal.IgniteClientDisconnectedCheckedException; import org.apache.ignite.internal.IgniteFutureTimeoutCheckedException; import org.apache.ignite.internal.IgniteInternalFuture; @@ -2955,8 +2954,6 @@ public class ZookeeperDiscoveryImpl { if (node.order() >= locNode.order()) break; - node.setMetrics(new ClusterMetricsSnapshot()); - rtState.top.addNode(node); } @@ -3448,8 +3445,6 @@ public class ZookeeperDiscoveryImpl { joinedNode.order(joinedEvtData.topVer); joinedNode.internalId(joinedEvtData.joinedInternalId); - joinedNode.setMetrics(new ClusterMetricsSnapshot()); - rtState.top.addNode(joinedNode); final List<ClusterNode> topSnapshot = rtState.top.topologySnapshot();
