mirror of https://mirror.osredm.com/root/redis.git
[BUG] Fix announced ports not updating on local node when updated at runtime (#10745)
The cluster-announce-port/cluster-announce-bus-port/cluster-announce-tls-port should take effect at runtime
Co-authored-by: Madelyn Olson <madelyneolson@gmail.com>
(cherry picked from commit 25ffa79b64
)
This commit is contained in:
parent
cffabb641f
commit
81e72e8e29
|
@ -556,6 +556,14 @@ void clusterUpdateMyselfFlags(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* We want to take myself->port/cport/pport in sync with the
|
||||||
|
* cluster-announce-port/cluster-announce-bus-port/cluster-announce-tls-port option.
|
||||||
|
* The option can be set at runtime via CONFIG SET. */
|
||||||
|
void clusterUpdateMyselfAnnouncedPorts(void) {
|
||||||
|
if (!myself) return;
|
||||||
|
deriveAnnouncedPorts(&myself->port,&myself->pport,&myself->cport);
|
||||||
|
}
|
||||||
|
|
||||||
/* We want to take myself->ip in sync with the cluster-announce-ip option.
|
/* We want to take myself->ip in sync with the cluster-announce-ip option.
|
||||||
* The option can be set at runtime via CONFIG SET. */
|
* The option can be set at runtime via CONFIG SET. */
|
||||||
void clusterUpdateMyselfIp(void) {
|
void clusterUpdateMyselfIp(void) {
|
||||||
|
|
|
@ -398,5 +398,6 @@ void clusterUpdateMyselfIp(void);
|
||||||
void slotToChannelAdd(sds channel);
|
void slotToChannelAdd(sds channel);
|
||||||
void slotToChannelDel(sds channel);
|
void slotToChannelDel(sds channel);
|
||||||
void clusterUpdateMyselfHostname(void);
|
void clusterUpdateMyselfHostname(void);
|
||||||
|
void clusterUpdateMyselfAnnouncedPorts(void);
|
||||||
|
|
||||||
#endif /* __CLUSTER_H */
|
#endif /* __CLUSTER_H */
|
||||||
|
|
12
src/config.c
12
src/config.c
|
@ -2550,6 +2550,12 @@ int updateClusterFlags(const char **err) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int updateClusterAnnouncedPort(const char **err) {
|
||||||
|
UNUSED(err);
|
||||||
|
clusterUpdateMyselfAnnouncedPorts();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
static int updateClusterIp(const char **err) {
|
static int updateClusterIp(const char **err) {
|
||||||
UNUSED(err);
|
UNUSED(err);
|
||||||
clusterUpdateMyselfIp();
|
clusterUpdateMyselfIp();
|
||||||
|
@ -3042,9 +3048,9 @@ standardConfig static_configs[] = {
|
||||||
createIntConfig("replica-announce-port", "slave-announce-port", MODIFIABLE_CONFIG, 0, 65535, server.slave_announce_port, 0, INTEGER_CONFIG, NULL, NULL),
|
createIntConfig("replica-announce-port", "slave-announce-port", MODIFIABLE_CONFIG, 0, 65535, server.slave_announce_port, 0, INTEGER_CONFIG, NULL, NULL),
|
||||||
createIntConfig("tcp-backlog", NULL, IMMUTABLE_CONFIG, 0, INT_MAX, server.tcp_backlog, 511, INTEGER_CONFIG, NULL, NULL), /* TCP listen backlog. */
|
createIntConfig("tcp-backlog", NULL, IMMUTABLE_CONFIG, 0, INT_MAX, server.tcp_backlog, 511, INTEGER_CONFIG, NULL, NULL), /* TCP listen backlog. */
|
||||||
createIntConfig("cluster-port", NULL, IMMUTABLE_CONFIG, 0, 65535, server.cluster_port, 0, INTEGER_CONFIG, NULL, NULL),
|
createIntConfig("cluster-port", NULL, IMMUTABLE_CONFIG, 0, 65535, server.cluster_port, 0, INTEGER_CONFIG, NULL, NULL),
|
||||||
createIntConfig("cluster-announce-bus-port", NULL, MODIFIABLE_CONFIG, 0, 65535, server.cluster_announce_bus_port, 0, INTEGER_CONFIG, NULL, NULL), /* Default: Use +10000 offset. */
|
createIntConfig("cluster-announce-bus-port", NULL, MODIFIABLE_CONFIG, 0, 65535, server.cluster_announce_bus_port, 0, INTEGER_CONFIG, NULL, updateClusterAnnouncedPort), /* Default: Use +10000 offset. */
|
||||||
createIntConfig("cluster-announce-port", NULL, MODIFIABLE_CONFIG, 0, 65535, server.cluster_announce_port, 0, INTEGER_CONFIG, NULL, NULL), /* Use server.port */
|
createIntConfig("cluster-announce-port", NULL, MODIFIABLE_CONFIG, 0, 65535, server.cluster_announce_port, 0, INTEGER_CONFIG, NULL, updateClusterAnnouncedPort), /* Use server.port */
|
||||||
createIntConfig("cluster-announce-tls-port", NULL, MODIFIABLE_CONFIG, 0, 65535, server.cluster_announce_tls_port, 0, INTEGER_CONFIG, NULL, NULL), /* Use server.tls_port */
|
createIntConfig("cluster-announce-tls-port", NULL, MODIFIABLE_CONFIG, 0, 65535, server.cluster_announce_tls_port, 0, INTEGER_CONFIG, NULL, updateClusterAnnouncedPort), /* Use server.tls_port */
|
||||||
createIntConfig("repl-timeout", NULL, MODIFIABLE_CONFIG, 1, INT_MAX, server.repl_timeout, 60, INTEGER_CONFIG, NULL, NULL),
|
createIntConfig("repl-timeout", NULL, MODIFIABLE_CONFIG, 1, INT_MAX, server.repl_timeout, 60, INTEGER_CONFIG, NULL, NULL),
|
||||||
createIntConfig("repl-ping-replica-period", "repl-ping-slave-period", MODIFIABLE_CONFIG, 1, INT_MAX, server.repl_ping_slave_period, 10, INTEGER_CONFIG, NULL, NULL),
|
createIntConfig("repl-ping-replica-period", "repl-ping-slave-period", MODIFIABLE_CONFIG, 1, INT_MAX, server.repl_ping_slave_period, 10, INTEGER_CONFIG, NULL, NULL),
|
||||||
createIntConfig("list-compress-depth", NULL, DEBUG_CONFIG | MODIFIABLE_CONFIG, 0, INT_MAX, server.list_compress_depth, 0, INTEGER_CONFIG, NULL, NULL),
|
createIntConfig("list-compress-depth", NULL, DEBUG_CONFIG | MODIFIABLE_CONFIG, 0, INT_MAX, server.list_compress_depth, 0, INTEGER_CONFIG, NULL, NULL),
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
start_cluster 2 2 {tags {external:skip cluster}} {
|
||||||
|
|
||||||
|
test "Test change cluster-announce-port and cluster-announce-tls-port at runtime" {
|
||||||
|
set baseport [lindex [R 0 config get port] 1]
|
||||||
|
set count [expr [llength $::servers] +1 ]
|
||||||
|
set used_port [find_available_port $baseport $count]
|
||||||
|
|
||||||
|
R 0 config set cluster-announce-tls-port $used_port
|
||||||
|
R 0 config set cluster-announce-port $used_port
|
||||||
|
|
||||||
|
assert_match "*:$used_port@*" [R 0 CLUSTER NODES]
|
||||||
|
wait_for_condition 50 100 {
|
||||||
|
[string match "*:$used_port@*" [R 1 CLUSTER NODES]]
|
||||||
|
} else {
|
||||||
|
fail "Cluster announced port was not propagated via gossip"
|
||||||
|
}
|
||||||
|
|
||||||
|
R 0 config set cluster-announce-tls-port 0
|
||||||
|
R 0 config set cluster-announce-port 0
|
||||||
|
assert_match "*:$baseport@*" [R 0 CLUSTER NODES]
|
||||||
|
}
|
||||||
|
|
||||||
|
test "Test change cluster-announce-bus-port at runtime" {
|
||||||
|
set baseport [lindex [R 0 config get port] 1]
|
||||||
|
set count [expr [llength $::servers] +1 ]
|
||||||
|
set used_port [find_available_port $baseport $count]
|
||||||
|
|
||||||
|
# Verify config set cluster-announce-bus-port
|
||||||
|
R 0 config set cluster-announce-bus-port $used_port
|
||||||
|
assert_match "*@$used_port *" [R 0 CLUSTER NODES]
|
||||||
|
wait_for_condition 50 100 {
|
||||||
|
[string match "*@$used_port *" [R 1 CLUSTER NODES]]
|
||||||
|
} else {
|
||||||
|
fail "Cluster announced port was not propagated via gossip"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Verify restore default cluster-announce-port
|
||||||
|
set base_bus_port [expr $baseport + 10000]
|
||||||
|
R 0 config set cluster-announce-bus-port 0
|
||||||
|
assert_match "*@$base_bus_port *" [R 0 CLUSTER NODES]
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue