|
Packit |
4e8bc4 |
#!/usr/bin/perl
|
|
Packit |
4e8bc4 |
# Test the 'stats items' evictions counters.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
use strict;
|
|
Packit |
4e8bc4 |
use Test::More tests => 309;
|
|
Packit |
4e8bc4 |
use FindBin qw($Bin);
|
|
Packit |
4e8bc4 |
use lib "$Bin/lib";
|
|
Packit |
4e8bc4 |
use MemcachedTest;
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
my $server = new_memcached("-m 3 -o modern,slab_automove_window=3");
|
|
Packit |
4e8bc4 |
my $sock = $server->sock;
|
|
Packit |
4e8bc4 |
my $value = "B"x66560;
|
|
Packit |
4e8bc4 |
my $key = 0;
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
# These aren't set to expire.
|
|
Packit |
4e8bc4 |
for ($key = 0; $key < 40; $key++) {
|
|
Packit |
4e8bc4 |
print $sock "set key$key 0 0 66560\r\n$value\r\n";
|
|
Packit |
4e8bc4 |
is(scalar <$sock>, "STORED\r\n", "stored key$key");
|
|
Packit |
4e8bc4 |
}
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
my $stats = mem_stats($sock);
|
|
Packit |
4e8bc4 |
my $evicted = $stats->{evictions};
|
|
Packit |
4e8bc4 |
isnt($evicted, "0", "check evicted");
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
# We're past the memory limit. Try adjusting maxbytes upward.
|
|
Packit |
4e8bc4 |
$stats = mem_stats($sock, "settings");
|
|
Packit |
4e8bc4 |
my $pre_maxbytes = $stats->{"maxbytes"};
|
|
Packit |
4e8bc4 |
print $sock "cache_memlimit 8\r\n";
|
|
Packit |
4e8bc4 |
is(scalar <$sock>, "OK\r\n", "bumped maxbytes from 3m to 8m");
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
# Confirm maxbytes updated.
|
|
Packit |
4e8bc4 |
$stats = mem_stats($sock, "settings");
|
|
Packit |
4e8bc4 |
isnt($stats->{"maxbytes"}, $pre_maxbytes, "stats settings maxbytes updated");
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
# Check for total_malloced increasing as new memory is added
|
|
Packit |
4e8bc4 |
$stats = mem_stats($sock, "slabs");
|
|
Packit |
4e8bc4 |
my $t_malloc = $stats->{"total_malloced"};
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
print $sock "set toast 0 0 66560\r\n$value\r\n";
|
|
Packit |
4e8bc4 |
is(scalar <$sock>, "STORED\r\n", "stored toast");
|
|
Packit |
4e8bc4 |
$stats = mem_stats($sock, "slabs");
|
|
Packit |
4e8bc4 |
cmp_ok($stats->{"total_malloced"}, '>', $t_malloc, "stats slabs total_malloced increased");
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
$stats = mem_stats($sock);
|
|
Packit |
4e8bc4 |
my $new_evicted = $stats->{evictions};
|
|
Packit |
4e8bc4 |
cmp_ok($new_evicted, '==', $evicted, "no new evictions");
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
# Bump up to 16, fill a bit more, then delete everything.
|
|
Packit |
4e8bc4 |
print $sock "cache_memlimit 16\r\n";
|
|
Packit |
4e8bc4 |
is(scalar <$sock>, "OK\r\n", "bumped maxbytes from 8m to 16m");
|
|
Packit |
4e8bc4 |
for (;$key < 150; $key++) {
|
|
Packit |
4e8bc4 |
print $sock "set key$key 0 0 66560\r\n$value\r\n";
|
|
Packit |
4e8bc4 |
is(scalar <$sock>, "STORED\r\n", "stored key$key");
|
|
Packit |
4e8bc4 |
}
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
# Grab total_malloced after filling everything up.
|
|
Packit |
4e8bc4 |
$stats = mem_stats($sock, "slabs");
|
|
Packit |
4e8bc4 |
$t_malloc = $stats->{"total_malloced"};
|
|
Packit |
4e8bc4 |
print $sock "cache_memlimit 8\r\n";
|
|
Packit |
4e8bc4 |
is(scalar <$sock>, "OK\r\n", "bumped maxbytes from 16m to 8m");
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
# Remove all of the keys, allowing the slab rebalancer to push pages toward
|
|
Packit |
4e8bc4 |
# the global page pool.
|
|
Packit |
4e8bc4 |
for ($key = 0; $key < 150; $key++) {
|
|
Packit |
4e8bc4 |
print $sock "delete key$key\r\n";
|
|
Packit |
4e8bc4 |
like(scalar <$sock>, qr/(DELETED|NOT_FOUND)\r\n/, "deleted key$key");
|
|
Packit |
4e8bc4 |
}
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
# If memory limit is lower, it should free those pages back to the OS.
|
|
Packit |
4e8bc4 |
my $reduced = 0;
|
|
Packit |
4e8bc4 |
for (my $tries = 0; $tries < 6; $tries++) {
|
|
Packit |
4e8bc4 |
sleep 1;
|
|
Packit |
4e8bc4 |
$stats = mem_stats($sock, "slabs");
|
|
Packit |
4e8bc4 |
$reduced = $stats->{"total_malloced"} if ($t_malloc > $stats->{"total_malloced"});
|
|
Packit |
4e8bc4 |
last if $reduced;
|
|
Packit |
4e8bc4 |
}
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
isnt($reduced, 0, "total_malloced reduced to $reduced");
|