|
Packit |
4e8bc4 |
#!/usr/bin/perl
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
use strict;
|
|
Packit |
4e8bc4 |
use warnings;
|
|
Packit |
4e8bc4 |
use Test::More;
|
|
Packit |
4e8bc4 |
use FindBin qw($Bin);
|
|
Packit |
4e8bc4 |
use lib "$Bin/lib";
|
|
Packit |
4e8bc4 |
use MemcachedTest;
|
|
Packit |
4e8bc4 |
use Data::Dumper qw/Dumper/;
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
my $ext_path;
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
if (!supports_extstore()) {
|
|
Packit |
4e8bc4 |
plan skip_all => 'extstore not enabled';
|
|
Packit |
4e8bc4 |
exit 0;
|
|
Packit |
4e8bc4 |
}
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
$ext_path = "/tmp/extstore.$$";
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
my $server = new_memcached("-m 256 -U 0 -o ext_page_size=8,ext_wbuf_size=2,ext_threads=1,ext_io_depth=2,ext_item_size=512,ext_item_age=2,ext_recache_rate=10000,ext_max_frag=0,ext_path=$ext_path:64m,ext_low_ttl=60,slab_automove=1");
|
|
Packit |
4e8bc4 |
my $sock = $server->sock;
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
my $value;
|
|
Packit |
4e8bc4 |
{
|
|
Packit |
4e8bc4 |
my @chars = ("C".."Z");
|
|
Packit |
4e8bc4 |
for (1 .. 20000) {
|
|
Packit |
4e8bc4 |
$value .= $chars[rand @chars];
|
|
Packit |
4e8bc4 |
}
|
|
Packit |
4e8bc4 |
}
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
# fill some larger objects
|
|
Packit |
4e8bc4 |
{
|
|
Packit |
4e8bc4 |
# interleave sets with 0 ttl vs long ttl's.
|
|
Packit |
4e8bc4 |
my $keycount = 1200;
|
|
Packit |
4e8bc4 |
for (1 .. $keycount) {
|
|
Packit |
4e8bc4 |
print $sock "set nfoo$_ 0 0 20000 noreply\r\n$value\r\n";
|
|
Packit |
4e8bc4 |
print $sock "set lfoo$_ 0 5 20000 noreply\r\n$value\r\n";
|
|
Packit |
4e8bc4 |
}
|
|
Packit |
4e8bc4 |
# wait for a flush
|
|
Packit |
4e8bc4 |
sleep 10;
|
|
Packit |
4e8bc4 |
print $sock "lru_crawler crawl all\r\n";
|
|
Packit |
4e8bc4 |
<$sock>;
|
|
Packit |
4e8bc4 |
sleep 2;
|
|
Packit |
4e8bc4 |
# fetch
|
|
Packit |
4e8bc4 |
mem_get_is($sock, "nfoo1", $value);
|
|
Packit |
4e8bc4 |
# check extstore counters
|
|
Packit |
4e8bc4 |
my $stats = mem_stats($sock);
|
|
Packit |
4e8bc4 |
cmp_ok($stats->{extstore_page_allocs}, '>', 0, 'at least one page allocated');
|
|
Packit |
4e8bc4 |
cmp_ok($stats->{extstore_objects_written}, '>', $keycount / 2, 'some objects written');
|
|
Packit |
4e8bc4 |
cmp_ok($stats->{extstore_bytes_written}, '>', length($value) * 2, 'some bytes written');
|
|
Packit |
4e8bc4 |
cmp_ok($stats->{get_extstore}, '>', 0, 'one object was fetched');
|
|
Packit |
4e8bc4 |
cmp_ok($stats->{extstore_objects_read}, '>', 0, 'one object read');
|
|
Packit |
4e8bc4 |
cmp_ok($stats->{extstore_bytes_read}, '>', length($value), 'some bytes read');
|
|
Packit |
4e8bc4 |
cmp_ok($stats->{extstore_page_reclaims}, '>', 1, 'at least two pages reclaimed');
|
|
Packit |
4e8bc4 |
}
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
done_testing();
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
END {
|
|
Packit |
4e8bc4 |
unlink $ext_path if $ext_path;
|
|
Packit |
4e8bc4 |
}
|