diff options
author | Calin Iorgulescu <calin.iorgulescu@gmail.com> | 2018-03-15 17:51:01 +0100 |
---|---|---|
committer | dormando <dormando@rydia.net> | 2018-03-23 11:05:12 -0700 |
commit | f34375b6856cd108ef654527129b2b5d60c795d8 (patch) | |
tree | f5c3d66acc0d1c9c3a73279e982086cf98c4045b /scripts | |
parent | 593b6006ac1d466b1d3a61aece84d73ab87f7940 (diff) | |
download | memcached-f34375b6856cd108ef654527129b2b5d60c795d8.tar.gz |
Rewrite memchached-tool 'dump' method to use new lru_crawler interface.
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/memcached-tool | 58 |
1 files changed, 22 insertions, 36 deletions
diff --git a/scripts/memcached-tool b/scripts/memcached-tool index 79f3770..b2ec0a7 100755 --- a/scripts/memcached-tool +++ b/scripts/memcached-tool @@ -77,48 +77,34 @@ else { die "Couldn't connect to $addr\n" unless $sock; if ($mode eq 'dump') { - my %items; - my $totalitems; - - print $sock "stats items\r\n"; - + print STDERR "Dumping memcache contents\n"; + print $sock "lru_crawler metadump all\r\n"; + my %keyexp; while (<$sock>) { last if /^END/; - if (/^STAT items:(\d*):number (\d*)/) { - $items{$1} = $2; - $totalitems += $2; - } - } - print STDERR "Dumping memcache contents\n"; - print STDERR " Number of buckets: " . scalar(keys(%items)) . "\n"; - print STDERR " Number of items : $totalitems\n"; - - foreach my $bucket (sort(keys(%items))) { - print STDERR "Dumping bucket $bucket - " . $items{$bucket} . " total items\n"; - print $sock "stats cachedump $bucket $items{$bucket}\r\n"; - my %keyexp; - while (<$sock>) { - last if /^END/; - # return format looks like this - # ITEM foo [6 b; 1176415152 s] - if (/^ITEM (\S+) \[.* (\d+) s\]/) { + # return format looks like this + # key=foo exp=2147483647 la=1521046038 cas=717111 fetch=no cls=13 size=1232 + if (/^key=(\S+) exp=(-?\d+) .*/) { + if ($2 == -1) { + $keyexp{$1} = 0; + } else { $keyexp{$1} = $2; } } + } - foreach my $k (keys(%keyexp)) { - print $sock "get $k\r\n"; - my $response = <$sock>; - if ($response =~ /VALUE (\S+) (\d+) (\d+)/) { - my $flags = $2; - my $len = $3; - my $val; - read $sock, $val, $len; - print "add $k $flags $keyexp{$k} $len\r\n$val\r\n"; - # get the END - $_ = <$sock>; - $_ = <$sock>; - } + foreach my $k (keys(%keyexp)) { + print $sock "get $k\r\n"; + my $response = <$sock>; + if ($response =~ /VALUE (\S+) (\d+) (\d+)/) { + my $flags = $2; + my $len = $3; + my $val; + read $sock, $val, $len; + print "add $k $flags $keyexp{$k} $len\r\n$val\r\n"; + # get the END + $_ = <$sock>; + $_ = <$sock>; } } exit; |