mirror of
https://github.com/fluencelabs/redis
synced 2025-03-18 16:40:50 +00:00
redis-benchmark multi bulk reply support hopefully fixed
This commit is contained in:
parent
2895e86267
commit
6c4e61b389
17
benchmark.c
17
benchmark.c
@ -48,7 +48,7 @@
|
||||
#define REPLY_INT 0
|
||||
#define REPLY_RETCODE 1
|
||||
#define REPLY_BULK 2
|
||||
#define REPLY_MBULK 2
|
||||
#define REPLY_MBULK 3
|
||||
|
||||
#define CLIENT_CONNECTING 0
|
||||
#define CLIENT_SENDQUERY 1
|
||||
@ -218,6 +218,8 @@ static void readHandler(aeEventLoop *el, int fd, void *privdata, int mask)
|
||||
c->ibuf = sdscatlen(c->ibuf,buf,nread);
|
||||
|
||||
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 ||
|
||||
c->replytype == REPLY_RETCODE ||
|
||||
(c->replytype == REPLY_BULK && c->readlen == -1) ||
|
||||
@ -225,10 +227,14 @@ processdata:
|
||||
(c->replytype == REPLY_MBULK && c->mbulk == -1)) {
|
||||
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 (c->replytype == REPLY_BULK ||
|
||||
(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-1) = '\0';
|
||||
c->readlen = atoi(c->ibuf+1)+2;
|
||||
@ -239,7 +245,11 @@ processdata:
|
||||
}
|
||||
/* Leave all the rest in the input buffer */
|
||||
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) {
|
||||
/* Read the count of a multi bulk reply. That is, how many
|
||||
* bulk replies we have to read next. "*<count>" protocol. */
|
||||
*p = '\0';
|
||||
*(p-1) = '\0';
|
||||
c->mbulk = atoi(c->ibuf+1);
|
||||
@ -259,8 +269,9 @@ processdata:
|
||||
}
|
||||
}
|
||||
/* bulk read, did we read everything? */
|
||||
if ((c->replytype == REPLY_BULK || c->replytype == REPLY_MBULK) &&
|
||||
(unsigned)c->readlen <= sdslen(c->ibuf))
|
||||
if (((c->replytype == REPLY_MBULK && c->mbulk != -1) ||
|
||||
(c->replytype == REPLY_BULK)) && c->readlen != -1 &&
|
||||
(unsigned)c->readlen <= sdslen(c->ibuf))
|
||||
{
|
||||
if (c->replytype == REPLY_BULK) {
|
||||
clientDone(c);
|
||||
|
Loading…
x
Reference in New Issue
Block a user