mirror of
https://github.com/fluencelabs/redis
synced 2025-03-19 17:10: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_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)
|
|||||||
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:
|
|||||||
(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:
|
|||||||
}
|
}
|
||||||
/* 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:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* 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);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user