2021-06-15 07:46:19 -04:00
|
|
|
proc client_idle_sec {name} {
|
|
|
|
set clients [split [r client list] "\r\n"]
|
|
|
|
set c [lsearch -inline $clients *name=$name*]
|
|
|
|
assert {[regexp {idle=([0-9]+)} $c - idle]}
|
|
|
|
return $idle
|
|
|
|
}
|
|
|
|
|
|
|
|
# Calculate query buffer memory of slave
|
|
|
|
proc client_query_buffer {name} {
|
|
|
|
set clients [split [r client list] "\r\n"]
|
|
|
|
set c [lsearch -inline $clients *name=$name*]
|
|
|
|
if {[string length $c] > 0} {
|
|
|
|
assert {[regexp {qbuf=([0-9]+)} $c - qbuf]}
|
|
|
|
assert {[regexp {qbuf-free=([0-9]+)} $c - qbuf_free]}
|
|
|
|
return [expr $qbuf + $qbuf_free]
|
|
|
|
}
|
|
|
|
return 0
|
|
|
|
}
|
|
|
|
|
|
|
|
start_server {tags {"querybuf slow"}} {
|
|
|
|
# The test will run at least 2s to check if client query
|
|
|
|
# buffer will be resized when client idle 2s.
|
|
|
|
test "query buffer resized correctly" {
|
|
|
|
# Memory will increase by more than 32k due to client query buffer.
|
|
|
|
set rd [redis_deferring_client]
|
|
|
|
$rd client setname test_client
|
|
|
|
set orig_test_client_qbuf [client_query_buffer test_client]
|
2021-06-16 15:01:37 -04:00
|
|
|
assert {$orig_test_client_qbuf >= 16384 && $orig_test_client_qbuf < 32768}
|
2021-06-15 07:46:19 -04:00
|
|
|
|
|
|
|
# Check that the initial query buffer is not resized if it is idle for more than 2s
|
|
|
|
wait_for_condition 1000 10 {
|
|
|
|
[client_idle_sec test_client] > 3 && [client_query_buffer test_client] == $orig_test_client_qbuf
|
|
|
|
} else {
|
|
|
|
fail "query buffer was resized"
|
|
|
|
}
|
|
|
|
|
|
|
|
# Fill query buffer to more than 32k
|
|
|
|
$rd set bigstring v ;# create bigstring in advance to avoid adding extra memory
|
|
|
|
$rd set bigstring [string repeat A 32768] nx
|
|
|
|
|
|
|
|
# Wait for query buffer to be resized to 0.
|
|
|
|
wait_for_condition 1000 10 {
|
|
|
|
[client_query_buffer test_client] == 0
|
|
|
|
} else {
|
|
|
|
fail "querybuf expected to be resized"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|