]> git.saurik.com Git - redis.git/commitdiff
redis-benchmark multi bulk reply support hopefully fixed
authorantirez <antirez@gmail.com>
Wed, 18 Nov 2009 17:47:05 +0000 (18:47 +0100)
committerantirez <antirez@gmail.com>
Wed, 18 Nov 2009 17:47:05 +0000 (18:47 +0100)
benchmark.c

index 29fc7f32ced2d9db9993f9596a6ca8e1061112a4..ca2a0f0bb37e540ddfd34020e4006620c6d354b5 100644 (file)
@@ -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);