Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
ruanhaishen
redis
Commits
68ceb466
Unverified
Commit
68ceb466
authored
Jul 20, 2018
by
chendianqiang
Committed by
GitHub
Jul 20, 2018
Browse files
Merge pull request #1 from antirez/unstable
update
parents
3d5e2c62
1c95c075
Changes
89
Show whitespace changes
Inline
Side-by-side
tests/unit/pendingquerybuf.tcl
0 → 100644
View file @
68ceb466
proc info_memory
{
r property
}
{
if
{[
regexp
"
\r\n
$property:
(.*?)
\r\n
"
[
{*}
$r
info memory
]
_ value
]}
{
set _ $value
}
}
proc prepare_value
{
size
}
{
set _v
"c"
for
{
set i 1
}
{
$i
< $size
}
{
incr i
}
{
append _v 0
}
return $_v
}
start_server
{
tags
{
"wait"
}}
{
start_server
{}
{
set slave
[
srv 0 client
]
set slave_host
[
srv 0 host
]
set slave_port
[
srv 0 port
]
set master
[
srv -1 client
]
set master_host
[
srv -1 host
]
set master_port
[
srv -1 port
]
test
"pending querybuf: check size of pending_querybuf after set a big value"
{
$slave slaveof $master_host $master_port
set _v
[
prepare_value
[
expr 32*1024*1024
]]
$master set key $_v
after 2000
set m_usedmemory
[
info_memory $master used_memory
]
set s_usedmemory
[
info_memory $slave used_memory
]
if
{
$s_usedmemory > $m_usedmemory + 10*1024*1024
}
{
fail
"the used_memory of slave is too larger than master.Master:
$m
_usedmemory Slave:
$s
_usedmemory"
}
}
}}
tests/unit/scan.tcl
View file @
68ceb466
...
...
@@ -236,4 +236,50 @@ start_server {tags {"scan"}} {
set first_score
[
lindex $res 1
]
assert
{
$first
_score != 0
}
}
test
"SCAN regression test for issue #4906"
{
for
{
set k 0
}
{
$k
< 100
}
{
incr k
}
{
r del set
r sadd set x
;
# Make sure it's not intset encoded
set toremove
{}
unset -nocomplain found
array set found
{}
# Populate the set
set numele
[
expr
{
101+
[
randomInt 1000
]}]
for
{
set j 0
}
{
$j
< $numele
}
{
incr j
}
{
r sadd set $j
if
{
$j
>= 100
}
{
lappend toremove $j
}
}
# Start scanning
set cursor 0
set iteration 0
set del_iteration
[
randomInt 10
]
while
{
!
(
$cursor
== 0 && $iteration != 0
)}
{
lassign
[
r sscan set $cursor
]
cursor items
# Mark found items. We expect to find from 0 to 99 at the end
# since those elements will never be removed during the scanning.
foreach i $items
{
set found
(
$i
)
1
}
incr iteration
# At some point remove most of the items to trigger the
# rehashing to a smaller hash table.
if
{
$iteration
== $del_iteration
}
{
r srem set
{*}
$toremove
}
}
# Verify that SSCAN reported everything from 0 to 99
for
{
set j 0
}
{
$j
< 100
}
{
incr j
}
{
if
{
!
[
info exists found
(
$j
)]}
{
fail
"SSCAN element missing
$j
"
}
}
}
}
}
tests/unit/scripting.tcl
View file @
68ceb466
...
...
@@ -517,7 +517,7 @@ start_server {tags {"scripting"}} {
# Note: keep this test at the end of this server stanza because it
# kills the server.
test
{
SHUTDOWN NOSAVE can kill a timedout script anyway
}
{
# The server
s
ould be still unresponding to normal commands.
# The server
c
ould be still unresponding to normal commands.
catch
{
r ping
}
e
assert_match
{
BUSY*
}
$e
catch
{
r shutdown nosave
}
...
...
tests/unit/slowlog.tcl
View file @
68ceb466
...
...
@@ -78,4 +78,14 @@ start_server {tags {"slowlog"} overrides {slowlog-log-slower-than 1000000}} {
set e
[
lindex
[
r slowlog get
]
0
]
assert_equal
{
lastentry_client
}
[
lindex $e 5
]
}
test
{
SLOWLOG - can be disabled
}
{
r config set slowlog-log-slower-than 1
r slowlog reset
assert_equal
[
r slowlog len
]
1
r config set slowlog-log-slower-than -1
r slowlog reset
r debug sleep 0.2
assert_equal
[
r slowlog len
]
0
}
}
tests/unit/type/stream-cgroups.tcl
View file @
68ceb466
...
...
@@ -81,4 +81,19 @@ start_server {
# just ID2.
assert
{[
r XACK mystream mygroup $id1 $id2
]
eq 1
}
}
test
{
PEL NACK reassignment after XGROUP SETID event
}
{
r del events
r xadd events * f1 v1
r xadd events * f1 v1
r xadd events * f1 v1
r xadd events * f1 v1
r xgroup create events g1 $
r xadd events * f1 v1
set c
[
llength
[
lindex
[
r xreadgroup group g1 c1 streams events >
]
0 1
]]
assert
{
$c
== 1
}
r xgroup setid events g1 -
set c
[
llength
[
lindex
[
r xreadgroup group g1 c2 streams events >
]
0 1
]]
assert
{
$c
== 5
}
}
}
tests/unit/type/stream.tcl
View file @
68ceb466
...
...
@@ -234,6 +234,53 @@ start_server {
assert
{[
lindex $res 0 1 1 1
]
eq
{
field two
}}
}
test
{
XDEL basic test
}
{
r del somestream
r xadd somestream * foo value0
set id
[
r xadd somestream * foo value1
]
r xadd somestream * foo value2
r xdel somestream $id
assert
{[
r xlen somestream
]
== 2
}
set result
[
r xrange somestream - +
]
assert
{[
lindex $result 0 1 1
]
eq
{
value0
}}
assert
{[
lindex $result 1 1 1
]
eq
{
value2
}}
}
# Here the idea is to check the consistency of the stream data structure
# as we remove all the elements down to zero elements.
test
{
XDEL fuzz test
}
{
r del somestream
set ids
{}
set x 0
;
# Length of the stream
while 1
{
lappend ids
[
r xadd somestream * item $x
]
incr x
# Add enough elements to have a few radix tree nodes inside the stream.
if
{[
dict get
[
r xinfo stream somestream
]
radix-tree-keys
]
> 20
}
break
}
# Now remove all the elements till we reach an empty stream
# and after every deletion, check that the stream is sane enough
# to report the right number of elements with XRANGE: this will also
# force accessing the whole data structure to check sanity.
assert
{[
r xlen somestream
]
== $x
}
# We want to remove elements in random order to really test the
# implementation in a better way.
set ids
[
lshuffle $ids
]
foreach id $ids
{
assert
{[
r xdel somestream $id
]
== 1
}
incr x -1
assert
{[
r xlen somestream
]
== $x
}
# The test would be too slow calling XRANGE for every iteration.
# Do it every 100 removal.
if
{
$x
% 100 == 0
}
{
set res
[
r xrange somestream - +
]
assert
{[
llength $res
]
== $x
}
}
}
}
test
{
XRANGE fuzzing
}
{
set low_id
[
lindex $items 0 0
]
set high_id
[
lindex $items end 0
]
...
...
@@ -253,4 +300,20 @@ start_server {
}
}
}
test
{
XREVRANGE regression test for issue #5006
}
{
# Add non compressed entries
r xadd teststream 1234567891230 key1 value1
r xadd teststream 1234567891240 key2 value2
r xadd teststream 1234567891250 key3 value3
# Add SAMEFIELD compressed entries
r xadd teststream2 1234567891230 key1 value1
r xadd teststream2 1234567891240 key1 value2
r xadd teststream2 1234567891250 key1 value3
assert_equal
[
r xrevrange teststream 1234567891245 -
]
{{
1234567891240-0
{
key2 value2
}}
{
1234567891230-0
{
key1 value1
}}}
assert_equal
[
r xrevrange teststream2 1234567891245 -
]
{{
1234567891240-0
{
key1 value2
}}
{
1234567891230-0
{
key1 value1
}}}
}
}
tests/unit/type/zset.tcl
View file @
68ceb466
...
...
@@ -84,7 +84,7 @@ start_server {tags {"zset"}} {
set err
}
{
ERR*
}
test
"ZADD NX with non exis
i
tng key"
{
test
"ZADD NX with non exist
i
ng key"
{
r del ztmp
r zadd ztmp nx 10 x 20 y 30 z
assert
{[
r zcard ztmp
]
== 3
}
...
...
@@ -653,11 +653,11 @@ start_server {tags {"zset"}} {
r del zset
assert_equal
{}
[
r zpopmin zset
]
create_zset zset
{
-1 a 1 b 2 c 3 d 4 e
}
assert_equal
{
-1
a
}
[
r zpopmin zset
]
assert_equal
{
1 b
}
[
r zpopmin zset
]
assert_equal
{
4 e
}
[
r zpopmax zset
]
assert_equal
{
3 d
}
[
r zpopmax zset
]
assert_equal
{
2 c
}
[
r zpopmin zset
]
assert_equal
{
a
-1
}
[
r zpopmin zset
]
assert_equal
{
b 1
}
[
r zpopmin zset
]
assert_equal
{
e 4
}
[
r zpopmax zset
]
assert_equal
{
d 3
}
[
r zpopmax zset
]
assert_equal
{
c 2
}
[
r zpopmin zset
]
assert_equal 0
[
r exists zset
]
r set foo bar
assert_error
"*WRONGTYPE*"
{
r zpopmin foo
}
...
...
@@ -669,8 +669,8 @@ start_server {tags {"zset"}} {
assert_equal
{}
[
r zpopmin z1 2
]
assert_error
"*WRONGTYPE*"
{
r zpopmin foo 2
}
create_zset z1
{
0 a 1 b 2 c 3 d
}
assert_equal
{
0
a
1
b
}
[
r zpopmin z1 2
]
assert_equal
{
3
d
2
c
}
[
r zpopmax z1 2
]
assert_equal
{
a
0
b
1
}
[
r zpopmin z1 2
]
assert_equal
{
d
3
c
2
}
[
r zpopmax z1 2
]
}
test
"BZPOP with a single existing sorted set -
$encoding
"
{
...
...
@@ -678,11 +678,11 @@ start_server {tags {"zset"}} {
create_zset zset
{
0 a 1 b 2 c
}
$rd bzpopmin zset 5
assert_equal
{
zset
0 a
}
[
$rd
read
]
assert_equal
{
zset
a 0
}
[
$rd
read
]
$rd bzpopmin zset 5
assert_equal
{
zset
1 b
}
[
$rd
read
]
assert_equal
{
zset
b 1
}
[
$rd
read
]
$rd bzpopmax zset 5
assert_equal
{
zset
2 c
}
[
$rd
read
]
assert_equal
{
zset
c 2
}
[
$rd
read
]
assert_equal 0
[
r exists zset
]
}
...
...
@@ -692,16 +692,16 @@ start_server {tags {"zset"}} {
create_zset z2
{
3 d 4 e 5 f
}
$rd bzpopmin z1 z2 5
assert_equal
{
z1
0 a
}
[
$rd
read
]
assert_equal
{
z1
a 0
}
[
$rd
read
]
$rd bzpopmax z1 z2 5
assert_equal
{
z1
2 c
}
[
$rd
read
]
assert_equal
{
z1
c 2
}
[
$rd
read
]
assert_equal 1
[
r zcard z1
]
assert_equal 3
[
r zcard z2
]
$rd bzpopmax z2 z1 5
assert_equal
{
z2
5 f
}
[
$rd
read
]
assert_equal
{
z2
f 5
}
[
$rd
read
]
$rd bzpopmin z2 z1 5
assert_equal
{
z2
3 d
}
[
$rd
read
]
assert_equal
{
z2
d 3
}
[
$rd
read
]
assert_equal 1
[
r zcard z1
]
assert_equal 1
[
r zcard z2
]
}
...
...
@@ -711,9 +711,9 @@ start_server {tags {"zset"}} {
r del z1
create_zset z2
{
3 d 4 e 5 f
}
$rd bzpopmax z1 z2 5
assert_equal
{
z2
5 f
}
[
$rd
read
]
assert_equal
{
z2
f 5
}
[
$rd
read
]
$rd bzpopmin z2 z1 5
assert_equal
{
z2
3 d
}
[
$rd
read
]
assert_equal
{
z2
d 3
}
[
$rd
read
]
assert_equal 0
[
r zcard z1
]
assert_equal 1
[
r zcard z2
]
}
...
...
@@ -1107,7 +1107,7 @@ start_server {tags {"zset"}} {
r del zset
r zadd zset 1 bar
$rd read
}
{
zset
1
bar
}
}
{
zset bar
1
}
test
"BZPOPMIN, ZADD + DEL + SET should not awake blocked client"
{
set rd
[
redis_deferring_client
]
...
...
@@ -1124,7 +1124,7 @@ start_server {tags {"zset"}} {
r del zset
r zadd zset 1 bar
$rd read
}
{
zset
1
bar
}
}
{
zset bar
1
}
test
"BZPOPMIN with same key multiple times should work"
{
set rd
[
redis_deferring_client
]
...
...
@@ -1133,18 +1133,18 @@ start_server {tags {"zset"}} {
# Data arriving after the BZPOPMIN.
$rd bzpopmin z1 z2 z2 z1 0
r zadd z1 0 a
assert_equal
[
$rd
read
]
{
z1
0 a
}
assert_equal
[
$rd
read
]
{
z1
a 0
}
$rd bzpopmin z1 z2 z2 z1 0
r zadd z2 1 b
assert_equal
[
$rd
read
]
{
z2
1 b
}
assert_equal
[
$rd
read
]
{
z2
b 1
}
# Data already there.
r zadd z1 0 a
r zadd z2 1 b
$rd bzpopmin z1 z2 z2 z1 0
assert_equal
[
$rd
read
]
{
z1
0 a
}
assert_equal
[
$rd
read
]
{
z1
a 0
}
$rd bzpopmin z1 z2 z2 z1 0
assert_equal
[
$rd
read
]
{
z2
1 b
}
assert_equal
[
$rd
read
]
{
z2
b 1
}
}
test
"MULTI/EXEC is isolated from the point of view of BZPOPMIN"
{
...
...
@@ -1157,7 +1157,7 @@ start_server {tags {"zset"}} {
r zadd zset 2 c
r exec
$rd read
}
{
zset
0 a
}
}
{
zset
a 0
}
test
"BZPOPMIN with variadic ZADD"
{
set rd
[
redis_deferring_client
]
...
...
@@ -1167,7 +1167,7 @@ start_server {tags {"zset"}} {
if
{
$::valgrind
}
{
after 100
}
assert_equal 2
[
r zadd zset -1 foo 1 bar
]
if
{
$::valgrind
}
{
after 100
}
assert_equal
{
zset
-1
foo
}
[
$rd
read
]
assert_equal
{
zset foo
-1
}
[
$rd
read
]
assert_equal
{
bar
}
[
r zrange zset 0 -1
]
}
...
...
@@ -1177,7 +1177,7 @@ start_server {tags {"zset"}} {
$rd bzpopmin zset 0
after 1000
r zadd zset 0 foo
assert_equal
{
zset
0
foo
}
[
$rd
read
]
assert_equal
{
zset foo
0
}
[
$rd
read
]
}
}
...
...
utils/generate-command-help.rb
View file @
68ceb466
...
...
@@ -14,7 +14,8 @@ GROUPS = [
"scripting"
,
"hyperloglog"
,
"cluster"
,
"geo"
"geo"
,
"stream"
].
freeze
GROUPS_BY_NAME
=
Hash
[
*
...
...
utils/hashtable/README
View file @
68ceb466
...
...
@@ -5,7 +5,7 @@ rehashing.c
Visually show buckets in the two hash tables between rehashings. Also stress
test getRandomKeys() implementation, that may actually disappear from
Redis soon, however visualiza
i
ton some code is reusable in new bugs
Redis soon, however visualizat
i
on some code is reusable in new bugs
investigation.
Compile with:
...
...
Prev
1
2
3
4
5
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment