i show "Received unknown extension type %d" message continue (maybe ping tick) and success meet slave
void clusterProcessPingExtensions(clusterMsg *hdr, clusterLink *link) {
clusterNode *sender = link->node ? link->node : clusterLookupNode(hdr->sender, CLUSTER_NAMELEN);
char *ext_hostname = NULL;
char *ext_humannodename = NULL;
char *ext_shardid = NULL;
uint16_t extensions = ntohs(hdr->extensions);
/* Loop through all the extensions and process them */
clusterMsgPingExt *ext = getInitialPingExt(hdr, ntohs(hdr->count));
while (extensions--) {
uint16_t type = ntohs(ext->type);
if (type == CLUSTERMSG_EXT_TYPE_HOSTNAME) {
clusterMsgPingExtHostname *hostname_ext = (clusterMsgPingExtHostname *) &(ext->ext[0].hostname);
ext_hostname = hostname_ext->hostname;
} else if (type == CLUSTERMSG_EXT_TYPE_HUMAN_NODENAME) {
clusterMsgPingExtHumanNodename *humannodename_ext = (clusterMsgPingExtHumanNodename *) &(ext->ext[0].human_nodename);
ext_humannodename = humannodename_ext->human_nodename;
} else if (type == CLUSTERMSG_EXT_TYPE_FORGOTTEN_NODE) {
clusterMsgPingExtForgottenNode *forgotten_node_ext = &(ext->ext[0].forgotten_node);
clusterNode *n = clusterLookupNode(forgotten_node_ext->name, CLUSTER_NAMELEN);
if (n && n != myself && !(nodeIsSlave(myself) && myself->slaveof == n)) {
sds id = sdsnewlen(forgotten_node_ext->name, CLUSTER_NAMELEN);
dictEntry *de = dictAddOrFind(server.cluster->nodes_black_list, id);
uint64_t expire = server.unixtime + ntohu64(forgotten_node_ext->ttl);
dictSetUnsignedIntegerVal(de, expire);
clusterDelNode(n);
clusterDoBeforeSleep(CLUSTER_TODO_UPDATE_STATE|
CLUSTER_TODO_SAVE_CONFIG);
}
} else if (type == CLUSTERMSG_EXT_TYPE_SHARDID) {
clusterMsgPingExtShardId *shardid_ext = (clusterMsgPingExtShardId *) &(ext->ext[0].shard_id);
ext_shardid = shardid_ext->shard_id;
} else {
/* Unknown type, we will ignore it but log what happened. */
serverLog(LL_WARNING, "Received unknown extension type %d", type);
}
/* We know this will be valid since we validated it ahead of time */
ext = getNextPingExt(ext);
}
/* If the node did not send us a hostname extension, assume
* they don't have an announced hostname. Otherwise, we'll
* set it now. */
updateAnnouncedHostname(sender, ext_hostname);
updateAnnouncedHumanNodename(sender, ext_humannodename);
updateShardId(sender, ext_shardid);
}
Comment From: enjoy-binbin
please add and improve your question
Comment From: SunGeolSong
i use redis cluster version 7.0.11 1. master 7.0.11 2. slave 7.2 added 3. mater(7.0.11) log "2764298:M 20 Nov 2023 11:36:34.243 # Received unknown extension type 3" every 1 second 4. maybe 7.0.11 type 3 not defined
Comment From: SunGeolSong
} else if (type == CLUSTERMSG_EXT_TYPE_SHARDID) { clusterMsgPingExtShardId shardid_ext = (clusterMsgPingExtShardId ) &(ext->ext[0].shard_id); ext_shardid = shardid_ext->shard_id; } else { / Unknown type, we will ignore it but log what happened. / serverLog(LL_WARNING, "Received unknown extension type %d", type); }
typedef enum { CLUSTERMSG_EXT_TYPE_HOSTNAME, CLUSTERMSG_EXT_TYPE_HUMAN_NODENAME, CLUSTERMSG_EXT_TYPE_FORGOTTEN_NODE, CLUSTERMSG_EXT_TYPE_SHARDID, // 3 } clusterMsgPi
Comment From: enjoy-binbin
CLUSTERMSG_EXT_TYPE_SHARDID was introduced in Redis7.2, so a Redis 7.0 server can not read it and it will print a warning log (but you can ignore it for now)
Comment From: SunGeolSong
thank you, i upgraded redis cluster 7.0.11 -> 7.2.3
Comment From: enjoy-binbin
@madolson do you think we should limit the freq of the printing? In some scenarios the logs may be overwhelmed by it (e.g. 7.0 / 7.2 mixed cluster)
} else {
/* Unknown type, we will ignore it but log what happened. */
serverLog(LL_WARNING, "Received unknown extension type %d", type);
}
2032108:M 23 Nov 2023 17:54:58.072 # Received unknown extension type 3
2032108:M 23 Nov 2023 17:54:59.076 # Received unknown extension type 3
2032108:M 23 Nov 2023 17:55:00.080 # Received unknown extension type 3
2032108:M 23 Nov 2023 17:55:01.083 # Received unknown extension type 3
2032108:M 23 Nov 2023 17:55:02.086 # Received unknown extension type 3
2032108:M 23 Nov 2023 17:55:03.090 # Received unknown extension type 3
2032108:M 23 Nov 2023 17:55:04.093 # Received unknown extension type 3
2032108:M 23 Nov 2023 17:55:05.097 # Received unknown extension type 3
2032108:M 23 Nov 2023 17:55:06.102 # Received unknown extension type 3
Comment From: madolson
@madolson do you think we should limit the freq of the printing? In some scenarios the logs may be overwhelmed by it (e.g. 7.0 / 7.2 mixed cluster)
That's probably a good idea. We might want to have some generic functionality for doing time limited logs.
Comment From: enjoy-binbin
maybe we can just warp it with run_with_period(10000)? I see we've used this in places other than serverCron:
/* Once a second, check if the fragmentation justfies starting a scan
* or making it more aggressive. */
run_with_period(1000) {
computeDefragCycles();
}