Skip to content

Commit

Permalink
Issue 140 - Fix age for items stats
Browse files Browse the repository at this point in the history
  • Loading branch information
trondn committed Nov 11, 2010
1 parent 6d7b935 commit 3e4332b
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 1 deletion.
20 changes: 19 additions & 1 deletion items.c
Original file line number Diff line number Diff line change
Expand Up @@ -401,7 +401,25 @@ void do_item_stats(ADD_STAT add_stats, void *c) {
char key_str[STAT_KEY_LEN];
char val_str[STAT_VAL_LEN];
int klen = 0, vlen = 0;

int search = 50;
while (search > 0 &&
tails[i] != NULL &&
((settings.oldest_live != 0 && /* Item flushd */
settings.oldest_live <= current_time &&
tails[i]->time <= settings.oldest_live) ||
(tails[i]->exptime != 0 && /* and not expired */
tails[i]->exptime < current_time))) {
--search;
if (tails[i]->refcount == 0) {
do_item_unlink(tails[i]);
} else {
break;
}
}
if (tails[i] == NULL) {
/* We removed all of the items in this slab class */
continue;
}
APPEND_NUM_FMT_STAT(fmt, i, "number", "%u", sizes[i]);
APPEND_NUM_FMT_STAT(fmt, i, "age", "%u", tails[i]->time);
APPEND_NUM_FMT_STAT(fmt, i, "evicted",
Expand Down
37 changes: 37 additions & 0 deletions t/issue_140.t
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
#!/usr/bin/perl

use strict;
use Test::More tests => 7;
use FindBin qw($Bin);
use lib "$Bin/lib";
use MemcachedTest;

my $server = new_memcached();
my $sock = $server->sock;

print $sock "set a 0 0 1\r\na\r\n";
is (scalar <$sock>, "STORED\r\n", "stored key");

my $stats = mem_stats($sock, "items");
my $age = $stats->{"items:1:age"};
isnt ($age, "0", "Age should not be zero");

print $sock "flush_all\r\n";
is (scalar <$sock>, "OK\r\n", "items flushed");

my $stats = mem_stats($sock, "items");
my $age = $stats->{"items:1:age"};
is ($age, undef, "all should be gone");

print $sock "set a 0 1 1\r\na\r\n";
is (scalar <$sock>, "STORED\r\n", "stored key");

my $stats = mem_stats($sock, "items");
my $age = $stats->{"items:1:age"};
isnt ($age, "0", "Age should not be zero");

sleep(2);

my $stats = mem_stats($sock, "items");
my $age = $stats->{"items:1:age"};
is ($age, undef, "all should be gone");

0 comments on commit 3e4332b

Please sign in to comment.