diff --git a/core/stat.c b/core/stat.c index c515cd0d1be53bf3ece5061f33a6c4a82ff3f602..96b0ef0fe5b2a53d68847adbb0414e6ced9f7dd3 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); @@ -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; diff --git a/mod/silverbox/box.c b/mod/silverbox/box.c index 66d6d4419aa34e1bddd5be06a1acb6ed1bef9096..458ec4ff648feb16c0c5a31c2c02ab31124724f6 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,10 @@ 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(); } title("loading"); diff --git a/mod/silverbox/box.h b/mod/silverbox/box.h index 505ed884ce8365c568964c1582a140296acddc99..888af4cfcb9e2d9652d4c941734b97eab5a71190 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 f8a5ca1268f48e70cb8516204b92734b5c9c9e7b..a818f8840071708eb3e3d5f9caa142328165c42c 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 @@ case 5: 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 @@ case 10: 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 @@ case 12: 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 @@ case 12: } 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 @@ case 12: 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 @@ case 12: } 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 @@ case 12: 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 @@ case 12: } 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 @@ case 12: 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 @@ case 12: } 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 @@ case 12: 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 @@ case 12: } 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 @@ case 12: 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 @@ case 12: } 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 @@ case 12: 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 @@ case 12: } 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 @@ case 12: 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 @@ case 12: } 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 @@ case 12: 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 @@ case 12: } 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 @@ case 12: } 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 @@ case 12: } 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 @@ case 12: } 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 @@ case 12: } 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 @@ case 12: } 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 @@ case 12: } 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 @@ case 12: } 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 @@ case 12: } 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 @@ case 12: } 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 @@ case 12: } 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 @@ case 12: 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 @@ case 12: } 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 @@ case 12: 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 @@ case 12: } 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 @@ case 12: 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 @@ case 12: } 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 @@ case 12: 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 @@ case 12: 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 @@ case 12: 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 @@ case 12: 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 @@ case 27: 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 @@ case 32: 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 @@ case 47: 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 @@ case 52: 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 @@ case 71: 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 @@ case 89: 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 @@ case 90: } 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 @@ case 93: 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 @@ case 127: 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 @@ case 155: 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 @@ case 160: 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 @@ case 175: 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 @@ case 180: 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 28c64356916a3da5cc1c312e216b0a60a477cbf9..4df75b1ba53d6b9f2494d101f3c07df244c5d5aa 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();