futriix/tests/unit/cluster/announced-endpoints.tcl
Roshan Khatri c4782066e7
Cache CLUSTER SLOTS response for improving throughput and reduced latency. (#53)
This commit adds a logic to cache `CLUSTER SLOTS` response for reduced
latency and also updates the cache when a change in the cluster is
detected.

Historically, `CLUSTER SLOTS` command was deprecated, however all the
server clients have been using `CLUSTER SLOTS` and have not migrated to
`CLUSTER SHARDS`. In future this logic can be added to any other
commands to improve the performance of the engine.

---------

Signed-off-by: Roshan Khatri <rvkhatri@amazon.com>
2024-05-22 14:21:41 -07:00

57 lines
2.3 KiB
Tcl

start_cluster 2 2 {tags {external:skip cluster}} {
test "Test change cluster-announce-port and cluster-announce-tls-port at runtime" {
if {$::tls} {
set baseport [lindex [R 0 config get tls-port] 1]
} else {
set baseport [lindex [R 0 config get port] 1]
}
set count [expr [llength $::servers] + 1]
set used_port [find_available_port $baseport $count]
# We execute CLUSTER SLOTS command to trigger the `debugServerAssertWithInfo` in `clusterCommandSlots` function, ensuring
# that the cached response is invalidated upon updating any of cluster-announce-tls-port or cluster-announce-port.
R 0 CLUSTER SLOTS
R 1 CLUSTER SLOTS
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]
assert_match "*$used_port*" [R 0 CLUSTER SLOTS]
wait_for_condition 50 100 {
([string match "*:$used_port@*" [R 1 CLUSTER NODES]] && [string match "*$used_port*" [R 1 CLUSTER SLOTS]])
} 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" {
if {$::tls} {
set baseport [lindex [R 0 config get tls-port] 1]
} else {
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]
}
}