redict/tests/unit
Wang Yuan 57709c4bc6
Don't write replies if close the client ASAP (#7202)
Before this commit, we would have continued to add replies to the reply buffer even if client
output buffer limit is reached, so the used memory would keep increasing over the configured limit.
What's more, we shouldn’t write any reply to the client if it is set 'CLIENT_CLOSE_ASAP' flag
because that doesn't conform to its definition and we will close all clients flagged with
'CLIENT_CLOSE_ASAP' in ‘beforeSleep’.

Because of code execution order, before this, we may firstly write to part of the replies to
the socket before disconnecting it, but in fact, we may can’t send the full replies to clients
since OS socket buffer is limited. But this unexpected behavior makes some commands work well,
for instance ACL DELUSER, if the client deletes the current user, we need to send reply to client
and close the connection, but before, we close the client firstly and write the reply to reply
buffer. secondly, we shouldn't do this despite the fact it works well in most cases.

We add a flag 'CLIENT_CLOSE_AFTER_COMMAND' to mark clients, this flag means we will close the
client after executing commands and send all entire replies, so that we can write replies to
reply buffer during executing commands, send replies to clients, and close them later.

We also fix some implicit problems. If client output buffer limit is enforced in 'multi/exec',
all commands will be executed completely in redis and clients will not read any reply instead of
partial replies. Even more, if the client executes 'ACL deluser' the using user in 'multi/exec',
it will not read the replies after 'ACL deluser' just like before executing 'client kill' itself
in 'multi/exec'.

We added some tests for output buffer limit breach during multi-exec and using a pipeline of
many small commands rather than one with big response.

Co-authored-by: Oran Agra <oran@redislabs.com>
2020-09-24 16:01:41 +03:00
..
moduleapi Add Swapdb Module Event (#7804) 2020-09-20 13:36:20 +03:00
type Stream: Inconsistency between master and replica some XREADGROUP case (#7526) 2020-09-24 12:02:40 +03:00
acl.tcl Don't write replies if close the client ASAP (#7202) 2020-09-24 16:01:41 +03:00
aofrw.tcl AOF: run tests with preamble off when it makes sense. 2018-03-25 13:03:38 +02:00
auth.tcl ACL: AUTH + no default user password raises an error. 2019-01-17 18:30:23 +01:00
bitfield.tcl Fix BITFIELD_RO test. 2020-03-23 12:02:12 +01:00
bitops.tcl Regression test for #3282. 2016-06-15 11:49:49 +02:00
dump.tcl Test:Fix invalid cases in hash.tcl and dump.tcl (#4611) 2020-08-12 10:25:24 +08:00
expire.tcl fix broken PEXPIREAT test (#7791) 2020-09-13 13:50:23 +03:00
geo.tcl Revert "Geo: output 10 chars of geohash, not 11." 2019-12-18 12:54:46 +01:00
hyperloglog.tcl Squash merging 125 typo/grammar/comment/doc PRs (#7773) 2020-09-10 13:43:38 +03:00
introspection-2.tcl fix #5024 - commandstats for multi-exec were logged as EXEC. 2018-09-30 12:43:11 +03:00
introspection.tcl Tests: validate CONFIG REWRITE for all params. (#7764) 2020-09-09 15:43:11 +03:00
keyspace.tcl Test: MOVE expire test improved. 2015-09-14 12:35:55 +02:00
latency-monitor.tcl Fix command help for unexpected options (#7476) 2020-07-15 12:38:22 +03:00
lazyfree.tcl Test: basic lazyfree unit test. 2015-10-09 09:47:17 +02:00
limits.tcl TLS: Connections refactoring and TLS support. 2019-10-07 21:06:13 +03:00
maxmemory.tcl make replication tests more stable on slow machines 2019-05-05 08:25:01 +03:00
memefficiency.tcl Run active defrag while blocked / loading (#7726) 2020-09-03 08:47:29 +03:00
multi.tcl EXEC with only read commands should not be rejected when OOM (#7696) 2020-08-27 09:19:24 +03:00
obuf-limits.tcl Don't write replies if close the client ASAP (#7202) 2020-09-24 16:01:41 +03:00
oom-score-adj.tcl Tests: fix oom-score-adj false positives. (#7772) 2020-09-09 18:58:06 +03:00
other.tcl tests: each test client work on a distinct port range 2020-05-26 11:17:08 +03:00
pendingquerybuf.tcl Slave removal: remove slave from top-level tests descriptions. 2018-09-11 15:32:28 +02:00
printver.tcl Print version info before running the test 2011-05-20 11:44:54 +02:00
protocol.tcl TLS: Connections refactoring and TLS support. 2019-10-07 21:06:13 +03:00
pubsub.tcl pubsub: Return integers for NUMSUB, not strings 2014-08-08 11:19:37 +02:00
quit.tcl Add tests for OK on QUIT 2010-10-15 12:54:53 +02:00
scan.tcl Implement SCAN cursor [TYPE type] modifier suggested in issue #6107. 2019-05-22 16:39:04 +01:00
scripting.tcl Squash merging 125 typo/grammar/comment/doc PRs (#7773) 2020-09-10 13:43:38 +03:00
shutdown.tcl Remove tmp rdb file in background thread (#7762) 2020-09-17 18:20:10 +03:00
slowlog.tcl Test: fix slowlog test false positive. 2019-05-14 16:55:52 +02:00
sort.tcl Config: Add quicklist, remove old list options 2015-01-02 11:16:10 -05:00
tls.tcl Add optional tls verification (#7502) 2020-07-28 10:45:21 +03:00
tracking.tcl Regression test for #7249. 2020-05-14 11:27:31 +02:00
wait.tcl Tests: fix redis-cli with remote hosts. (#7693) 2020-08-23 10:17:43 +03:00