Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
redis
Commits
7e79de54
Commit
7e79de54
authored
Jun 14, 2010
by
Pieter Noordhuis
Browse files
rename "list" to "linkedlist" to be more verbose
parent
08b59207
Changes
2
Hide whitespace changes
Inline
Side-by-side
redis.c
View file @
7e79de54
...
@@ -130,11 +130,11 @@
...
@@ -130,11 +130,11 @@
#define REDIS_ENCODING_INT 1
/* Encoded as integer */
#define REDIS_ENCODING_INT 1
/* Encoded as integer */
#define REDIS_ENCODING_HT 2
/* Encoded as hash table */
#define REDIS_ENCODING_HT 2
/* Encoded as hash table */
#define REDIS_ENCODING_ZIPMAP 3
/* Encoded as zipmap */
#define REDIS_ENCODING_ZIPMAP 3
/* Encoded as zipmap */
#define REDIS_ENCODING_LIST 4
/* Encoded as
zipmap
*/
#define REDIS_ENCODING_
LINKED
LIST 4
/* Encoded as
regular linked list
*/
#define REDIS_ENCODING_ZIPLIST 5
/* Encoded as ziplist */
#define REDIS_ENCODING_ZIPLIST 5
/* Encoded as ziplist */
static
char
*
strencoding
[]
=
{
static
char
*
strencoding
[]
=
{
"raw", "int", "hashtable", "zipmap", "list", "ziplist"
"raw"
,
"int"
,
"hashtable"
,
"zipmap"
,
"
linked
list"
,
"ziplist"
};
};
/* Object types only used for dumping to disk */
/* Object types only used for dumping to disk */
...
@@ -3058,7 +3058,7 @@ static robj *createListObject(void) {
...
@@ -3058,7 +3058,7 @@ static robj *createListObject(void) {
list
*
l
=
listCreate
();
list
*
l
=
listCreate
();
robj
*
o
=
createObject
(
REDIS_LIST
,
l
);
robj
*
o
=
createObject
(
REDIS_LIST
,
l
);
listSetFreeMethod
(
l
,
decrRefCount
);
listSetFreeMethod
(
l
,
decrRefCount
);
o->encoding = REDIS_ENCODING_LIST;
o
->
encoding
=
REDIS_ENCODING_
LINKED
LIST
;
return
o
;
return
o
;
}
}
...
@@ -3100,7 +3100,7 @@ static void freeStringObject(robj *o) {
...
@@ -3100,7 +3100,7 @@ static void freeStringObject(robj *o) {
static
void
freeListObject
(
robj
*
o
)
{
static
void
freeListObject
(
robj
*
o
)
{
switch
(
o
->
encoding
)
{
switch
(
o
->
encoding
)
{
case REDIS_ENCODING_LIST:
case
REDIS_ENCODING_
LINKED
LIST
:
listRelease
((
list
*
)
o
->
ptr
);
listRelease
((
list
*
)
o
->
ptr
);
break
;
break
;
case
REDIS_ENCODING_ZIPLIST
:
case
REDIS_ENCODING_ZIPLIST
:
...
@@ -3776,7 +3776,7 @@ static int rdbSaveObject(FILE *fp, robj *o) {
...
@@ -3776,7 +3776,7 @@ static int rdbSaveObject(FILE *fp, robj *o) {
}
}
p
=
ziplistNext
(
o
->
ptr
,
p
);
p
=
ziplistNext
(
o
->
ptr
,
p
);
}
}
} else if (o->encoding == REDIS_ENCODING_LIST) {
}
else
if
(
o
->
encoding
==
REDIS_ENCODING_
LINKED
LIST
)
{
list
*
list
=
o
->
ptr
;
list
*
list
=
o
->
ptr
;
listIter
li
;
listIter
li
;
listNode
*
ln
;
listNode
*
ln
;
...
@@ -4186,7 +4186,7 @@ static robj *rdbLoadObject(int type, FILE *fp) {
...
@@ -4186,7 +4186,7 @@ static robj *rdbLoadObject(int type, FILE *fp) {
if
(
o
->
encoding
==
REDIS_ENCODING_ZIPLIST
&&
if
(
o
->
encoding
==
REDIS_ENCODING_ZIPLIST
&&
ele
->
encoding
==
REDIS_ENCODING_RAW
&&
ele
->
encoding
==
REDIS_ENCODING_RAW
&&
sdslen
(
ele
->
ptr
)
>
server
.
list_max_ziplist_value
)
sdslen
(
ele
->
ptr
)
>
server
.
list_max_ziplist_value
)
listTypeConvert(o,REDIS_ENCODING_LIST);
listTypeConvert
(
o
,
REDIS_ENCODING_
LINKED
LIST
);
if
(
o
->
encoding
==
REDIS_ENCODING_ZIPLIST
)
{
if
(
o
->
encoding
==
REDIS_ENCODING_ZIPLIST
)
{
dec
=
getDecodedObject
(
ele
);
dec
=
getDecodedObject
(
ele
);
...
@@ -4926,7 +4926,7 @@ static void listTypeTryConversion(robj *subject, robj *value) {
...
@@ -4926,7 +4926,7 @@ static void listTypeTryConversion(robj *subject, robj *value) {
if
(
subject
->
encoding
!=
REDIS_ENCODING_ZIPLIST
)
return
;
if
(
subject
->
encoding
!=
REDIS_ENCODING_ZIPLIST
)
return
;
if
(
value
->
encoding
==
REDIS_ENCODING_RAW
&&
if
(
value
->
encoding
==
REDIS_ENCODING_RAW
&&
sdslen
(
value
->
ptr
)
>
server
.
list_max_ziplist_value
)
sdslen
(
value
->
ptr
)
>
server
.
list_max_ziplist_value
)
listTypeConvert(subject,REDIS_ENCODING_LIST);
listTypeConvert
(
subject
,
REDIS_ENCODING_
LINKED
LIST
);
}
}
static
void
listTypePush
(
robj
*
subject
,
robj
*
value
,
int
where
)
{
static
void
listTypePush
(
robj
*
subject
,
robj
*
value
,
int
where
)
{
...
@@ -4934,14 +4934,14 @@ static void listTypePush(robj *subject, robj *value, int where) {
...
@@ -4934,14 +4934,14 @@ static void listTypePush(robj *subject, robj *value, int where) {
listTypeTryConversion
(
subject
,
value
);
listTypeTryConversion
(
subject
,
value
);
if
(
subject
->
encoding
==
REDIS_ENCODING_ZIPLIST
&&
if
(
subject
->
encoding
==
REDIS_ENCODING_ZIPLIST
&&
ziplistLen
(
subject
->
ptr
)
>=
server
.
list_max_ziplist_entries
)
ziplistLen
(
subject
->
ptr
)
>=
server
.
list_max_ziplist_entries
)
listTypeConvert(subject,REDIS_ENCODING_LIST);
listTypeConvert
(
subject
,
REDIS_ENCODING_
LINKED
LIST
);
if
(
subject
->
encoding
==
REDIS_ENCODING_ZIPLIST
)
{
if
(
subject
->
encoding
==
REDIS_ENCODING_ZIPLIST
)
{
int
pos
=
(
where
==
REDIS_HEAD
)
?
ZIPLIST_HEAD
:
ZIPLIST_TAIL
;
int
pos
=
(
where
==
REDIS_HEAD
)
?
ZIPLIST_HEAD
:
ZIPLIST_TAIL
;
value
=
getDecodedObject
(
value
);
value
=
getDecodedObject
(
value
);
subject
->
ptr
=
ziplistPush
(
subject
->
ptr
,
value
->
ptr
,
sdslen
(
value
->
ptr
),
pos
);
subject
->
ptr
=
ziplistPush
(
subject
->
ptr
,
value
->
ptr
,
sdslen
(
value
->
ptr
),
pos
);
decrRefCount
(
value
);
decrRefCount
(
value
);
} else if (subject->encoding == REDIS_ENCODING_LIST) {
}
else
if
(
subject
->
encoding
==
REDIS_ENCODING_
LINKED
LIST
)
{
if
(
where
==
REDIS_HEAD
)
{
if
(
where
==
REDIS_HEAD
)
{
listAddNodeHead
(
subject
->
ptr
,
value
);
listAddNodeHead
(
subject
->
ptr
,
value
);
}
else
{
}
else
{
...
@@ -4971,7 +4971,7 @@ static robj *listTypePop(robj *subject, int where) {
...
@@ -4971,7 +4971,7 @@ static robj *listTypePop(robj *subject, int where) {
/* We only need to delete an element when it exists */
/* We only need to delete an element when it exists */
subject
->
ptr
=
ziplistDelete
(
subject
->
ptr
,
&
p
);
subject
->
ptr
=
ziplistDelete
(
subject
->
ptr
,
&
p
);
}
}
} else if (subject->encoding == REDIS_ENCODING_LIST) {
}
else
if
(
subject
->
encoding
==
REDIS_ENCODING_
LINKED
LIST
)
{
list
*
list
=
subject
->
ptr
;
list
*
list
=
subject
->
ptr
;
listNode
*
ln
;
listNode
*
ln
;
if
(
where
==
REDIS_HEAD
)
{
if
(
where
==
REDIS_HEAD
)
{
...
@@ -4993,7 +4993,7 @@ static robj *listTypePop(robj *subject, int where) {
...
@@ -4993,7 +4993,7 @@ static robj *listTypePop(robj *subject, int where) {
static
unsigned
long
listTypeLength
(
robj
*
subject
)
{
static
unsigned
long
listTypeLength
(
robj
*
subject
)
{
if
(
subject
->
encoding
==
REDIS_ENCODING_ZIPLIST
)
{
if
(
subject
->
encoding
==
REDIS_ENCODING_ZIPLIST
)
{
return
ziplistLen
(
subject
->
ptr
);
return
ziplistLen
(
subject
->
ptr
);
} else if (subject->encoding == REDIS_ENCODING_LIST) {
}
else
if
(
subject
->
encoding
==
REDIS_ENCODING_
LINKED
LIST
)
{
return
listLength
((
list
*
)
subject
->
ptr
);
return
listLength
((
list
*
)
subject
->
ptr
);
}
else
{
}
else
{
redisPanic
(
"Unknown list encoding"
);
redisPanic
(
"Unknown list encoding"
);
...
@@ -5024,7 +5024,7 @@ static listTypeIterator *listTypeInitIterator(robj *subject, int index, unsigned
...
@@ -5024,7 +5024,7 @@ static listTypeIterator *listTypeInitIterator(robj *subject, int index, unsigned
li
->
direction
=
direction
;
li
->
direction
=
direction
;
if
(
li
->
encoding
==
REDIS_ENCODING_ZIPLIST
)
{
if
(
li
->
encoding
==
REDIS_ENCODING_ZIPLIST
)
{
li
->
zi
=
ziplistIndex
(
subject
->
ptr
,
index
);
li
->
zi
=
ziplistIndex
(
subject
->
ptr
,
index
);
} else if (li->encoding == REDIS_ENCODING_LIST) {
}
else
if
(
li
->
encoding
==
REDIS_ENCODING_
LINKED
LIST
)
{
li
->
ln
=
listIndex
(
subject
->
ptr
,
index
);
li
->
ln
=
listIndex
(
subject
->
ptr
,
index
);
}
else
{
}
else
{
redisPanic
(
"Unknown list encoding"
);
redisPanic
(
"Unknown list encoding"
);
...
@@ -5054,7 +5054,7 @@ static int listTypeNext(listTypeIterator *li, listTypeEntry *entry) {
...
@@ -5054,7 +5054,7 @@ static int listTypeNext(listTypeIterator *li, listTypeEntry *entry) {
li
->
zi
=
ziplistPrev
(
li
->
subject
->
ptr
,
li
->
zi
);
li
->
zi
=
ziplistPrev
(
li
->
subject
->
ptr
,
li
->
zi
);
return
1
;
return
1
;
}
}
} else if (li->encoding == REDIS_ENCODING_LIST) {
}
else
if
(
li
->
encoding
==
REDIS_ENCODING_
LINKED
LIST
)
{
entry
->
ln
=
li
->
ln
;
entry
->
ln
=
li
->
ln
;
if
(
entry
->
ln
!=
NULL
)
{
if
(
entry
->
ln
!=
NULL
)
{
if
(
li
->
direction
==
REDIS_TAIL
)
if
(
li
->
direction
==
REDIS_TAIL
)
...
@@ -5085,7 +5085,7 @@ static robj *listTypeGet(listTypeEntry *entry) {
...
@@ -5085,7 +5085,7 @@ static robj *listTypeGet(listTypeEntry *entry) {
value
=
createStringObjectFromLongLong
(
vlong
);
value
=
createStringObjectFromLongLong
(
vlong
);
}
}
}
}
} else if (li->encoding == REDIS_ENCODING_LIST) {
}
else
if
(
li
->
encoding
==
REDIS_ENCODING_
LINKED
LIST
)
{
redisAssert
(
entry
->
ln
!=
NULL
);
redisAssert
(
entry
->
ln
!=
NULL
);
value
=
listNodeValue
(
entry
->
ln
);
value
=
listNodeValue
(
entry
->
ln
);
incrRefCount
(
value
);
incrRefCount
(
value
);
...
@@ -5113,7 +5113,7 @@ static void listTypeInsert(listTypeEntry *entry, robj *value, int where) {
...
@@ -5113,7 +5113,7 @@ static void listTypeInsert(listTypeEntry *entry, robj *value, int where) {
subject
->
ptr
=
ziplistInsert
(
subject
->
ptr
,
entry
->
zi
,
value
->
ptr
,
sdslen
(
value
->
ptr
));
subject
->
ptr
=
ziplistInsert
(
subject
->
ptr
,
entry
->
zi
,
value
->
ptr
,
sdslen
(
value
->
ptr
));
}
}
decrRefCount
(
value
);
decrRefCount
(
value
);
} else if (entry->li->encoding == REDIS_ENCODING_LIST) {
}
else
if
(
entry
->
li
->
encoding
==
REDIS_ENCODING_
LINKED
LIST
)
{
if
(
where
==
REDIS_TAIL
)
{
if
(
where
==
REDIS_TAIL
)
{
listInsertNode
(
subject
->
ptr
,
entry
->
ln
,
value
,
AL_START_TAIL
);
listInsertNode
(
subject
->
ptr
,
entry
->
ln
,
value
,
AL_START_TAIL
);
}
else
{
}
else
{
...
@@ -5131,7 +5131,7 @@ static int listTypeEqual(listTypeEntry *entry, robj *o) {
...
@@ -5131,7 +5131,7 @@ static int listTypeEqual(listTypeEntry *entry, robj *o) {
if
(
li
->
encoding
==
REDIS_ENCODING_ZIPLIST
)
{
if
(
li
->
encoding
==
REDIS_ENCODING_ZIPLIST
)
{
redisAssert
(
o
->
encoding
==
REDIS_ENCODING_RAW
);
redisAssert
(
o
->
encoding
==
REDIS_ENCODING_RAW
);
return
ziplistCompare
(
entry
->
zi
,
o
->
ptr
,
sdslen
(
o
->
ptr
));
return
ziplistCompare
(
entry
->
zi
,
o
->
ptr
,
sdslen
(
o
->
ptr
));
} else if (li->encoding == REDIS_ENCODING_LIST) {
}
else
if
(
li
->
encoding
==
REDIS_ENCODING_
LINKED
LIST
)
{
return
equalStringObjects
(
o
,
listNodeValue
(
entry
->
ln
));
return
equalStringObjects
(
o
,
listNodeValue
(
entry
->
ln
));
}
else
{
}
else
{
redisPanic
(
"Unknown list encoding"
);
redisPanic
(
"Unknown list encoding"
);
...
@@ -5150,7 +5150,7 @@ static void listTypeDelete(listTypeEntry *entry) {
...
@@ -5150,7 +5150,7 @@ static void listTypeDelete(listTypeEntry *entry) {
li
->
zi
=
p
;
li
->
zi
=
p
;
else
else
li
->
zi
=
ziplistPrev
(
li
->
subject
->
ptr
,
p
);
li
->
zi
=
ziplistPrev
(
li
->
subject
->
ptr
,
p
);
} else if (entry->li->encoding == REDIS_ENCODING_LIST) {
}
else
if
(
entry
->
li
->
encoding
==
REDIS_ENCODING_
LINKED
LIST
)
{
listNode
*
next
;
listNode
*
next
;
if
(
li
->
direction
==
REDIS_TAIL
)
if
(
li
->
direction
==
REDIS_TAIL
)
next
=
entry
->
ln
->
next
;
next
=
entry
->
ln
->
next
;
...
@@ -5168,7 +5168,7 @@ static void listTypeConvert(robj *subject, int enc) {
...
@@ -5168,7 +5168,7 @@ static void listTypeConvert(robj *subject, int enc) {
listTypeEntry
entry
;
listTypeEntry
entry
;
redisAssert
(
subject
->
type
==
REDIS_LIST
);
redisAssert
(
subject
->
type
==
REDIS_LIST
);
if (enc == REDIS_ENCODING_LIST) {
if
(
enc
==
REDIS_ENCODING_
LINKED
LIST
)
{
list
*
l
=
listCreate
();
list
*
l
=
listCreate
();
listSetFreeMethod
(
l
,
decrRefCount
);
listSetFreeMethod
(
l
,
decrRefCount
);
...
@@ -5177,7 +5177,7 @@ static void listTypeConvert(robj *subject, int enc) {
...
@@ -5177,7 +5177,7 @@ static void listTypeConvert(robj *subject, int enc) {
while
(
listTypeNext
(
li
,
&
entry
))
listAddNodeTail
(
l
,
listTypeGet
(
&
entry
));
while
(
listTypeNext
(
li
,
&
entry
))
listAddNodeTail
(
l
,
listTypeGet
(
&
entry
));
listTypeReleaseIterator
(
li
);
listTypeReleaseIterator
(
li
);
subject->encoding = REDIS_ENCODING_LIST;
subject
->
encoding
=
REDIS_ENCODING_
LINKED
LIST
;
zfree
(
subject
->
ptr
);
zfree
(
subject
->
ptr
);
subject
->
ptr
=
l
;
subject
->
ptr
=
l
;
}
else
{
}
else
{
...
@@ -5253,7 +5253,7 @@ static void pushxGenericCommand(redisClient *c, robj *refval, robj *val, int whe
...
@@ -5253,7 +5253,7 @@ static void pushxGenericCommand(redisClient *c, robj *refval, robj *val, int whe
/* Check if the length exceeds the ziplist length threshold. */
/* Check if the length exceeds the ziplist length threshold. */
if
(
subject
->
encoding
==
REDIS_ENCODING_ZIPLIST
&&
if
(
subject
->
encoding
==
REDIS_ENCODING_ZIPLIST
&&
ziplistLen
(
subject
->
ptr
)
>
server
.
list_max_ziplist_entries
)
ziplistLen
(
subject
->
ptr
)
>
server
.
list_max_ziplist_entries
)
listTypeConvert(subject,REDIS_ENCODING_LIST);
listTypeConvert
(
subject
,
REDIS_ENCODING_
LINKED
LIST
);
server
.
dirty
++
;
server
.
dirty
++
;
}
else
{
}
else
{
/* Notify client of a failed insert */
/* Notify client of a failed insert */
...
@@ -5315,7 +5315,7 @@ static void lindexCommand(redisClient *c) {
...
@@ -5315,7 +5315,7 @@ static void lindexCommand(redisClient *c) {
}
else
{
}
else
{
addReply
(
c
,
shared
.
nullbulk
);
addReply
(
c
,
shared
.
nullbulk
);
}
}
} else if (o->encoding == REDIS_ENCODING_LIST) {
}
else
if
(
o
->
encoding
==
REDIS_ENCODING_
LINKED
LIST
)
{
listNode
*
ln
=
listIndex
(
o
->
ptr
,
index
);
listNode
*
ln
=
listIndex
(
o
->
ptr
,
index
);
if
(
ln
!=
NULL
)
{
if
(
ln
!=
NULL
)
{
value
=
listNodeValue
(
ln
);
value
=
listNodeValue
(
ln
);
...
@@ -5348,7 +5348,7 @@ static void lsetCommand(redisClient *c) {
...
@@ -5348,7 +5348,7 @@ static void lsetCommand(redisClient *c) {
addReply
(
c
,
shared
.
ok
);
addReply
(
c
,
shared
.
ok
);
server
.
dirty
++
;
server
.
dirty
++
;
}
}
} else if (o->encoding == REDIS_ENCODING_LIST) {
}
else
if
(
o
->
encoding
==
REDIS_ENCODING_
LINKED
LIST
)
{
listNode
*
ln
=
listIndex
(
o
->
ptr
,
index
);
listNode
*
ln
=
listIndex
(
o
->
ptr
,
index
);
if
(
ln
==
NULL
)
{
if
(
ln
==
NULL
)
{
addReply
(
c
,
shared
.
outofrangeerr
);
addReply
(
c
,
shared
.
outofrangeerr
);
...
@@ -5460,7 +5460,7 @@ static void ltrimCommand(redisClient *c) {
...
@@ -5460,7 +5460,7 @@ static void ltrimCommand(redisClient *c) {
if
(
o
->
encoding
==
REDIS_ENCODING_ZIPLIST
)
{
if
(
o
->
encoding
==
REDIS_ENCODING_ZIPLIST
)
{
o
->
ptr
=
ziplistDeleteRange
(
o
->
ptr
,
0
,
ltrim
);
o
->
ptr
=
ziplistDeleteRange
(
o
->
ptr
,
0
,
ltrim
);
o
->
ptr
=
ziplistDeleteRange
(
o
->
ptr
,
-
rtrim
,
rtrim
);
o
->
ptr
=
ziplistDeleteRange
(
o
->
ptr
,
-
rtrim
,
rtrim
);
} else if (o->encoding == REDIS_ENCODING_LIST) {
}
else
if
(
o
->
encoding
==
REDIS_ENCODING_
LINKED
LIST
)
{
list
=
o
->
ptr
;
list
=
o
->
ptr
;
for
(
j
=
0
;
j
<
ltrim
;
j
++
)
{
for
(
j
=
0
;
j
<
ltrim
;
j
++
)
{
ln
=
listFirst
(
list
);
ln
=
listFirst
(
list
);
...
@@ -9150,7 +9150,7 @@ static int rewriteAppendOnlyFile(char *filename) {
...
@@ -9150,7 +9150,7 @@ static int rewriteAppendOnlyFile(char *filename) {
}
}
p
=
ziplistNext
(
zl
,
p
);
p
=
ziplistNext
(
zl
,
p
);
}
}
} else if (o->encoding == REDIS_ENCODING_LIST) {
}
else
if
(
o
->
encoding
==
REDIS_ENCODING_
LINKED
LIST
)
{
list
*
list
=
o
->
ptr
;
list
*
list
=
o
->
ptr
;
listNode
*
ln
;
listNode
*
ln
;
listIter
li
;
listIter
li
;
...
...
tests/unit/type/list.tcl
View file @
7e79de54
...
@@ -33,7 +33,7 @@ start_server {
...
@@ -33,7 +33,7 @@ start_server {
# first lpush then rpush
# first lpush then rpush
assert_equal 1
[
r lpush mylist1 $large_value
]
assert_equal 1
[
r lpush mylist1 $large_value
]
assert_encoding list mylist1
assert_encoding
linked
list mylist1
assert_equal 2
[
r rpush mylist1 b
]
assert_equal 2
[
r rpush mylist1 b
]
assert_equal 3
[
r rpush mylist1 c
]
assert_equal 3
[
r rpush mylist1 c
]
assert_equal 3
[
r llen mylist1
]
assert_equal 3
[
r llen mylist1
]
...
@@ -43,7 +43,7 @@ start_server {
...
@@ -43,7 +43,7 @@ start_server {
# first rpush then lpush
# first rpush then lpush
assert_equal 1
[
r rpush mylist2 $large_value
]
assert_equal 1
[
r rpush mylist2 $large_value
]
assert_encoding list mylist2
assert_encoding
linked
list mylist2
assert_equal 2
[
r lpush mylist2 b
]
assert_equal 2
[
r lpush mylist2 b
]
assert_equal 3
[
r lpush mylist2 c
]
assert_equal 3
[
r lpush mylist2 c
]
assert_equal 3
[
r llen mylist2
]
assert_equal 3
[
r llen mylist2
]
...
@@ -70,12 +70,12 @@ start_server {
...
@@ -70,12 +70,12 @@ start_server {
assert_encoding ziplist $key
assert_encoding ziplist $key
}
}
proc create_list
{
key entries
}
{
proc create_
linked
list
{
key entries
}
{
r del $key
r del $key
r rpush $key
"aaaaaaaaaaaaaaaaa"
r rpush $key
"aaaaaaaaaaaaaaaaa"
foreach entry $entries
{
r rpush $key $entry
}
foreach entry $entries
{
r rpush $key $entry
}
assert_equal
"aaaaaaaaaaaaaaaaa"
[
r lpop $key
]
assert_equal
"aaaaaaaaaaaaaaaaa"
[
r lpop $key
]
assert_encoding list $key
assert_encoding
linked
list $key
}
}
test
{
LPUSHX, RPUSHX - generic
}
{
test
{
LPUSHX, RPUSHX - generic
}
{
...
@@ -86,7 +86,7 @@ start_server {
...
@@ -86,7 +86,7 @@ start_server {
assert_equal 0
[
r llen xlist
]
assert_equal 0
[
r llen xlist
]
}
}
foreach type
{
ziplist list
}
{
foreach type
{
ziplist
linked
list
}
{
test
"LPUSHX, RPUSHX -
$type
"
{
test
"LPUSHX, RPUSHX -
$type
"
{
create_$type xlist
{
b c
}
create_$type xlist
{
b c
}
assert_equal 3
[
r rpushx xlist d
]
assert_equal 3
[
r rpushx xlist d
]
...
@@ -119,18 +119,18 @@ start_server {
...
@@ -119,18 +119,18 @@ start_server {
# convert when a large value is pushed
# convert when a large value is pushed
create_ziplist xlist a
create_ziplist xlist a
assert_equal 2
[
r rpushx xlist $large_value
]
assert_equal 2
[
r rpushx xlist $large_value
]
assert_encoding list xlist
assert_encoding
linked
list xlist
create_ziplist xlist a
create_ziplist xlist a
assert_equal 2
[
r lpushx xlist $large_value
]
assert_equal 2
[
r lpushx xlist $large_value
]
assert_encoding list xlist
assert_encoding
linked
list xlist
# convert when the length threshold is exceeded
# convert when the length threshold is exceeded
create_ziplist xlist
[
lrepeat 256 a
]
create_ziplist xlist
[
lrepeat 256 a
]
assert_equal 257
[
r rpushx xlist b
]
assert_equal 257
[
r rpushx xlist b
]
assert_encoding list xlist
assert_encoding
linked
list xlist
create_ziplist xlist
[
lrepeat 256 a
]
create_ziplist xlist
[
lrepeat 256 a
]
assert_equal 257
[
r lpushx xlist b
]
assert_equal 257
[
r lpushx xlist b
]
assert_encoding list xlist
assert_encoding
linked
list xlist
}
}
test
{
LINSERT convert from ziplist to list
}
{
test
{
LINSERT convert from ziplist to list
}
{
...
@@ -139,18 +139,18 @@ start_server {
...
@@ -139,18 +139,18 @@ start_server {
# convert when a large value is inserted
# convert when a large value is inserted
create_ziplist xlist a
create_ziplist xlist a
assert_equal 2
[
r linsert xlist before a $large_value
]
assert_equal 2
[
r linsert xlist before a $large_value
]
assert_encoding list xlist
assert_encoding
linked
list xlist
create_ziplist xlist a
create_ziplist xlist a
assert_equal 2
[
r linsert xlist after a $large_value
]
assert_equal 2
[
r linsert xlist after a $large_value
]
assert_encoding list xlist
assert_encoding
linked
list xlist
# convert when the length threshold is exceeded
# convert when the length threshold is exceeded
create_ziplist xlist
[
lrepeat 256 a
]
create_ziplist xlist
[
lrepeat 256 a
]
assert_equal 257
[
r linsert xlist before a a
]
assert_equal 257
[
r linsert xlist before a a
]
assert_encoding list xlist
assert_encoding
linked
list xlist
create_ziplist xlist
[
lrepeat 256 a
]
create_ziplist xlist
[
lrepeat 256 a
]
assert_equal 257
[
r linsert xlist after a a
]
assert_equal 257
[
r linsert xlist after a a
]
assert_encoding list xlist
assert_encoding
linked
list xlist
# don't convert when the value could not be inserted
# don't convert when the value could not be inserted
create_ziplist xlist
[
lrepeat 256 a
]
create_ziplist xlist
[
lrepeat 256 a
]
...
@@ -161,7 +161,7 @@ start_server {
...
@@ -161,7 +161,7 @@ start_server {
assert_encoding ziplist xlist
assert_encoding ziplist xlist
}
}
foreach
{
type num
}
{
ziplist 250 list 500
}
{
foreach
{
type num
}
{
ziplist 250
linked
list 500
}
{
proc check_numbered_list_consistency
{
key
}
{
proc check_numbered_list_consistency
{
key
}
{
set len
[
r llen $key
]
set len
[
r llen $key
]
for
{
set i 0
}
{
$i
< $len
}
{
incr i
}
{
for
{
set i 0
}
{
$i
< $len
}
{
incr i
}
{
...
@@ -227,7 +227,7 @@ start_server {
...
@@ -227,7 +227,7 @@ start_server {
assert_error ERR*
{
r rpush mylist 0
}
assert_error ERR*
{
r rpush mylist 0
}
}
}
foreach type
{
ziplist list
}
{
foreach type
{
ziplist
linked
list
}
{
test
"RPOPLPUSH base case -
$type
"
{
test
"RPOPLPUSH base case -
$type
"
{
r del mylist1 mylist2
r del mylist1 mylist2
create_$type mylist1
{
a b c d
}
create_$type mylist1
{
a b c d
}
...
@@ -245,7 +245,7 @@ start_server {
...
@@ -245,7 +245,7 @@ start_server {
assert_equal
{
c a b
}
[
r lrange mylist 0 -1
]
assert_equal
{
c a b
}
[
r lrange mylist 0 -1
]
}
}
foreach othertype
{
ziplist list
}
{
foreach othertype
{
ziplist
linked
list
}
{
test
"RPOPLPUSH with
$type
source and existing target
$othertype
"
{
test
"RPOPLPUSH with
$type
source and existing target
$othertype
"
{
create_$type srclist
{
a b c d
}
create_$type srclist
{
a b c d
}
create_$othertype dstlist
{
x
}
create_$othertype dstlist
{
x
}
...
@@ -285,7 +285,7 @@ start_server {
...
@@ -285,7 +285,7 @@ start_server {
assert_equal
{}
[
r rpoplpush srclist dstlist
]
assert_equal
{}
[
r rpoplpush srclist dstlist
]
}
{}
}
{}
foreach type
{
ziplist list
}
{
foreach type
{
ziplist
linked
list
}
{
test
"Basic LPOP/RPOP -
$type
"
{
test
"Basic LPOP/RPOP -
$type
"
{
create_$type mylist
{
0 1 2
}
create_$type mylist
{
0 1 2
}
assert_equal 0
[
r lpop mylist
]
assert_equal 0
[
r lpop mylist
]
...
@@ -305,7 +305,7 @@ start_server {
...
@@ -305,7 +305,7 @@ start_server {
assert_error ERR*kind*
{
r rpop notalist
}
assert_error ERR*kind*
{
r rpop notalist
}
}
}
foreach
{
type num
}
{
ziplist 250 list 500
}
{
foreach
{
type num
}
{
ziplist 250
linked
list 500
}
{
test
"Mass RPOP/LPOP -
$type
"
{
test
"Mass RPOP/LPOP -
$type
"
{
r del mylist
r del mylist
set sum1 0
set sum1 0
...
@@ -323,7 +323,7 @@ start_server {
...
@@ -323,7 +323,7 @@ start_server {
}
}
}
}
foreach type
{
ziplist list
}
{
foreach type
{
ziplist
linked
list
}
{
test
"LRANGE basics -
$type
"
{
test
"LRANGE basics -
$type
"
{
create_$type mylist
{
0 1 2 3 4 5 6 7 8 9
}
create_$type mylist
{
0 1 2 3 4 5 6 7 8 9
}
assert_equal
{
1 2 3 4 5 6 7 8
}
[
r lrange mylist 1 -2
]
assert_equal
{
1 2 3 4 5 6 7 8
}
[
r lrange mylist 1 -2
]
...
@@ -346,7 +346,7 @@ start_server {
...
@@ -346,7 +346,7 @@ start_server {
assert_equal
{}
[
r lrange nosuchkey 0 1
]
assert_equal
{}
[
r lrange nosuchkey 0 1
]
}
}
foreach type
{
ziplist list
}
{
foreach type
{
ziplist
linked
list
}
{
proc trim_list
{
type min max
}
{
proc trim_list
{
type min max
}
{
r del mylist
r del mylist
create_$type mylist
{
1 2 3 4 5
}
create_$type mylist
{
1 2 3 4 5
}
...
@@ -384,10 +384,10 @@ start_server {
...
@@ -384,10 +384,10 @@ start_server {
if
{
$type
eq
"list"
}
{
if
{
$type
eq
"list"
}
{
r rpush mylist
"aaaaaaaaaaaaaaaaa"
r rpush mylist
"aaaaaaaaaaaaaaaaa"
r rpop mylist
r rpop mylist
assert_encoding list mylist
assert_encoding
linked
list mylist
}
}
for
{
set i 0
}
{
$i
< 1000
}
{
incr i
}
{
for
{
set i 0
}
{
$i
< 1000
0
}
{
incr i
}
{
set min
[
expr
{
int
(
rand
()
*$startlen
)}]
set min
[
expr
{
int
(
rand
()
*$startlen
)}]
set max
[
expr
{
$min
+int
(
rand
()
*$startlen
)}]
set max
[
expr
{
$min
+int
(
rand
()
*$startlen
)}]
set mylist
[
lrange $mylist $min $max
]
set mylist
[
lrange $mylist $min $max
]
...
@@ -404,7 +404,7 @@ start_server {
...
@@ -404,7 +404,7 @@ start_server {
}
}
}
}
foreach type
{
ziplist list
}
{
foreach type
{
ziplist
linked
list
}
{
test
"LSET -
$type
"
{
test
"LSET -
$type
"
{
create_$type mylist
{
99 98 97 96 95
}
create_$type mylist
{
99 98 97 96 95
}
r lset mylist 1 foo
r lset mylist 1 foo
...
@@ -426,7 +426,7 @@ start_server {
...
@@ -426,7 +426,7 @@ start_server {
assert_error ERR*value*
{
r lset nolist 0 foo
}
assert_error ERR*value*
{
r lset nolist 0 foo
}
}
}
foreach type
{
ziplist list
}
{
foreach type
{
ziplist
linked
list
}
{
test
"LREM remove all the occurrences -
$type
"
{
test
"LREM remove all the occurrences -
$type
"
{
create_$type mylist
{
foo bar foobar foobared zap bar test foo
}
create_$type mylist
{
foo bar foobar foobared zap bar test foo
}
assert_equal 2
[
r lrem mylist 0 bar
]
assert_equal 2
[
r lrem mylist 0 bar
]
...
...
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