This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Tarantool -- an efficient key/value data store".

The branch memcached-expire-stat has been created
        at  44f8a11daa7b544173960d69bdc44a2fa3aa19a7 (commit)


commit 44f8a11daa7b544173960d69bdc44a2fa3aa19a7
Author: Yuriy Vostrikov <[email protected]>
Date:   Fri Dec 3 15:18:28 2010 +0300

    [box] Enable accidently disabled expire in memcached mode.

diff --git a/mod/silverbox/box.c b/mod/silverbox/box.c
index 2496b60..458ec4f 100644
--- a/mod/silverbox/box.c
+++ b/mod/silverbox/box.c
@@ -1639,13 +1639,11 @@ memcached_bound_to_primary(void *data __unused__)
 {
        box_bound_to_primary(NULL);
 
-       if (0 && !cfg.remote_hot_standby) {
-               struct fiber *expire =
-                       fiber_create("memecached_expire", -1, -1, 
memcached_expire, NULL);
-               if (expire == NULL)
-                       panic("can't stared expire fiber");
-               fiber_call(expire);
-       }
+       struct fiber *expire =
+               fiber_create("memecached_expire", -1, -1, memcached_expire, 
NULL);
+       if (expire == NULL)
+               panic("can't start the expire fiber");
+       fiber_call(expire);
 }
 
 static void
@@ -1749,6 +1747,9 @@ mod_init(void)
        if (cfg.memcached != 0) {
                if (cfg.secondary_port != 0)
                        panic("in memcached mode secondary_port must be 0");
+               if (cfg.remote_hot_standby)
+                       panic("remote replication is not supported in memcached 
mode.");
+
                memcached_init();
        }
 

commit 79821f14efd1dbf51c7382c0f18a6e8f664bc6c6
Author: Yuriy Vostrikov <[email protected]>
Date:   Fri Dec 3 15:13:49 2010 +0300

    [box] Repair memcached statistic.
        * Enable statistic collection.
        * Add counter of expire rate.

diff --git a/mod/silverbox/box.c b/mod/silverbox/box.c
index 66d6d44..2496b60 100644
--- a/mod/silverbox/box.c
+++ b/mod/silverbox/box.c
@@ -1749,6 +1749,7 @@ mod_init(void)
        if (cfg.memcached != 0) {
                if (cfg.secondary_port != 0)
                        panic("in memcached mode secondary_port must be 0");
+               memcached_init();
        }
 
        title("loading");
diff --git a/mod/silverbox/box.h b/mod/silverbox/box.h
index 505ed88..888af4c 100644
--- a/mod/silverbox/box.h
+++ b/mod/silverbox/box.h
@@ -189,5 +189,6 @@ void *next_field(void *f);
 void append_field(struct tbuf *b, void *f);
 void *tuple_field(struct box_tuple *tuple, size_t i);
 
+void memcached_init(void);
 void memcached_expire(void *data __unused__);
 #endif
diff --git a/mod/silverbox/memcached.c b/mod/silverbox/memcached.c
index f8a5ca1..a818f88 100644
--- a/mod/silverbox/memcached.c
+++ b/mod/silverbox/memcached.c
@@ -46,7 +46,8 @@
 #define STAT(_)                                        \
         _(MEMC_GET, 1)                         \
         _(MEMC_GET_MISS, 2)                    \
-       _(MEMC_GET_HIT, 3)
+       _(MEMC_GET_HIT, 3)                      \
+       _(MEMC_EXPIRED_KEYS, 4)
 
 ENUM(memcached_stat, STAT);
 STRS(memcached_stat, STAT);
@@ -64,7 +65,7 @@ struct meta {
 } __packed__;
 
 
-#line 68 "mod/silverbox/memcached.c"
+#line 69 "mod/silverbox/memcached.c"
 static const int memcached_start = 1;
 static const int memcached_first_final = 197;
 static const int memcached_error = 0;
@@ -72,7 +73,7 @@ static const int memcached_error = 0;
 static const int memcached_en_main = 1;
 
 
-#line 67 "mod/silverbox/memcached.rl"
+#line 68 "mod/silverbox/memcached.rl"
 
 
 
@@ -261,12 +262,12 @@ memcached_dispatch(struct box_txn *txn)
 })
 
        
-#line 265 "mod/silverbox/memcached.c"
+#line 266 "mod/silverbox/memcached.c"
        {
        cs = memcached_start;
        }
 
