diff --git a/src/cluster_legacy.c b/src/cluster_legacy.c index e1a32a1cf5..322b899aa8 100644 --- a/src/cluster_legacy.c +++ b/src/cluster_legacy.c @@ -3039,7 +3039,7 @@ int clusterProcessPacket(clusterLink *link) { } return 1; } - clusterNode *sender; + clusterMsg *hdr = (clusterMsg *)link->rcvbuf; uint16_t type = ntohs(hdr->type); mstime_t now = mstime(); @@ -3053,20 +3053,14 @@ int clusterProcessPacket(clusterLink *link) { type); return 0; } - sender = link->node; + clusterNode *sender = link->node; sender->data_received = now; return pubsubProcessLightPacket(link, type); } - sender = getNodeFromLinkAndMsg(link, hdr); - /* Update the last time we saw any data from this node. We - * use this in order to avoid detecting a timeout from a node that - * is just sending a lot of data in the cluster bus, for instance - * because of Pub/Sub. */ - if (sender) sender->data_received = now; - uint16_t flags = ntohs(hdr->flags); uint64_t sender_claimed_current_epoch = 0, sender_claimed_config_epoch = 0; + clusterNode *sender = getNodeFromLinkAndMsg(link, hdr); int sender_claims_to_be_primary = !memcmp(hdr->replicaof, CLUSTER_NODE_NULL_NAME, CLUSTER_NAMELEN); int sender_last_reported_as_replica = sender && nodeIsReplica(sender); int sender_last_reported_as_primary = sender && nodeIsPrimary(sender); @@ -3075,15 +3069,17 @@ int clusterProcessPacket(clusterLink *link) { sender->flags |= CLUSTER_NODE_EXTENSIONS_SUPPORTED; } - if (sender && (hdr->mflags[0] & CLUSTERMSG_FLAG0_EXT_DATA)) { - sender->flags |= CLUSTER_NODE_EXTENSIONS_SUPPORTED; - } - /* Checks if the node supports light message hdr */ if (sender && (flags & CLUSTER_NODE_LIGHT_HDR_SUPPORTED)) { sender->flags |= CLUSTER_NODE_LIGHT_HDR_SUPPORTED; } + /* Update the last time we saw any data from this node. We + * use this in order to avoid detecting a timeout from a node that + * is just sending a lot of data in the cluster bus, for instance + * because of Pub/Sub. */ + if (sender) sender->data_received = now; + if (sender && !nodeInHandshake(sender)) { /* Update our currentEpoch if we see a newer epoch in the cluster. */ sender_claimed_current_epoch = ntohu64(hdr->currentEpoch);