From 56d65c413312577e704eeedb4cea1cc2e229847e Mon Sep 17 00:00:00 2001 From: RS146BIJAY Date: Thu, 22 Aug 2024 11:38:32 +0530 Subject: [PATCH] Skipping serialization of node attributes in Leader and follower checks Signed-off-by: RS146BIJAY --- .../coordination/FollowersChecker.java | 7 +++- .../cluster/node/DiscoveryNode.java | 38 ++++++++++++++++--- 2 files changed, 38 insertions(+), 7 deletions(-) diff --git a/server/src/main/java/org/opensearch/cluster/coordination/FollowersChecker.java b/server/src/main/java/org/opensearch/cluster/coordination/FollowersChecker.java index 2ec0dabd91786..2cee9b1c2ee33 100644 --- a/server/src/main/java/org/opensearch/cluster/coordination/FollowersChecker.java +++ b/server/src/main/java/org/opensearch/cluster/coordination/FollowersChecker.java @@ -35,6 +35,7 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.message.ParameterizedMessage; +import org.opensearch.Version; import org.opensearch.cluster.ClusterManagerMetrics; import org.opensearch.cluster.coordination.Coordinator.Mode; import org.opensearch.cluster.node.DiscoveryNode; @@ -503,7 +504,11 @@ public FollowerCheckRequest(final StreamInput in) throws IOException { public void writeTo(final StreamOutput out) throws IOException { super.writeTo(out); out.writeLong(term); - sender.writeTo(out); + if (out.getVersion().onOrAfter(Version.V_3_0_0)) { + sender.writeToWithoutAttribute(out); + } else { + sender.writeTo(out); + } } @Override diff --git a/server/src/main/java/org/opensearch/cluster/node/DiscoveryNode.java b/server/src/main/java/org/opensearch/cluster/node/DiscoveryNode.java index 653f81830ed17..2926e67d7d67b 100644 --- a/server/src/main/java/org/opensearch/cluster/node/DiscoveryNode.java +++ b/server/src/main/java/org/opensearch/cluster/node/DiscoveryNode.java @@ -326,9 +326,14 @@ public DiscoveryNode(StreamInput in) throws IOException { this.address = new TransportAddress(in); int size = in.readVInt(); this.attributes = new HashMap<>(size); - for (int i = 0; i < size; i++) { - this.attributes.put(in.readString(), in.readString()); + if (in.getVersion().onOrAfter(Version.V_3_0_0) && !in.readBoolean()) { + + } else { + for (int i = 0; i < size; i++) { + this.attributes.put(in.readString(), in.readString()); + } } + int rolesSize = in.readVInt(); final Set roles = new HashSet<>(rolesSize); for (int i = 0; i < rolesSize; i++) { @@ -358,17 +363,38 @@ public DiscoveryNode(StreamInput in) throws IOException { @Override public void writeTo(StreamOutput out) throws IOException { + writeToUtil(out, true); + } + + public void writeToWithoutAttribute(StreamOutput out) throws IOException { + writeToUtil(out, false); + } + + private void writeToUtil(StreamOutput out, boolean includeAttributes) throws IOException { out.writeString(nodeName); out.writeString(nodeId); out.writeString(ephemeralId); out.writeString(hostName); out.writeString(hostAddress); address.writeTo(out); - out.writeVInt(attributes.size()); - for (Map.Entry entry : attributes.entrySet()) { - out.writeString(entry.getKey()); - out.writeString(entry.getValue()); + if (includeAttributes) { + out.writeVInt(attributes.size()); + if (out.getVersion().onOrAfter(Version.V_3_0_0)) { + out.writeBoolean(true); + } + + for (Map.Entry entry : attributes.entrySet()) { + out.writeString(entry.getKey()); + out.writeString(entry.getValue()); + } + } else { + // Set the size of attribute as 0 so that no attribute is read from stream on receiver node. + out.writeVInt(0); + if (out.getVersion().onOrAfter(Version.V_3_0_0)) { + out.writeBoolean(false); + } } + out.writeVInt(roles.size()); for (final DiscoveryNodeRole role : roles) { final DiscoveryNodeRole compatibleRole = role.getCompatibilityRole(out.getVersion());