summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorCalin Iorgulescu <calin.iorgulescu@gmail.com>2018-03-15 17:51:01 +0100
committerdormando <dormando@rydia.net>2018-03-23 11:05:12 -0700
commitf34375b6856cd108ef654527129b2b5d60c795d8 (patch)
treef5c3d66acc0d1c9c3a73279e982086cf98c4045b /scripts
parent593b6006ac1d466b1d3a61aece84d73ab87f7940 (diff)
downloadmemcached-f34375b6856cd108ef654527129b2b5d60c795d8.tar.gz
Rewrite memchached-tool 'dump' method to use new lru_crawler interface.
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/memcached-tool58
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;