|
Packit Service |
584ef9 |
#!/usr/bin/perl
|
|
Packit Service |
584ef9 |
|
|
Packit Service |
584ef9 |
use strict;
|
|
Packit Service |
584ef9 |
use warnings;
|
|
Packit Service |
584ef9 |
|
|
Packit Service |
584ef9 |
use Test::More;
|
|
Packit Service |
584ef9 |
|
|
Packit Service |
584ef9 |
use FindBin qw($Bin);
|
|
Packit Service |
584ef9 |
use lib "$Bin/lib";
|
|
Packit Service |
584ef9 |
use MemcachedTest;
|
|
Packit Service |
584ef9 |
|
|
Packit Service |
584ef9 |
plan skip_all => 'Test is flaky. Needs special hooks.';
|
|
Packit Service |
584ef9 |
|
|
Packit Service |
584ef9 |
plan tests => 127;
|
|
Packit Service |
584ef9 |
|
|
Packit Service |
584ef9 |
# start up a server with 10 maximum connections
|
|
Packit Service |
584ef9 |
my $server = new_memcached("-m 6");
|
|
Packit Service |
584ef9 |
my $sock = $server->sock;
|
|
Packit Service |
584ef9 |
my $hangsock = $server->new_sock;
|
|
Packit Service |
584ef9 |
my $hangsock2 = $server->new_sock;
|
|
Packit Service |
584ef9 |
my $value = "B"x66560;
|
|
Packit Service |
584ef9 |
my $key = 0;
|
|
Packit Service |
584ef9 |
|
|
Packit Service |
584ef9 |
# These aren't set to expire.
|
|
Packit Service |
584ef9 |
my $mget = '';
|
|
Packit Service |
584ef9 |
for ($key = 0; $key < 120; $key++) {
|
|
Packit Service |
584ef9 |
$mget .= "key$key " if $key < 115;
|
|
Packit Service |
584ef9 |
print $sock "set key$key 0 0 66560\r\n$value\r\n";
|
|
Packit Service |
584ef9 |
is(scalar <$sock>, "STORED\r\n", "stored key$key");
|
|
Packit Service |
584ef9 |
}
|
|
Packit Service |
584ef9 |
chop $mget;
|
|
Packit Service |
584ef9 |
|
|
Packit Service |
584ef9 |
my $stats = mem_stats($sock, "items");
|
|
Packit Service |
584ef9 |
isnt($stats->{"items:31:evicted"}, "0", "check evicted");
|
|
Packit Service |
584ef9 |
|
|
Packit Service |
584ef9 |
my $lrutail_reflocked = $stats->{"items:31:lrutail_reflocked"};
|
|
Packit Service |
584ef9 |
is($lrutail_reflocked, "0", "check no slab lrutail_reflocked");
|
|
Packit Service |
584ef9 |
|
|
Packit Service |
584ef9 |
$stats = mem_stats($sock);
|
|
Packit Service |
584ef9 |
is($stats->{"lrutail_reflocked"}, "0", "check no total lrutail_reflocked");
|
|
Packit Service |
584ef9 |
|
|
Packit Service |
584ef9 |
# Don't intend to read the results, need to fill the socket.
|
|
Packit Service |
584ef9 |
# TODO: This test would be smarter if we cranked down the socket buffers
|
|
Packit Service |
584ef9 |
# first? Or perhaps used a unix domain socket.
|
|
Packit Service |
584ef9 |
print $hangsock "get $mget\r\n";
|
|
Packit Service |
584ef9 |
#sleep 8;
|
|
Packit Service |
584ef9 |
# Now we try a bunch of sets again, and see if they start coming back as OOM's
|
|
Packit Service |
584ef9 |
for ($key = 121; $key < 240; $key++) {
|
|
Packit Service |
584ef9 |
print $sock "set key$key 0 0 66560\r\n$value\r\n";
|
|
Packit Service |
584ef9 |
my $res = scalar <$sock>;
|
|
Packit Service |
584ef9 |
}
|
|
Packit Service |
584ef9 |
|
|
Packit Service |
584ef9 |
$stats = mem_stats($sock, "items");
|
|
Packit Service |
584ef9 |
# Some items will OOM since we only clear a handful per alloc attempt.
|
|
Packit Service |
584ef9 |
ok($stats->{"items:31:outofmemory"} > 0, "some ooms happened");
|
|
Packit Service |
584ef9 |
ok($stats->{"items:31:outofmemory"} < 20, "fewer than 20 ooms");
|
|
Packit Service |
584ef9 |
isnt($stats->{"items:31:lrutail_reflocked"}, "0", "nonzero lrutail_reflocked");
|
|
Packit Service |
584ef9 |
|
|
Packit Service |
584ef9 |
$stats = mem_stats($sock);
|
|
Packit Service |
584ef9 |
isnt($stats->{"lrutail_reflocked"}, "0", "nonzero total lrutail_reflocked");
|