-#line 270 "mod/silverbox/memcached.c"
+#line 271 "mod/silverbox/memcached.c"
        {
        if ( p == pe )
                goto _test_eof;
@@ -324,7 +325,7 @@ case 5:
                goto st0;
        goto tr15;
 tr15:
-#line 476 "mod/silverbox/memcached.rl"
+#line 477 "mod/silverbox/memcached.rl"
        {
                        fstart = p;
                        for (; p < pe && *p != ' ' && *p != '\r' && *p != '\n'; 
p++);
@@ -341,7 +342,7 @@ st6:
        if ( ++p == pe )
                goto _test_eof6;
 case 6:
-#line 345 "mod/silverbox/memcached.c"
+#line 346 "mod/silverbox/memcached.c"
        if ( (*p) == 32 )
                goto st7;
        goto st0;
@@ -355,49 +356,49 @@ case 7:
                goto tr17;
        goto st0;
 tr17:
-#line 475 "mod/silverbox/memcached.rl"
+#line 476 "mod/silverbox/memcached.rl"
        { fstart = p; }
        goto st8;
 st8:
        if ( ++p == pe )
                goto _test_eof8;
 case 8:
-#line 366 "mod/silverbox/memcached.c"
+#line 367 "mod/silverbox/memcached.c"
        if ( (*p) == 32 )
                goto tr18;
        if ( 48 <= (*p) && (*p) <= 57 )
                goto st8;
        goto st0;
 tr18:
-#line 499 "mod/silverbox/memcached.rl"
+#line 500 "mod/silverbox/memcached.rl"
        {flags = natoq(fstart, p);}
        goto st9;
 st9:
        if ( ++p == pe )
                goto _test_eof9;
 case 9:
-#line 380 "mod/silverbox/memcached.c"
+#line 381 "mod/silverbox/memcached.c"
        if ( (*p) == 32 )
                goto st9;
        if ( 48 <= (*p) && (*p) <= 57 )
                goto tr21;
        goto st0;
 tr21:
-#line 475 "mod/silverbox/memcached.rl"
+#line 476 "mod/silverbox/memcached.rl"
        { fstart = p; }
        goto st10;
 st10:
        if ( ++p == pe )
                goto _test_eof10;
 case 10:
-#line 394 "mod/silverbox/memcached.c"
+#line 395 "mod/silverbox/memcached.c"
        if ( (*p) == 32 )
                goto tr22;
        if ( 48 <= (*p) && (*p) <= 57 )
                goto st10;
        goto st0;
 tr22:
-#line 492 "mod/silverbox/memcached.rl"
+#line 493 "mod/silverbox/memcached.rl"
        {
                        exptime = natoq(fstart, p);
                        if (exptime > 0 && exptime <= 60*60*24*30)
@@ -408,21 +409,21 @@ st11:
        if ( ++p == pe )
                goto _test_eof11;
 case 11:
-#line 412 "mod/silverbox/memcached.c"
+#line 413 "mod/silverbox/memcached.c"
        if ( (*p) == 32 )
                goto st11;
        if ( 48 <= (*p) && (*p) <= 57 )
                goto tr25;
        goto st0;
 tr25:
-#line 475 "mod/silverbox/memcached.rl"
+#line 476 "mod/silverbox/memcached.rl"
        { fstart = p; }
        goto st12;
 st12:
        if ( ++p == pe )
                goto _test_eof12;
 case 12:
-#line 426 "mod/silverbox/memcached.c"
+#line 427 "mod/silverbox/memcached.c"
        switch( (*p) ) {
                case 10: goto tr26;
                case 13: goto tr27;
@@ -432,11 +433,11 @@ case 12:
                goto st12;
        goto st0;
 tr26:
-#line 500 "mod/silverbox/memcached.rl"
+#line 501 "mod/silverbox/memcached.rl"
        {bytes = natoq(fstart, p);}
-#line 532 "mod/silverbox/memcached.rl"
+#line 533 "mod/silverbox/memcached.rl"
        { p++; }
-#line 505 "mod/silverbox/memcached.rl"
+#line 506 "mod/silverbox/memcached.rl"
        {
                        size_t parsed = p - (u8 *)fiber->rbuf->data;
                        while (fiber->rbuf->len - parsed < bytes + 2) {
@@ -457,13 +458,13 @@ tr26:
                                goto exit;
                        }
                }
-#line 526 "mod/silverbox/memcached.rl"
+#line 527 "mod/silverbox/memcached.rl"
        {
                        done = true;
                        stats.bytes_read += p - (u8 *)fiber->rbuf->data;
                        tbuf_peek(fiber->rbuf, p - (u8 *)fiber->rbuf->data);
                }
-#line 260 "mod/silverbox/memcached.rl"
+#line 261 "mod/silverbox/memcached.rl"
        {
                        key = read_field(keys);
                        struct box_tuple *tuple = find(key);
@@ -474,9 +475,9 @@ tr26:
                }
        goto st197;
 tr30:
-#line 532 "mod/silverbox/memcached.rl"
+#line 533 "mod/silverbox/memcached.rl"
        { p++; }
-#line 505 "mod/silverbox/memcached.rl"
+#line 506 "mod/silverbox/memcached.rl"
        {
                        size_t parsed = p - (u8 *)fiber->rbuf->data;
                        while (fiber->rbuf->len - parsed < bytes + 2) {
@@ -497,13 +498,13 @@ tr30:
                                goto exit;
                        }
                }
-#line 526 "mod/silverbox/memcached.rl"
+#line 527 "mod/silverbox/memcached.rl"
        {
                        done = true;
                        stats.bytes_read += p - (u8 *)fiber->rbuf->data;
                        tbuf_peek(fiber->rbuf, p - (u8 *)fiber->rbuf->data);
                }
-#line 260 "mod/silverbox/memcached.rl"
+#line 261 "mod/silverbox/memcached.rl"
        {
                        key = read_field(keys);
                        struct box_tuple *tuple = find(key);
@@ -514,11 +515,11 @@ tr30:
                }
        goto st197;
 tr39:
-#line 534 "mod/silverbox/memcached.rl"
+#line 535 "mod/silverbox/memcached.rl"
        { noreply = true; }
-#line 532 "mod/silverbox/memcached.rl"
+#line 533 "mod/silverbox/memcached.rl"
        { p++; }
-#line 505 "mod/silverbox/memcached.rl"
+#line 506 "mod/silverbox/memcached.rl"
        {
                        size_t parsed = p - (u8 *)fiber->rbuf->data;
                        while (fiber->rbuf->len - parsed < bytes + 2) {
@@ -539,13 +540,13 @@ tr39:
                                goto exit;
                        }
                }
-#line 526 "mod/silverbox/memcached.rl"
+#line 527 "mod/silverbox/memcached.rl"
        {
                        done = true;
                        stats.bytes_read += p - (u8 *)fiber->rbuf->data;
                        tbuf_peek(fiber->rbuf, p - (u8 *)fiber->rbuf->data);
                }
-#line 260 "mod/silverbox/memcached.rl"
+#line 261 "mod/silverbox/memcached.rl"
        {
                        key = read_field(keys);
                        struct box_tuple *tuple = find(key);
@@ -556,11 +557,11 @@ tr39:
                }
        goto st197;
 tr58:
-#line 500 "mod/silverbox/memcached.rl"
+#line 501 "mod/silverbox/memcached.rl"
        {bytes = natoq(fstart, p);}
-#line 532 "mod/silverbox/memcached.rl"
+#line 533 "mod/silverbox/memcached.rl"
        { p++; }
-#line 505 "mod/silverbox/memcached.rl"
+#line 506 "mod/silverbox/memcached.rl"
        {
                        size_t parsed = p - (u8 *)fiber->rbuf->data;
                        while (fiber->rbuf->len - parsed < bytes + 2) {
@@ -581,13 +582,13 @@ tr58:
                                goto exit;
                        }
                }
-#line 526 "mod/silverbox/memcached.rl"
+#line 527 "mod/silverbox/memcached.rl"
        {
                        done = true;
                        stats.bytes_read += p - (u8 *)fiber->rbuf->data;
                        tbuf_peek(fiber->rbuf, p - (u8 *)fiber->rbuf->data);
                }
-#line 289 "mod/silverbox/memcached.rl"
+#line 290 "mod/silverbox/memcached.rl"
        {
                        struct tbuf *b;
                        void *value;
@@ -616,9 +617,9 @@ tr58:
                }
        goto st197;
 tr62:
-#line 532 "mod/silverbox/memcached.rl"
+#line 533 "mod/silverbox/memcached.rl"
        { p++; }
-#line 505 "mod/silverbox/memcached.rl"
+#line 506 "mod/silverbox/memcached.rl"
        {
                        size_t parsed = p - (u8 *)fiber->rbuf->data;
                        while (fiber->rbuf->len - parsed < bytes + 2) {
@@ -639,13 +640,13 @@ tr62:
                                goto exit;
                        }
                }
-#line 526 "mod/silverbox/memcached.rl"
+#line 527 "mod/silverbox/memcached.rl"
        {
                        done = true;
                        stats.bytes_read += p - (u8 *)fiber->rbuf->data;
                        tbuf_peek(fiber->rbuf, p - (u8 *)fiber->rbuf->data);
                }
-#line 289 "mod/silverbox/memcached.rl"
+#line 290 "mod/silverbox/memcached.rl"
        {
                        struct tbuf *b;
                        void *value;
@@ -674,11 +675,11 @@ tr62:
                }
        goto st197;
 tr71:
-#line 534 "mod/silverbox/memcached.rl"
+#line 535 "mod/silverbox/memcached.rl"
        { noreply = true; }
-#line 532 "mod/silverbox/memcached.rl"
+#line 533 "mod/silverbox/memcached.rl"
        { p++; }
-#line 505 "mod/silverbox/memcached.rl"
+#line 506 "mod/silverbox/memcached.rl"
        {
                        size_t parsed = p - (u8 *)fiber->rbuf->data;
                        while (fiber->rbuf->len - parsed < bytes + 2) {
@@ -699,13 +700,13 @@ tr71:
                                goto exit;
                        }
                }
-#line 526 "mod/silverbox/memcached.rl"
+#line 527 "mod/silverbox/memcached.rl"
        {
                        done = true;
                        stats.bytes_read += p - (u8 *)fiber->rbuf->data;
                        tbuf_peek(fiber->rbuf, p - (u8 *)fiber->rbuf->data);
                }
-#line 289 "mod/silverbox/memcached.rl"
+#line 290 "mod/silverbox/memcached.rl"
        {
                        struct tbuf *b;
                        void *value;
@@ -734,11 +735,11 @@ tr71:
                }
        goto st197;
 tr91:
-#line 501 "mod/silverbox/memcached.rl"
+#line 502 "mod/silverbox/memcached.rl"
        {cas = natoq(fstart, p);}
-#line 532 "mod/silverbox/memcached.rl"
+#line 533 "mod/silverbox/memcached.rl"
        { p++; }
-#line 505 "mod/silverbox/memcached.rl"
+#line 506 "mod/silverbox/memcached.rl"
        {
                        size_t parsed = p - (u8 *)fiber->rbuf->data;
                        while (fiber->rbuf->len - parsed < bytes + 2) {
@@ -759,13 +760,13 @@ tr91:
                                goto exit;
                        }
                }
-#line 526 "mod/silverbox/memcached.rl"
+#line 527 "mod/silverbox/memcached.rl"
        {
                        done = true;
                        stats.bytes_read += p - (u8 *)fiber->rbuf->data;
                        tbuf_peek(fiber->rbuf, p - (u8 *)fiber->rbuf->data);
                }
-#line 278 "mod/silverbox/memcached.rl"
+#line 279 "mod/silverbox/memcached.rl"
        {
                        key = read_field(keys);
                        struct box_tuple *tuple = find(key);
@@ -778,9 +779,9 @@ tr91:
                }
        goto st197;
 tr95:
-#line 532 "mod/silverbox/memcached.rl"
+#line 533 "mod/silverbox/memcached.rl"
        { p++; }
-#line 505 "mod/silverbox/memcached.rl"
+#line 506 "mod/silverbox/memcached.rl"
        {
                        size_t parsed = p - (u8 *)fiber->rbuf->data;
                        while (fiber->rbuf->len - parsed < bytes + 2) {
@@ -801,13 +802,13 @@ tr95:
                                goto exit;
                        }
                }
-#line 526 "mod/silverbox/memcached.rl"
+#line 527 "mod/silverbox/memcached.rl"
        {
                        done = true;
                        stats.bytes_read += p - (u8 *)fiber->rbuf->data;
                        tbuf_peek(fiber->rbuf, p - (u8 *)fiber->rbuf->data);
                }
-#line 278 "mod/silverbox/memcached.rl"
+#line 279 "mod/silverbox/memcached.rl"
        {
                        key = read_field(keys);
                        struct box_tuple *tuple = find(key);
@@ -820,11 +821,11 @@ tr95:
                }
        goto st197;
 tr105:
-#line 534 "mod/silverbox/memcached.rl"
+#line 535 "mod/silverbox/memcached.rl"
        { noreply = true; }
-#line 532 "mod/silverbox/memcached.rl"
+#line 533 "mod/silverbox/memcached.rl"
        { p++; }
-#line 505 "mod/silverbox/memcached.rl"
+#line 506 "mod/silverbox/memcached.rl"
        {
                        size_t parsed = p - (u8 *)fiber->rbuf->data;
                        while (fiber->rbuf->len - parsed < bytes + 2) {
@@ -845,13 +846,13 @@ tr105:
                                goto exit;
                        }
                }
-#line 526 "mod/silverbox/memcached.rl"
+#line 527 "mod/silverbox/memcached.rl"
        {
                        done = true;
                        stats.bytes_read += p - (u8 *)fiber->rbuf->data;
                        tbuf_peek(fiber->rbuf, p - (u8 *)fiber->rbuf->data);
                }
-#line 278 "mod/silverbox/memcached.rl"
+#line 279 "mod/silverbox/memcached.rl"
        {
                        key = read_field(keys);
                        struct box_tuple *tuple = find(key);
@@ -864,17 +865,17 @@ tr105:
                }
        goto st197;
 tr118:
-#line 502 "mod/silverbox/memcached.rl"
+#line 503 "mod/silverbox/memcached.rl"
        {incr = natoq(fstart, p);}
-#line 532 "mod/silverbox/memcached.rl"
+#line 533 "mod/silverbox/memcached.rl"
        { p++; }
-#line 526 "mod/silverbox/memcached.rl"
+#line 527 "mod/silverbox/memcached.rl"
        {
                        done = true;
                        stats.bytes_read += p - (u8 *)fiber->rbuf->data;
                        tbuf_peek(fiber->rbuf, p - (u8 *)fiber->rbuf->data);
                }
-#line 316 "mod/silverbox/memcached.rl"
+#line 317 "mod/silverbox/memcached.rl"
        {
                        struct meta *m;
                        struct tbuf *b;
@@ -927,15 +928,15 @@ tr118:
                }
        goto st197;
 tr122:
-#line 532 "mod/silverbox/memcached.rl"
+#line 533 "mod/silverbox/memcached.rl"
        { p++; }
-#line 526 "mod/silverbox/memcached.rl"
+#line 527 "mod/silverbox/memcached.rl"
        {
                        done = true;
                        stats.bytes_read += p - (u8 *)fiber->rbuf->data;
                        tbuf_peek(fiber->rbuf, p - (u8 *)fiber->rbuf->data);
                }
-#line 316 "mod/silverbox/memcached.rl"
+#line 317 "mod/silverbox/memcached.rl"
        {
                        struct meta *m;
                        struct tbuf *b;
@@ -988,17 +989,17 @@ tr122:
                }
        goto st197;
 tr132:
-#line 534 "mod/silverbox/memcached.rl"
+#line 535 "mod/silverbox/memcached.rl"
        { noreply = true; }
-#line 532 "mod/silverbox/memcached.rl"
+#line 533 "mod/silverbox/memcached.rl"
        { p++; }
-#line 526 "mod/silverbox/memcached.rl"
+#line 527 "mod/silverbox/memcached.rl"
        {
                        done = true;
                        stats.bytes_read += p - (u8 *)fiber->rbuf->data;
                        tbuf_peek(fiber->rbuf, p - (u8 *)fiber->rbuf->data);
                }
-#line 316 "mod/silverbox/memcached.rl"
+#line 317 "mod/silverbox/memcached.rl"
        {
                        struct meta *m;
                        struct tbuf *b;
@@ -1051,15 +1052,15 @@ tr132:
                }
        goto st197;
 tr141:
-#line 532 "mod/silverbox/memcached.rl"
+#line 533 "mod/silverbox/memcached.rl"
        { p++; }
-#line 526 "mod/silverbox/memcached.rl"
+#line 527 "mod/silverbox/memcached.rl"
        {
                        done = true;
                        stats.bytes_read += p - (u8 *)fiber->rbuf->data;
                        tbuf_peek(fiber->rbuf, p - (u8 *)fiber->rbuf->data);
                }
-#line 367 "mod/silverbox/memcached.rl"
+#line 368 "mod/silverbox/memcached.rl"
        {
                        key = read_field(keys);
                        struct box_tuple *tuple = find(key);
@@ -1074,21 +1075,21 @@ tr141:
                }
        goto st197;
 tr146:
-#line 492 "mod/silverbox/memcached.rl"
+#line 493 "mod/silverbox/memcached.rl"
        {
                        exptime = natoq(fstart, p);
                        if (exptime > 0 && exptime <= 60*60*24*30)
                                exptime = exptime + ev_now();
                }
-#line 532 "mod/silverbox/memcached.rl"
+#line 533 "mod/silverbox/memcached.rl"
        { p++; }
-#line 526 "mod/silverbox/memcached.rl"
+#line 527 "mod/silverbox/memcached.rl"
        {
                        done = true;
                        stats.bytes_read += p - (u8 *)fiber->rbuf->data;
                        tbuf_peek(fiber->rbuf, p - (u8 *)fiber->rbuf->data);
                }
-#line 367 "mod/silverbox/memcached.rl"
+#line 368 "mod/silverbox/memcached.rl"
        {
                        key = read_field(keys);
                        struct box_tuple *tuple = find(key);
@@ -1103,17 +1104,17 @@ tr146:
                }
        goto st197;
 tr157:
-#line 534 "mod/silverbox/memcached.rl"
+#line 535 "mod/silverbox/memcached.rl"
        { noreply = true; }
-#line 532 "mod/silverbox/memcached.rl"
+#line 533 "mod/silverbox/memcached.rl"
        { p++; }
-#line 526 "mod/silverbox/memcached.rl"
+#line 527 "mod/silverbox/memcached.rl"
        {
                        done = true;
                        stats.bytes_read += p - (u8 *)fiber->rbuf->data;
                        tbuf_peek(fiber->rbuf, p - (u8 *)fiber->rbuf->data);
                }
-#line 367 "mod/silverbox/memcached.rl"
+#line 368 "mod/silverbox/memcached.rl"
        {
                        key = read_field(keys);
                        struct box_tuple *tuple = find(key);
@@ -1128,15 +1129,15 @@ tr157:
                }
        goto st197;
 tr169:
-#line 532 "mod/silverbox/memcached.rl"
+#line 533 "mod/silverbox/memcached.rl"
        { p++; }
-#line 526 "mod/silverbox/memcached.rl"
+#line 527 "mod/silverbox/memcached.rl"
        {
                        done = true;
                        stats.bytes_read += p - (u8 *)fiber->rbuf->data;
                        tbuf_peek(fiber->rbuf, p - (u8 *)fiber->rbuf->data);
                }
-#line 457 "mod/silverbox/memcached.rl"
+#line 458 "mod/silverbox/memcached.rl"
        {
                        if (flush_delay > 0) {
                                struct fiber *f = fiber_create("flush_all", -1, 
-1, flush_all, (void *)flush_delay);
@@ -1148,17 +1149,17 @@ tr169:
                }
        goto st197;
 tr174:
-#line 503 "mod/silverbox/memcached.rl"
+#line 504 "mod/silverbox/memcached.rl"
        {flush_delay = natoq(fstart, p);}
-#line 532 "mod/silverbox/memcached.rl"
+#line 533 "mod/silverbox/memcached.rl"
        { p++; }
-#line 526 "mod/silverbox/memcached.rl"
+#line 527 "mod/silverbox/memcached.rl"
        {
                        done = true;
                        stats.bytes_read += p - (u8 *)fiber->rbuf->data;
                        tbuf_peek(fiber->rbuf, p - (u8 *)fiber->rbuf->data);
                }
-#line 457 "mod/silverbox/memcached.rl"
+#line 458 "mod/silverbox/memcached.rl"
        {
                        if (flush_delay > 0) {
                                struct fiber *f = fiber_create("flush_all", -1, 
-1, flush_all, (void *)flush_delay);
@@ -1170,17 +1171,17 @@ tr174:
                }
        goto st197;
 tr185:
-#line 534 "mod/silverbox/memcached.rl"
+#line 535 "mod/silverbox/memcached.rl"
        { noreply = true; }
-#line 532 "mod/silverbox/memcached.rl"
+#line 533 "mod/silverbox/memcached.rl"
        { p++; }
-#line 526 "mod/silverbox/memcached.rl"
+#line 527 "mod/silverbox/memcached.rl"
        {
                        done = true;
                        stats.bytes_read += p - (u8 *)fiber->rbuf->data;
                        tbuf_peek(fiber->rbuf, p - (u8 *)fiber->rbuf->data);
                }
-#line 457 "mod/silverbox/memcached.rl"
+#line 458 "mod/silverbox/memcached.rl"
        {
                        if (flush_delay > 0) {
                                struct fiber *f = fiber_create("flush_all", -1, 
-1, flush_all, (void *)flush_delay);
@@ -1192,15 +1193,15 @@ tr185:
                }
        goto st197;
 tr195:
-#line 532 "mod/silverbox/memcached.rl"
+#line 533 "mod/silverbox/memcached.rl"
        { p++; }
-#line 526 "mod/silverbox/memcached.rl"
+#line 527 "mod/silverbox/memcached.rl"
        {
                        done = true;
                        stats.bytes_read += p - (u8 *)fiber->rbuf->data;
                        tbuf_peek(fiber->rbuf, p - (u8 *)fiber->rbuf->data);
                }
-#line 380 "mod/silverbox/memcached.rl"
+#line 381 "mod/silverbox/memcached.rl"
        {
                        txn->op = SELECT;
                        fiber_register_cleanup((void *)txn_cleanup, txn);
@@ -1279,25 +1280,25 @@ tr195:
                }
        goto st197;
 tr213:
-#line 532 "mod/silverbox/memcached.rl"
+#line 533 "mod/silverbox/memcached.rl"
        { p++; }
-#line 526 "mod/silverbox/memcached.rl"
+#line 527 "mod/silverbox/memcached.rl"
        {
                        done = true;
                        stats.bytes_read += p - (u8 *)fiber->rbuf->data;
                        tbuf_peek(fiber->rbuf, p - (u8 *)fiber->rbuf->data);
                }
-#line 471 "mod/silverbox/memcached.rl"
+#line 472 "mod/silverbox/memcached.rl"
        {
                        return 0;
                }
        goto st197;
 tr233:
-#line 500 "mod/silverbox/memcached.rl"
+#line 501 "mod/silverbox/memcached.rl"
        {bytes = natoq(fstart, p);}
-#line 532 "mod/silverbox/memcached.rl"
+#line 533 "mod/silverbox/memcached.rl"
        { p++; }
-#line 505 "mod/silverbox/memcached.rl"
+#line 506 "mod/silverbox/memcached.rl"
        {
                        size_t parsed = p - (u8 *)fiber->rbuf->data;
                        while (fiber->rbuf->len - parsed < bytes + 2) {
@@ -1318,13 +1319,13 @@ tr233:
                                goto exit;
                        }
                }
-#line 526 "mod/silverbox/memcached.rl"
+#line 527 "mod/silverbox/memcached.rl"
        {
                        done = true;
                        stats.bytes_read += p - (u8 *)fiber->rbuf->data;
                        tbuf_peek(fiber->rbuf, p - (u8 *)fiber->rbuf->data);
                }
-#line 269 "mod/silverbox/memcached.rl"
+#line 270 "mod/silverbox/memcached.rl"
        {
                        key = read_field(keys);
                        struct box_tuple *tuple = find(key);
@@ -1335,9 +1336,9 @@ tr233:
                }
        goto st197;
 tr237:
-#line 532 "mod/silverbox/memcached.rl"
+#line 533 "mod/silverbox/memcached.rl"
        { p++; }
-#line 505 "mod/silverbox/memcached.rl"
+#line 506 "mod/silverbox/memcached.rl"
        {
                        size_t parsed = p - (u8 *)fiber->rbuf->data;
                        while (fiber->rbuf->len - parsed < bytes + 2) {
@@ -1358,13 +1359,13 @@ tr237:
                                goto exit;
                        }
                }
-#line 526 "mod/silverbox/memcached.rl"
+#line 527 "mod/silverbox/memcached.rl"
        {
                        done = true;
                        stats.bytes_read += p - (u8 *)fiber->rbuf->data;
                        tbuf_peek(fiber->rbuf, p - (u8 *)fiber->rbuf->data);
                }
-#line 269 "mod/silverbox/memcached.rl"
+#line 270 "mod/silverbox/memcached.rl"
        {
                        key = read_field(keys);
                        struct box_tuple *tuple = find(key);
@@ -1375,11 +1376,11 @@ tr237:
                }
        goto st197;
 tr246:
-#line 534 "mod/silverbox/memcached.rl"
+#line 535 "mod/silverbox/memcached.rl"
        { noreply = true; }
-#line 532 "mod/silverbox/memcached.rl"
+#line 533 "mod/silverbox/memcached.rl"
        { p++; }
-#line 505 "mod/silverbox/memcached.rl"
+#line 506 "mod/silverbox/memcached.rl"
        {
                        size_t parsed = p - (u8 *)fiber->rbuf->data;
                        while (fiber->rbuf->len - parsed < bytes + 2) {
@@ -1400,13 +1401,13 @@ tr246:
                                goto exit;
                        }
                }
-#line 526 "mod/silverbox/memcached.rl"
+#line 527 "mod/silverbox/memcached.rl"
        {
                        done = true;
                        stats.bytes_read += p - (u8 *)fiber->rbuf->data;
                        tbuf_peek(fiber->rbuf, p - (u8 *)fiber->rbuf->data);
                }
-#line 269 "mod/silverbox/memcached.rl"
+#line 270 "mod/silverbox/memcached.rl"
        {
                        key = read_field(keys);
                        struct box_tuple *tuple = find(key);
@@ -1417,11 +1418,11 @@ tr246:
                }
        goto st197;
 tr263:
-#line 500 "mod/silverbox/memcached.rl"
+#line 501 "mod/silverbox/memcached.rl"
        {bytes = natoq(fstart, p);}
-#line 532 "mod/silverbox/memcached.rl"
+#line 533 "mod/silverbox/memcached.rl"
        { p++; }
-#line 505 "mod/silverbox/memcached.rl"
+#line 506 "mod/silverbox/memcached.rl"
        {
                        size_t parsed = p - (u8 *)fiber->rbuf->data;
                        while (fiber->rbuf->len - parsed < bytes + 2) {
@@ -1442,22 +1443,22 @@ tr263:
                                goto exit;
                        }
                }
-#line 526 "mod/silverbox/memcached.rl"
+#line 527 "mod/silverbox/memcached.rl"
        {
                        done = true;
                        stats.bytes_read += p - (u8 *)fiber->rbuf->data;
                        tbuf_peek(fiber->rbuf, p - (u8 *)fiber->rbuf->data);
                }
-#line 255 "mod/silverbox/memcached.rl"
+#line 256 "mod/silverbox/memcached.rl"
        {
                        key = read_field(keys);
                        STORE;
                }
        goto st197;
 tr267:
-#line 532 "mod/silverbox/memcached.rl"
+#line 533 "mod/silverbox/memcached.rl"
        { p++; }
-#line 505 "mod/silverbox/memcached.rl"
+#line 506 "mod/silverbox/memcached.rl"
        {
                        size_t parsed = p - (u8 *)fiber->rbuf->data;
                        while (fiber->rbuf->len - parsed < bytes + 2) {
@@ -1478,24 +1479,24 @@ tr267:
                                goto exit;
                        }
                }
-#line 526 "mod/silverbox/memcached.rl"
+#line 527 "mod/silverbox/memcached.rl"
        {
                        done = true;
                        stats.bytes_read += p - (u8 *)fiber->rbuf->data;
                        tbuf_peek(fiber->rbuf, p - (u8 *)fiber->rbuf->data);
                }
-#line 255 "mod/silverbox/memcached.rl"
+#line 256 "mod/silverbox/memcached.rl"
        {
                        key = read_field(keys);
                        STORE;
                }
        goto st197;
 tr276:
-#line 534 "mod/silverbox/memcached.rl"
+#line 535 "mod/silverbox/memcached.rl"
        { noreply = true; }
-#line 532 "mod/silverbox/memcached.rl"
+#line 533 "mod/silverbox/memcached.rl"
        { p++; }
-#line 505 "mod/silverbox/memcached.rl"
+#line 506 "mod/silverbox/memcached.rl"
        {
                        size_t parsed = p - (u8 *)fiber->rbuf->data;
                        while (fiber->rbuf->len - parsed < bytes + 2) {
@@ -1516,28 +1517,28 @@ tr276:
                                goto exit;
                        }
                }
-#line 526 "mod/silverbox/memcached.rl"
+#line 527 "mod/silverbox/memcached.rl"
        {
                        done = true;
                        stats.bytes_read += p - (u8 *)fiber->rbuf->data;
                        tbuf_peek(fiber->rbuf, p - (u8 *)fiber->rbuf->data);
                }
-#line 255 "mod/silverbox/memcached.rl"
+#line 256 "mod/silverbox/memcached.rl"
        {
                        key = read_field(keys);
                        STORE;
                }
        goto st197;
 tr281:
-#line 532 "mod/silverbox/memcached.rl"
+#line 533 "mod/silverbox/memcached.rl"
        { p++; }
-#line 526 "mod/silverbox/memcached.rl"
+#line 527 "mod/silverbox/memcached.rl"
        {
                        done = true;
                        stats.bytes_read += p - (u8 *)fiber->rbuf->data;
                        tbuf_peek(fiber->rbuf, p - (u8 *)fiber->rbuf->data);
                }
-#line 467 "mod/silverbox/memcached.rl"
+#line 468 "mod/silverbox/memcached.rl"
        {
                        print_stats();
                }
@@ -1546,33 +1547,33 @@ st197:
        if ( ++p == pe )
                goto _test_eof197;
 case 197:
-#line 1550 "mod/silverbox/memcached.c"
+#line 1551 "mod/silverbox/memcached.c"
        goto st0;
 tr27:
-#line 500 "mod/silverbox/memcached.rl"
+#line 501 "mod/silverbox/memcached.rl"
        {bytes = natoq(fstart, p);}
        goto st13;
 tr40:
-#line 534 "mod/silverbox/memcached.rl"
+#line 535 "mod/silverbox/memcached.rl"
        { noreply = true; }
        goto st13;
 st13:
        if ( ++p == pe )
                goto _test_eof13;
 case 13:
-#line 1564 "mod/silverbox/memcached.c"
+#line 1565 "mod/silverbox/memcached.c"
        if ( (*p) == 10 )
                goto tr30;
        goto st0;
 tr28:
-#line 500 "mod/silverbox/memcached.rl"
+#line 501 "mod/silverbox/memcached.rl"
        {bytes = natoq(fstart, p);}
        goto st14;
 st14:
        if ( ++p == pe )
                goto _test_eof14;
 case 14:
-#line 1576 "mod/silverbox/memcached.c"
+#line 1577 "mod/silverbox/memcached.c"
        switch( (*p) ) {
                case 32: goto st14;
                case 110: goto st15;
@@ -1665,18 +1666,18 @@ case 26:
                goto tr45;
        goto st0;
 tr45:
-#line 540 "mod/silverbox/memcached.rl"
+#line 541 "mod/silverbox/memcached.rl"
        {append = true; }
        goto st27;
 tr209:
-#line 541 "mod/silverbox/memcached.rl"
+#line 542 "mod/silverbox/memcached.rl"
        {append = false;}
        goto st27;
 st27:
        if ( ++p == pe )
                goto _test_eof27;
 case 27:
-#line 1680 "mod/silverbox/memcached.c"
+#line 1681 "mod/silverbox/memcached.c"
        switch( (*p) ) {
                case 13: goto st0;
                case 32: goto st27;
@@ -1685,7 +1686,7 @@ case 27:
                goto st0;
        goto tr46;
 tr46:
-#line 476 "mod/silverbox/memcached.rl"
+#line 477 "mod/silverbox/memcached.rl"
        {
                        fstart = p;
                        for (; p < pe && *p != ' ' && *p != '\r' && *p != '\n'; 
p++);
@@ -1702,7 +1703,7 @@ st28:
        if ( ++p == pe )
                goto _test_eof28;
 case 28:
-#line 1706 "mod/silverbox/memcached.c"
+#line 1707 "mod/silverbox/memcached.c"
        if ( (*p) == 32 )
                goto st29;
        goto st0;
@@ -1716,49 +1717,49 @@ case 29:
                goto tr49;
        goto st0;
 tr49:
-#line 475 "mod/silverbox/memcached.rl"
+#line 476 "mod/silverbox/memcached.rl"
        { fstart = p; }
        goto st30;
 st30:
        if ( ++p == pe )
                goto _test_eof30;
 case 30:
-#line 1727 "mod/silverbox/memcached.c"
+#line 1728 "mod/silverbox/memcached.c"
        if ( (*p) == 32 )
                goto tr50;
        if ( 48 <= (*p) && (*p) <= 57 )
                goto st30;
        goto st0;
 tr50:
-#line 499 "mod/silverbox/memcached.rl"
+#line 500 "mod/silverbox/memcached.rl"
        {flags = natoq(fstart, p);}
        goto st31;
 st31:
        if ( ++p == pe )
                goto _test_eof31;
 case 31:
-#line 1741 "mod/silverbox/memcached.c"
+#line 1742 "mod/silverbox/memcached.c"
        if ( (*p) == 32 )
                goto st31;
        if ( 48 <= (*p) && (*p) <= 57 )
                goto tr53;
        goto st0;
 tr53:
-#line 475 "mod/silverbox/memcached.rl"
+#line 476 "mod/silverbox/memcached.rl"
        { fstart = p; }
        goto st32;
 st32:
        if ( ++p == pe )
                goto _test_eof32;
 case 32:
-#line 1755 "mod/silverbox/memcached.c"
+#line 1756 "mod/silverbox/memcached.c"
        if ( (*p) == 32 )
                goto tr54;
        if ( 48 <= (*p) && (*p) <= 57 )
                goto st32;
        goto st0;
 tr54:
-#line 492 "mod/silverbox/memcached.rl"
+#line 493 "mod/silverbox/memcached.rl"
        {
                        exptime = natoq(fstart, p);
                        if (exptime > 0 && exptime <= 60*60*24*30)
@@ -1769,21 +1770,21 @@ st33:
        if ( ++p == pe )
                goto _test_eof33;
 case 33:
-#line 1773 "mod/silverbox/memcached.c"
+#line 1774 "mod/silverbox/memcached.c"
        if ( (*p) == 32 )
                goto st33;
        if ( 48 <= (*p) && (*p) <= 57 )
                goto tr57;
        goto st0;
 tr57:
-#line 475 "mod/silverbox/memcached.rl"
+#line 476 "mod/silverbox/memcached.rl"
        { fstart = p; }
        goto st34;
 st34:
        if ( ++p == pe )
                goto _test_eof34;
 case 34:
-#line 1787 "mod/silverbox/memcached.c"
+#line 1788 "mod/silverbox/memcached.c"
        switch( (*p) ) {
                case 10: goto tr58;
                case 13: goto tr59;
@@ -1793,30 +1794,30 @@ case 34:
                goto st34;
        goto st0;
 tr59:
-#line 500 "mod/silverbox/memcached.rl"
+#line 501 "mod/silverbox/memcached.rl"
        {bytes = natoq(fstart, p);}
        goto st35;
 tr72:
-#line 534 "mod/silverbox/memcached.rl"
+#line 535 "mod/silverbox/memcached.rl"
        { noreply = true; }
        goto st35;
 st35:
        if ( ++p == pe )
                goto _test_eof35;
 case 35:
-#line 1808 "mod/silverbox/memcached.c"
+#line 1809 "mod/silverbox/memcached.c"
        if ( (*p) == 10 )
                goto tr62;
        goto st0;
 tr60:
-#line 500 "mod/silverbox/memcached.rl"
+#line 501 "mod/silverbox/memcached.rl"
        {bytes = natoq(fstart, p);}
        goto st36;
 st36:
        if ( ++p == pe )
                goto _test_eof36;
 case 36:
-#line 1820 "mod/silverbox/memcached.c"
+#line 1821 "mod/silverbox/memcached.c"
        switch( (*p) ) {
                case 32: goto st36;
                case 110: goto st37;
@@ -1906,7 +1907,7 @@ case 47:
                goto st0;
        goto tr76;
 tr76:
-#line 476 "mod/silverbox/memcached.rl"
+#line 477 "mod/silverbox/memcached.rl"
        {
                        fstart = p;
                        for (; p < pe && *p != ' ' && *p != '\r' && *p != '\n'; 
p++);
@@ -1923,7 +1924,7 @@ st48:
        if ( ++p == pe )
                goto _test_eof48;
 case 48:
-#line 1927 "mod/silverbox/memcached.c"
+#line 1928 "mod/silverbox/memcached.c"
        if ( (*p) == 32 )
                goto st49;
        goto st0;
@@ -1937,49 +1938,49 @@ case 49:
                goto tr78;
        goto st0;
 tr78:
-#line 475 "mod/silverbox/memcached.rl"
+#line 476 "mod/silverbox/memcached.rl"
        { fstart = p; }
        goto st50;
 st50:
        if ( ++p == pe )
                goto _test_eof50;
 case 50:
-#line 1948 "mod/silverbox/memcached.c"
+#line 1949 "mod/silverbox/memcached.c"
        if ( (*p) == 32 )
                goto tr79;
        if ( 48 <= (*p) && (*p) <= 57 )
                goto st50;
        goto st0;
 tr79:
-#line 499 "mod/silverbox/memcached.rl"
+#line 500 "mod/silverbox/memcached.rl"
        {flags = natoq(fstart, p);}
        goto st51;
 st51:
        if ( ++p == pe )
                goto _test_eof51;
 case 51:
-#line 1962 "mod/silverbox/memcached.c"
+#line 1963 "mod/silverbox/memcached.c"
        if ( (*p) == 32 )
                goto st51;
        if ( 48 <= (*p) && (*p) <= 57 )
                goto tr82;
        goto st0;
 tr82:
-#line 475 "mod/silverbox/memcached.rl"
+#line 476 "mod/silverbox/memcached.rl"
        { fstart = p; }
        goto st52;
 st52:
        if ( ++p == pe )
                goto _test_eof52;
 case 52:
-#line 1976 "mod/silverbox/memcached.c"
+#line 1977 "mod/silverbox/memcached.c"
        if ( (*p) == 32 )
                goto tr83;
        if ( 48 <= (*p) && (*p) <= 57 )
                goto st52;
        goto st0;
 tr83:
-#line 492 "mod/silverbox/memcached.rl"
+#line 493 "mod/silverbox/memcached.rl"
        {
                        exptime = natoq(fstart, p);
                        if (exptime > 0 && exptime <= 60*60*24*30)
@@ -1990,49 +1991,49 @@ st53:
        if ( ++p == pe )
                goto _test_eof53;
 case 53:
-#line 1994 "mod/silverbox/memcached.c"
+#line 1995 "mod/silverbox/memcached.c"
        if ( (*p) == 32 )
                goto st53;
        if ( 48 <= (*p) && (*p) <= 57 )
                goto tr86;
        goto st0;
 tr86:
-#line 475 "mod/silverbox/memcached.rl"
+#line 476 "mod/silverbox/memcached.rl"
        { fstart = p; }
        goto st54;
 st54:
        if ( ++p == pe )
                goto _test_eof54;
 case 54:
-#line 2008 "mod/silverbox/memcached.c"
+#line 2009 "mod/silverbox/memcached.c"
        if ( (*p) == 32 )
                goto tr87;
        if ( 48 <= (*p) && (*p) <= 57 )
                goto st54;
        goto st0;
 tr87:
-#line 500 "mod/silverbox/memcached.rl"
+#line 501 "mod/silverbox/memcached.rl"
        {bytes = natoq(fstart, p);}
        goto st55;
 st55:
        if ( ++p == pe )
                goto _test_eof55;
 case 55:
-#line 2022 "mod/silverbox/memcached.c"
+#line 2023 "mod/silverbox/memcached.c"
        if ( (*p) == 32 )
                goto st55;
        if ( 48 <= (*p) && (*p) <= 57 )
                goto tr90;
        goto st0;
 tr90:
-#line 475 "mod/silverbox/memcached.rl"
+#line 476 "mod/silverbox/memcached.rl"
        { fstart = p; }
        goto st56;
 st56:
        if ( ++p == pe )
                goto _test_eof56;
 case 56:
-#line 2036 "mod/silverbox/memcached.c"
+#line 2037 "mod/silverbox/memcached.c"
        switch( (*p) ) {
                case 10: goto tr91;
                case 13: goto tr92;
@@ -2042,30 +2043,30 @@ case 56:
                goto st56;
        goto st0;
 tr106:
-#line 534 "mod/silverbox/memcached.rl"
+#line 535 "mod/silverbox/memcached.rl"
        { noreply = true; }
        goto st57;
 tr92:
-#line 501 "mod/silverbox/memcached.rl"
+#line 502 "mod/silverbox/memcached.rl"
        {cas = natoq(fstart, p);}
        goto st57;
 st57:
        if ( ++p == pe )
                goto _test_eof57;
 case 57:
-#line 2057 "mod/silverbox/memcached.c"
+#line 2058 "mod/silverbox/memcached.c"
        if ( (*p) == 10 )
                goto tr95;
        goto st0;
 tr93:
-#line 501 "mod/silverbox/memcached.rl"
+#line 502 "mod/silverbox/memcached.rl"
        {cas = natoq(fstart, p);}
        goto st58;
 st58:
        if ( ++p == pe )
                goto _test_eof58;
 case 58:
-#line 2069 "mod/silverbox/memcached.c"
+#line 2070 "mod/silverbox/memcached.c"
        switch( (*p) ) {
                case 10: goto tr95;
                case 13: goto st57;
@@ -2126,14 +2127,14 @@ case 65:
        }
        goto st0;
 tr107:
-#line 534 "mod/silverbox/memcached.rl"
+#line 535 "mod/silverbox/memcached.rl"
        { noreply = true; }
        goto st66;
 st66:
        if ( ++p == pe )
                goto _test_eof66;
 case 66:
-#line 2137 "mod/silverbox/memcached.c"
+#line 2138 "mod/silverbox/memcached.c"
        switch( (*p) ) {
                case 10: goto tr95;
                case 13: goto st57;
@@ -2171,18 +2172,18 @@ case 70:
                goto tr113;
        goto st0;
 tr113:
-#line 549 "mod/silverbox/memcached.rl"
+#line 550 "mod/silverbox/memcached.rl"
        {incr_sign = -1;}
        goto st71;
 tr202:
-#line 548 "mod/silverbox/memcached.rl"
+#line 549 "mod/silverbox/memcached.rl"
        {incr_sign = 1; }
        goto st71;
 st71:
        if ( ++p == pe )
                goto _test_eof71;
 case 71:
-#line 2186 "mod/silverbox/memcached.c"
+#line 2187 "mod/silverbox/memcached.c"
        switch( (*p) ) {
                case 13: goto st0;
                case 32: goto st71;
@@ -2191,7 +2192,7 @@ case 71:
                goto st0;
        goto tr114;
 tr114:
-#line 476 "mod/silverbox/memcached.rl"
+#line 477 "mod/silverbox/memcached.rl"
        {
                        fstart = p;
                        for (; p < pe && *p != ' ' && *p != '\r' && *p != '\n'; 
p++);
@@ -2208,7 +2209,7 @@ st72:
        if ( ++p == pe )
                goto _test_eof72;
 case 72:
-#line 2212 "mod/silverbox/memcached.c"
+#line 2213 "mod/silverbox/memcached.c"
        if ( (*p) == 32 )
                goto st73;
        goto st0;
@@ -2222,14 +2223,14 @@ case 73:
                goto tr117;
        goto st0;
 tr117:
-#line 475 "mod/silverbox/memcached.rl"
+#line 476 "mod/silverbox/memcached.rl"
        { fstart = p; }
        goto st74;
 st74:
        if ( ++p == pe )
                goto _test_eof74;
 case 74:
-#line 2233 "mod/silverbox/memcached.c"
+#line 2234 "mod/silverbox/memcached.c"
        switch( (*p) ) {
                case 10: goto tr118;
                case 13: goto tr119;
@@ -2239,30 +2240,30 @@ case 74:
                goto st74;
        goto st0;
 tr133:
-#line 534 "mod/silverbox/memcached.rl"
+#line 535 "mod/silverbox/memcached.rl"
        { noreply = true; }
        goto st75;
 tr119:
-#line 502 "mod/silverbox/memcached.rl"
+#line 503 "mod/silverbox/memcached.rl"
        {incr = natoq(fstart, p);}
        goto st75;
 st75:
        if ( ++p == pe )
                goto _test_eof75;
 case 75:
-#line 2254 "mod/silverbox/memcached.c"
+#line 2255 "mod/silverbox/memcached.c"
        if ( (*p) == 10 )
                goto tr122;
        goto st0;
 tr120:
-#line 502 "mod/silverbox/memcached.rl"
+#line 503 "mod/silverbox/memcached.rl"
        {incr = natoq(fstart, p);}
        goto st76;
 st76:
        if ( ++p == pe )
                goto _test_eof76;
 case 76:
-#line 2266 "mod/silverbox/memcached.c"
+#line 2267 "mod/silverbox/memcached.c"
        switch( (*p) ) {
                case 10: goto tr122;
                case 13: goto st75;
@@ -2323,14 +2324,14 @@ case 83:
        }
        goto st0;
 tr134:
-#line 534 "mod/silverbox/memcached.rl"
+#line 535 "mod/silverbox/memcached.rl"
        { noreply = true; }
        goto st84;
 st84:
        if ( ++p == pe )
                goto _test_eof84;
 case 84:
-#line 2334 "mod/silverbox/memcached.c"
+#line 2335 "mod/silverbox/memcached.c"
        switch( (*p) ) {
                case 10: goto tr122;
                case 13: goto st75;
@@ -2377,7 +2378,7 @@ case 89:
                goto st0;
        goto tr140;
 tr140:
-#line 476 "mod/silverbox/memcached.rl"
+#line 477 "mod/silverbox/memcached.rl"
        {
                        fstart = p;
                        for (; p < pe && *p != ' ' && *p != '\r' && *p != '\n'; 
p++);
@@ -2394,7 +2395,7 @@ st90:
        if ( ++p == pe )
                goto _test_eof90;
 case 90:
-#line 2398 "mod/silverbox/memcached.c"
+#line 2399 "mod/silverbox/memcached.c"
        switch( (*p) ) {
                case 10: goto tr141;
                case 13: goto st91;
@@ -2402,7 +2403,7 @@ case 90:
        }
        goto st0;
 tr147:
-#line 492 "mod/silverbox/memcached.rl"
+#line 493 "mod/silverbox/memcached.rl"
        {
                        exptime = natoq(fstart, p);
                        if (exptime > 0 && exptime <= 60*60*24*30)
@@ -2410,14 +2411,14 @@ tr147:
                }
        goto st91;
 tr158:
-#line 534 "mod/silverbox/memcached.rl"
+#line 535 "mod/silverbox/memcached.rl"
        { noreply = true; }
        goto st91;
 st91:
        if ( ++p == pe )
                goto _test_eof91;
 case 91:
-#line 2421 "mod/silverbox/memcached.c"
+#line 2422 "mod/silverbox/memcached.c"
        if ( (*p) == 10 )
                goto tr141;
        goto st0;
@@ -2435,14 +2436,14 @@ case 92:
                goto tr144;
        goto st0;
 tr144:
-#line 475 "mod/silverbox/memcached.rl"
+#line 476 "mod/silverbox/memcached.rl"
        { fstart = p; }
        goto st93;
 st93:
        if ( ++p == pe )
                goto _test_eof93;
 case 93:
-#line 2446 "mod/silverbox/memcached.c"
+#line 2447 "mod/silverbox/memcached.c"
        switch( (*p) ) {
                case 10: goto tr146;
                case 13: goto tr147;
@@ -2452,7 +2453,7 @@ case 93:
                goto st93;
        goto st0;
 tr148:
-#line 492 "mod/silverbox/memcached.rl"
+#line 493 "mod/silverbox/memcached.rl"
        {
                        exptime = natoq(fstart, p);
                        if (exptime > 0 && exptime <= 60*60*24*30)
@@ -2463,7 +2464,7 @@ st94:
        if ( ++p == pe )
                goto _test_eof94;
 case 94:
-#line 2467 "mod/silverbox/memcached.c"
+#line 2468 "mod/silverbox/memcached.c"
        switch( (*p) ) {
                case 10: goto tr141;
                case 13: goto st91;
@@ -2524,14 +2525,14 @@ case 101:
        }
        goto st0;
 tr159:
-#line 534 "mod/silverbox/memcached.rl"
+#line 535 "mod/silverbox/memcached.rl"
        { noreply = true; }
        goto st102;
 st102:
        if ( ++p == pe )
                goto _test_eof102;
 case 102:
-#line 2535 "mod/silverbox/memcached.c"
+#line 2536 "mod/silverbox/memcached.c"
        switch( (*p) ) {
                case 10: goto tr141;
                case 13: goto st91;
@@ -2605,18 +2606,18 @@ case 111:
        }
        goto st0;
 tr186:
-#line 534 "mod/silverbox/memcached.rl"
+#line 535 "mod/silverbox/memcached.rl"
        { noreply = true; }
        goto st112;
 tr175:
-#line 503 "mod/silverbox/memcached.rl"
+#line 504 "mod/silverbox/memcached.rl"
        {flush_delay = natoq(fstart, p);}
        goto st112;
 st112:
        if ( ++p == pe )
                goto _test_eof112;
 case 112:
-#line 2620 "mod/silverbox/memcached.c"
+#line 2621 "mod/silverbox/memcached.c"
        if ( (*p) == 10 )
                goto tr169;
        goto st0;
@@ -2634,14 +2635,14 @@ case 113:
                goto tr172;
        goto st0;
 tr172:
-#line 475 "mod/silverbox/memcached.rl"
+#line 476 "mod/silverbox/memcached.rl"
        { fstart = p; }
        goto st114;
 st114:
        if ( ++p == pe )
                goto _test_eof114;
 case 114:
-#line 2645 "mod/silverbox/memcached.c"
+#line 2646 "mod/silverbox/memcached.c"
        switch( (*p) ) {
                case 10: goto tr174;
                case 13: goto tr175;
@@ -2651,14 +2652,14 @@ case 114:
                goto st114;
        goto st0;
 tr176:
-#line 503 "mod/silverbox/memcached.rl"
+#line 504 "mod/silverbox/memcached.rl"
        {flush_delay = natoq(fstart, p);}
        goto st115;
 st115:
        if ( ++p == pe )
                goto _test_eof115;
 case 115:
-#line 2662 "mod/silverbox/memcached.c"
+#line 2663 "mod/silverbox/memcached.c"
        switch( (*p) ) {
                case 10: goto tr169;
                case 13: goto st112;
@@ -2719,14 +2720,14 @@ case 122:
        }
        goto st0;
 tr187:
-#line 534 "mod/silverbox/memcached.rl"
+#line 535 "mod/silverbox/memcached.rl"
        { noreply = true; }
        goto st123;
 st123:
        if ( ++p == pe )
                goto _test_eof123;
 case 123:
-#line 2730 "mod/silverbox/memcached.c"
+#line 2731 "mod/silverbox/memcached.c"
        switch( (*p) ) {
                case 10: goto tr169;
                case 13: goto st112;
@@ -2757,18 +2758,18 @@ case 126:
        }
        goto st0;
 tr191:
-#line 545 "mod/silverbox/memcached.rl"
+#line 546 "mod/silverbox/memcached.rl"
        {show_cas = false;}
        goto st127;
 tr198:
-#line 546 "mod/silverbox/memcached.rl"
+#line 547 "mod/silverbox/memcached.rl"
        {show_cas = true;}
        goto st127;
 st127:
        if ( ++p == pe )
                goto _test_eof127;
 case 127:
-#line 2772 "mod/silverbox/memcached.c"
+#line 2773 "mod/silverbox/memcached.c"
        switch( (*p) ) {
                case 13: goto st0;
                case 32: goto st127;
@@ -2777,7 +2778,7 @@ case 127:
                goto st0;
        goto tr193;
 tr193:
-#line 476 "mod/silverbox/memcached.rl"
+#line 477 "mod/silverbox/memcached.rl"
        {
                        fstart = p;
                        for (; p < pe && *p != ' ' && *p != '\r' && *p != '\n'; 
p++);
@@ -2794,7 +2795,7 @@ st128:
        if ( ++p == pe )
                goto _test_eof128;
 case 128:
-#line 2798 "mod/silverbox/memcached.c"
+#line 2799 "mod/silverbox/memcached.c"
        switch( (*p) ) {
                case 10: goto tr195;
                case 13: goto st129;
@@ -3001,7 +3002,7 @@ case 155:
                goto st0;
        goto tr222;
 tr222:
-#line 476 "mod/silverbox/memcached.rl"
+#line 477 "mod/silverbox/memcached.rl"
        {
                        fstart = p;
                        for (; p < pe && *p != ' ' && *p != '\r' && *p != '\n'; 
p++);
@@ -3018,7 +3019,7 @@ st156:
        if ( ++p == pe )
                goto _test_eof156;
 case 156:
-#line 3022 "mod/silverbox/memcached.c"
+#line 3023 "mod/silverbox/memcached.c"
        if ( (*p) == 32 )
                goto st157;
        goto st0;
@@ -3032,49 +3033,49 @@ case 157:
                goto tr224;
        goto st0;
 tr224:
-#line 475 "mod/silverbox/memcached.rl"
+#line 476 "mod/silverbox/memcached.rl"
        { fstart = p; }
        goto st158;
 st158:
        if ( ++p == pe )
                goto _test_eof158;
 case 158:
-#line 3043 "mod/silverbox/memcached.c"
+#line 3044 "mod/silverbox/memcached.c"
        if ( (*p) == 32 )
                goto tr225;
        if ( 48 <= (*p) && (*p) <= 57 )
                goto st158;
        goto st0;
 tr225:
-#line 499 "mod/silverbox/memcached.rl"
+#line 500 "mod/silverbox/memcached.rl"
        {flags = natoq(fstart, p);}
        goto st159;
 st159:
        if ( ++p == pe )
                goto _test_eof159;
 case 159:
-#line 3057 "mod/silverbox/memcached.c"
+#line 3058 "mod/silverbox/memcached.c"
        if ( (*p) == 32 )
                goto st159;
        if ( 48 <= (*p) && (*p) <= 57 )
                goto tr228;
        goto st0;
 tr228:
-#line 475 "mod/silverbox/memcached.rl"
+#line 476 "mod/silverbox/memcached.rl"
        { fstart = p; }
        goto st160;
 st160:
        if ( ++p == pe )
                goto _test_eof160;
 case 160:
-#line 3071 "mod/silverbox/memcached.c"
+#line 3072 "mod/silverbox/memcached.c"
        if ( (*p) == 32 )
                goto tr229;
        if ( 48 <= (*p) && (*p) <= 57 )
                goto st160;
        goto st0;
 tr229:
-#line 492 "mod/silverbox/memcached.rl"
+#line 493 "mod/silverbox/memcached.rl"
        {
                        exptime = natoq(fstart, p);
                        if (exptime > 0 && exptime <= 60*60*24*30)
@@ -3085,21 +3086,21 @@ st161:
        if ( ++p == pe )
                goto _test_eof161;
 case 161:
-#line 3089 "mod/silverbox/memcached.c"
+#line 3090 "mod/silverbox/memcached.c"
        if ( (*p) == 32 )
                goto st161;
        if ( 48 <= (*p) && (*p) <= 57 )
                goto tr232;
        goto st0;
 tr232:
-#line 475 "mod/silverbox/memcached.rl"
+#line 476 "mod/silverbox/memcached.rl"
        { fstart = p; }
        goto st162;
 st162:
        if ( ++p == pe )
                goto _test_eof162;
 case 162:
-#line 3103 "mod/silverbox/memcached.c"
+#line 3104 "mod/silverbox/memcached.c"
        switch( (*p) ) {
                case 10: goto tr233;
                case 13: goto tr234;
@@ -3109,30 +3110,30 @@ case 162:
                goto st162;
        goto st0;
 tr234:
-#line 500 "mod/silverbox/memcached.rl"
+#line 501 "mod/silverbox/memcached.rl"
        {bytes = natoq(fstart, p);}
        goto st163;
 tr247:
-#line 534 "mod/silverbox/memcached.rl"
+#line 535 "mod/silverbox/memcached.rl"
        { noreply = true; }
        goto st163;
 st163:
        if ( ++p == pe )
                goto _test_eof163;
 case 163:
-#line 3124 "mod/silverbox/memcached.c"
+#line 3125 "mod/silverbox/memcached.c"
        if ( (*p) == 10 )
                goto tr237;
        goto st0;
 tr235:
-#line 500 "mod/silverbox/memcached.rl"
+#line 501 "mod/silverbox/memcached.rl"
        {bytes = natoq(fstart, p);}
        goto st164;
 st164:
        if ( ++p == pe )
                goto _test_eof164;
 case 164:
-#line 3136 "mod/silverbox/memcached.c"
+#line 3137 "mod/silverbox/memcached.c"
        switch( (*p) ) {
                case 32: goto st164;
                case 110: goto st165;
@@ -3224,7 +3225,7 @@ case 175:
                goto st0;
        goto tr252;
 tr252:
-#line 476 "mod/silverbox/memcached.rl"
+#line 477 "mod/silverbox/memcached.rl"
        {
                        fstart = p;
                        for (; p < pe && *p != ' ' && *p != '\r' && *p != '\n'; 
p++);
@@ -3241,7 +3242,7 @@ st176:
        if ( ++p == pe )
                goto _test_eof176;
 case 176:
-#line 3245 "mod/silverbox/memcached.c"
+#line 3246 "mod/silverbox/memcached.c"
        if ( (*p) == 32 )
                goto st177;
        goto st0;
@@ -3255,49 +3256,49 @@ case 177:
                goto tr254;
        goto st0;
 tr254:
-#line 475 "mod/silverbox/memcached.rl"
+#line 476 "mod/silverbox/memcached.rl"
        { fstart = p; }
        goto st178;
 st178:
        if ( ++p == pe )
                goto _test_eof178;
 case 178:
-#line 3266 "mod/silverbox/memcached.c"
+#line 3267 "mod/silverbox/memcached.c"
        if ( (*p) == 32 )
                goto tr255;
        if ( 48 <= (*p) && (*p) <= 57 )
                goto st178;
        goto st0;
 tr255:
-#line 499 "mod/silverbox/memcached.rl"
+#line 500 "mod/silverbox/memcached.rl"
        {flags = natoq(fstart, p);}
        goto st179;
 st179:
        if ( ++p == pe )
                goto _test_eof179;
 case 179:
-#line 3280 "mod/silverbox/memcached.c"
+#line 3281 "mod/silverbox/memcached.c"
        if ( (*p) == 32 )
                goto st179;
        if ( 48 <= (*p) && (*p) <= 57 )
                goto tr258;
        goto st0;
 tr258:
-#line 475 "mod/silverbox/memcached.rl"
+#line 476 "mod/silverbox/memcached.rl"
        { fstart = p; }
        goto st180;
 st180:
        if ( ++p == pe )
                goto _test_eof180;
 case 180:
-#line 3294 "mod/silverbox/memcached.c"
+#line 3295 "mod/silverbox/memcached.c"
        if ( (*p) == 32 )
                goto tr259;
        if ( 48 <= (*p) && (*p) <= 57 )
                goto st180;
        goto st0;
 tr259:
-#line 492 "mod/silverbox/memcached.rl"
+#line 493 "mod/silverbox/memcached.rl"
        {
                        exptime = natoq(fstart, p);
                        if (exptime > 0 && exptime <= 60*60*24*30)
@@ -3308,21 +3309,21 @@ st181:
        if ( ++p == pe )
                goto _test_eof181;
 case 181:
-#line 3312 "mod/silverbox/memcached.c"
+#line 3313 "mod/silverbox/memcached.c"
        if ( (*p) == 32 )
                goto st181;
        if ( 48 <= (*p) && (*p) <= 57 )
                goto tr262;
        goto st0;
 tr262:
-#line 475 "mod/silverbox/memcached.rl"
+#line 476 "mod/silverbox/memcached.rl"
        { fstart = p; }
        goto st182;
 st182:
        if ( ++p == pe )
                goto _test_eof182;
 case 182:
-#line 3326 "mod/silverbox/memcached.c"
+#line 3327 "mod/silverbox/memcached.c"
        switch( (*p) ) {
                case 10: goto tr263;
                case 13: goto tr264;
@@ -3332,30 +3333,30 @@ case 182:
                goto st182;
        goto st0;
 tr264:
-#line 500 "mod/silverbox/memcached.rl"
+#line 501 "mod/silverbox/memcached.rl"
        {bytes = natoq(fstart, p);}
        goto st183;
 tr277:
-#line 534 "mod/silverbox/memcached.rl"
+#line 535 "mod/silverbox/memcached.rl"
        { noreply = true; }
        goto st183;
 st183:
        if ( ++p == pe )
                goto _test_eof183;
 case 183:
-#line 3347 "mod/silverbox/memcached.c"
+#line 3348 "mod/silverbox/memcached.c"
        if ( (*p) == 10 )
                goto tr267;
        goto st0;
 tr265:
-#line 500 "mod/silverbox/memcached.rl"
+#line 501 "mod/silverbox/memcached.rl"
        {bytes = natoq(fstart, p);}
        goto st184;
 st184:
        if ( ++p == pe )
                goto _test_eof184;
 case 184:
-#line 3359 "mod/silverbox/memcached.c"
+#line 3360 "mod/silverbox/memcached.c"
        switch( (*p) ) {
                case 32: goto st184;
                case 110: goto st185;
@@ -3651,7 +3652,7 @@ case 196:
        _out: {}
        }
 
-#line 559 "mod/silverbox/memcached.rl"
+#line 560 "mod/silverbox/memcached.rl"
 
 
        if (!done) {
@@ -3753,6 +3754,8 @@ memcached_expire(void *data __unused__)
                        i = kh_begin(map);
 
                struct tbuf *keys_to_delete = tbuf_alloc(fiber->pool);
+               int expired_keys = 0;
+
                for (int j = 0; j < cfg.memcached_expire_per_loop; j++, i++) {
                        if (i == kh_end(map)) {
                                i = kh_begin(map);
@@ -3774,7 +3777,9 @@ memcached_expire(void *data __unused__)
                while (keys_to_delete->len > 0) {
                        struct box_txn *txn = txn_alloc(BOX_QUIET);
                        delete(txn, read_field(keys_to_delete));
+                       expired_keys++;
                }
+               stat_collect(stat_base, MEMC_EXPIRED_KEYS, expired_keys);
 
                fiber_gc();
 
diff --git a/mod/silverbox/memcached.rl b/mod/silverbox/memcached.rl
index 28c6435..4df75b1 100644
--- a/mod/silverbox/memcached.rl
+++ b/mod/silverbox/memcached.rl
@@ -44,7 +44,8 @@
 #define STAT(_)                                        \
         _(MEMC_GET, 1)                         \
         _(MEMC_GET_MISS, 2)                    \
-       _(MEMC_GET_HIT, 3)
+       _(MEMC_GET_HIT, 3)                      \
+       _(MEMC_EXPIRED_KEYS, 4)
 
 ENUM(memcached_stat, STAT);
 STRS(memcached_stat, STAT);
@@ -657,6 +658,8 @@ memcached_expire(void *data __unused__)
                        i = kh_begin(map);
 
                struct tbuf *keys_to_delete = tbuf_alloc(fiber->pool);
+               int expired_keys = 0;
+
                for (int j = 0; j < cfg.memcached_expire_per_loop; j++, i++) {
                        if (i == kh_end(map)) {
                                i = kh_begin(map);
@@ -678,7 +681,9 @@ memcached_expire(void *data __unused__)
                while (keys_to_delete->len > 0) {
                        struct box_txn *txn = txn_alloc(BOX_QUIET);
                        delete(txn, read_field(keys_to_delete));
+                       expired_keys++;
                }
+               stat_collect(stat_base, MEMC_EXPIRED_KEYS, expired_keys);
 
                fiber_gc();
 

commit 5a4fba76bcc99a29b6edaa601467f506d8ee676d
Author: Yuriy Vostrikov <[email protected]>
Date:   Fri Dec 3 15:07:53 2010 +0300

    [core] Better param name in stat_register()

diff --git a/core/stat.c b/core/stat.c
index dd8ca41..96b0ef0 100644
--- a/core/stat.c
+++ b/core/stat.c
@@ -44,11 +44,11 @@ static int stats_max = 0;
 static int base = 0;
 
 int
-stat_register(char **name, size_t count)
+stat_register(char **name, size_t max_idx)
 {
        int initial_base = base;
 
-       for (int i = 0; i < count; i++, name++, base++) {
+       for (int i = 0; i < max_idx; i++, name++, base++) {
                if (stats_size <= base) {
                        stats_size += 1024;
                        stats = realloc(stats, sizeof(*stats) * stats_size);

commit 34972586ff1cc837ebc314f4e447e9e5763d3149
Author: Yuriy Vostrikov <[email protected]>
Date:   Fri Dec 3 15:07:08 2010 +0300

    [core] Fix bug causing last stat value being ignored.

diff --git a/core/stat.c b/core/stat.c
index c515cd0..dd8ca41 100644
--- a/core/stat.c
+++ b/core/stat.c
@@ -83,13 +83,13 @@ stat_print(struct tbuf *buf)
        int max_len = 0;
        tbuf_printf(buf, "statistics:\n");
 
-       for (int i = 0; i < stats_max; i++) {
+       for (int i = 0; i <= stats_max; i++) {
                if (stats[i].name == NULL)
                        continue;
                max_len = MAX(max_len, strlen(stats[i].name));
        }
 
-       for (int i = 0; i < stats_max; i++) {
+       for (int i = 0; i <= stats_max; i++) {
                if (stats[i].name == NULL)
                        continue;
 
@@ -108,7 +108,7 @@ stat_print(struct tbuf *buf)
 void
 stat_age(ev_timer *timer, int events __unused__)
 {
-       for (int i = 0; i < stats_max; i++) {
+       for (int i = 0; i <= stats_max; i++) {
                if (stats[i].name == NULL)
                        continue;
 


-- 
Tarantool -- an efficient key/value data store

_______________________________________________
Mailing list: https://launchpad.net/~tarantool-developers
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~tarantool-developers
More help   : https://help.launchpad.net/ListHelp

Reply via email to