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
6c4e61b3
Commit
6c4e61b3
authored
Nov 18, 2009
by
antirez
Browse files
redis-benchmark multi bulk reply support hopefully fixed
parent
2895e862
Changes
1
Hide whitespace changes
Inline
Side-by-side
benchmark.c
View file @
6c4e61b3
...
@@ -48,7 +48,7 @@
...
@@ -48,7 +48,7 @@
#define REPLY_INT 0
#define REPLY_INT 0
#define REPLY_RETCODE 1
#define REPLY_RETCODE 1
#define REPLY_BULK 2
#define REPLY_BULK 2
#define REPLY_MBULK
2
#define REPLY_MBULK
3
#define CLIENT_CONNECTING 0
#define CLIENT_CONNECTING 0
#define CLIENT_SENDQUERY 1
#define CLIENT_SENDQUERY 1
...
@@ -218,6 +218,8 @@ static void readHandler(aeEventLoop *el, int fd, void *privdata, int mask)
...
@@ -218,6 +218,8 @@ static void readHandler(aeEventLoop *el, int fd, void *privdata, int mask)
c
->
ibuf
=
sdscatlen
(
c
->
ibuf
,
buf
,
nread
);
c
->
ibuf
=
sdscatlen
(
c
->
ibuf
,
buf
,
nread
);
processdata:
processdata:
/* Are we waiting for the first line of the command of for sdf
* count in bulk or multi bulk operations? */
if
(
c
->
replytype
==
REPLY_INT
||
if
(
c
->
replytype
==
REPLY_INT
||
c
->
replytype
==
REPLY_RETCODE
||
c
->
replytype
==
REPLY_RETCODE
||
(
c
->
replytype
==
REPLY_BULK
&&
c
->
readlen
==
-
1
)
||
(
c
->
replytype
==
REPLY_BULK
&&
c
->
readlen
==
-
1
)
||
...
@@ -225,10 +227,14 @@ processdata:
...
@@ -225,10 +227,14 @@ processdata:
(
c
->
replytype
==
REPLY_MBULK
&&
c
->
mbulk
==
-
1
))
{
(
c
->
replytype
==
REPLY_MBULK
&&
c
->
mbulk
==
-
1
))
{
char
*
p
;
char
*
p
;
/* Check if the first line is complete. This is only true if
* there is a newline inside the buffer. */
if
((
p
=
strchr
(
c
->
ibuf
,
'\n'
))
!=
NULL
)
{
if
((
p
=
strchr
(
c
->
ibuf
,
'\n'
))
!=
NULL
)
{
if
(
c
->
replytype
==
REPLY_BULK
||
if
(
c
->
replytype
==
REPLY_BULK
||
(
c
->
replytype
==
REPLY_MBULK
&&
c
->
mbulk
!=
-
1
))
(
c
->
replytype
==
REPLY_MBULK
&&
c
->
mbulk
!=
-
1
))
{
{
/* Read the count of a bulk reply (being it a single bulk or
* a multi bulk reply). "$<count>" for the protocol spec. */
*
p
=
'\0'
;
*
p
=
'\0'
;
*
(
p
-
1
)
=
'\0'
;
*
(
p
-
1
)
=
'\0'
;
c
->
readlen
=
atoi
(
c
->
ibuf
+
1
)
+
2
;
c
->
readlen
=
atoi
(
c
->
ibuf
+
1
)
+
2
;
...
@@ -239,7 +245,11 @@ processdata:
...
@@ -239,7 +245,11 @@ processdata:
}
}
/* Leave all the rest in the input buffer */
/* Leave all the rest in the input buffer */
c
->
ibuf
=
sdsrange
(
c
->
ibuf
,(
p
-
c
->
ibuf
)
+
1
,
-
1
);
c
->
ibuf
=
sdsrange
(
c
->
ibuf
,(
p
-
c
->
ibuf
)
+
1
,
-
1
);
/* fall through to reach the point where the code will try
* to check if the bulk reply is complete. */
}
else
if
(
c
->
replytype
==
REPLY_MBULK
&&
c
->
mbulk
==
-
1
)
{
}
else
if
(
c
->
replytype
==
REPLY_MBULK
&&
c
->
mbulk
==
-
1
)
{
/* Read the count of a multi bulk reply. That is, how many
* bulk replies we have to read next. "*<count>" protocol. */
*
p
=
'\0'
;
*
p
=
'\0'
;
*
(
p
-
1
)
=
'\0'
;
*
(
p
-
1
)
=
'\0'
;
c
->
mbulk
=
atoi
(
c
->
ibuf
+
1
);
c
->
mbulk
=
atoi
(
c
->
ibuf
+
1
);
...
@@ -259,8 +269,9 @@ processdata:
...
@@ -259,8 +269,9 @@ processdata:
}
}
}
}
/* bulk read, did we read everything? */
/* bulk read, did we read everything? */
if
((
c
->
replytype
==
REPLY_BULK
||
c
->
replytype
==
REPLY_MBULK
)
&&
if
(((
c
->
replytype
==
REPLY_MBULK
&&
c
->
mbulk
!=
-
1
)
||
(
unsigned
)
c
->
readlen
<=
sdslen
(
c
->
ibuf
))
(
c
->
replytype
==
REPLY_BULK
))
&&
c
->
readlen
!=
-
1
&&
(
unsigned
)
c
->
readlen
<=
sdslen
(
c
->
ibuf
))
{
{
if
(
c
->
replytype
==
REPLY_BULK
)
{
if
(
c
->
replytype
==
REPLY_BULK
)
{
clientDone
(
c
);
clientDone
(
c
);
...
...
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