Blame t/extstore-jbod.t

Packit Service 584ef9
#!/usr/bin/perl
Packit Service 584ef9
Packit Service 584ef9
use strict;
Packit Service 584ef9
use warnings;
Packit Service 584ef9
use Test::More;
Packit Service 584ef9
use FindBin qw($Bin);
Packit Service 584ef9
use lib "$Bin/lib";
Packit Service 584ef9
use MemcachedTest;
Packit Service 584ef9
use Data::Dumper qw/Dumper/;
Packit Service 584ef9
Packit Service 584ef9
my $ext_path;
Packit Service 584ef9
my $ext_path2;
Packit Service 584ef9
Packit Service 584ef9
if (!supports_extstore()) {
Packit Service 584ef9
    plan skip_all => 'extstore not enabled';
Packit Service 584ef9
    exit 0;
Packit Service 584ef9
}
Packit Service 584ef9
Packit Service 584ef9
$ext_path = "/tmp/extstore1.$$";
Packit Service 584ef9
$ext_path2 = "/tmp/extstore2.$$";
Packit Service 584ef9
Packit Service 584ef9
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.9,ext_path=$ext_path:64m,ext_path=$ext_path2:96m,slab_automove=1");
Packit Service 584ef9
my $sock = $server->sock;
Packit Service 584ef9
Packit Service 584ef9
my $value;
Packit Service 584ef9
{
Packit Service 584ef9
    my @chars = ("C".."Z");
Packit Service 584ef9
    for (1 .. 20000) {
Packit Service 584ef9
        $value .= $chars[rand @chars];
Packit Service 584ef9
    }
Packit Service 584ef9
}
Packit Service 584ef9
Packit Service 584ef9
# fill some larger objects
Packit Service 584ef9
{
Packit Service 584ef9
    # interleave sets with 0 ttl vs long ttl's.
Packit Service 584ef9
    my $keycount = 3700;
Packit Service 584ef9
    for (1 .. $keycount) {
Packit Service 584ef9
        print $sock "set nfoo$_ 0 0 20000 noreply\r\n$value\r\n";
Packit Service 584ef9
        print $sock "set lfoo$_ 0 0 20000 noreply\r\n$value\r\n";
Packit Service 584ef9
    }
Packit Service 584ef9
    # wait for a flush
Packit Service 584ef9
    wait_ext_flush($sock);
Packit Service 584ef9
    # delete half
Packit Service 584ef9
    mem_get_is($sock, "nfoo1", $value);
Packit Service 584ef9
    for (1 .. $keycount) {
Packit Service 584ef9
        print $sock "delete lfoo$_ noreply\r\n";
Packit Service 584ef9
    }
Packit Service 584ef9
    print $sock "lru_crawler crawl all\r\n";
Packit Service 584ef9
    <$sock>;
Packit Service 584ef9
    sleep 10;
Packit Service 584ef9
    # fetch
Packit Service 584ef9
    # check extstore counters
Packit Service 584ef9
    my $stats = mem_stats($sock);
Packit Service 584ef9
    is($stats->{evictions}, 0, 'no RAM evictions');
Packit Service 584ef9
    cmp_ok($stats->{extstore_page_allocs}, '>', 0, 'at least one page allocated');
Packit Service 584ef9
    cmp_ok($stats->{extstore_objects_written}, '>', $keycount / 2, 'some objects written');
Packit Service 584ef9
    cmp_ok($stats->{extstore_bytes_written}, '>', length($value) * 2, 'some bytes written');
Packit Service 584ef9
    cmp_ok($stats->{get_extstore}, '>', 0, 'one object was fetched');
Packit Service 584ef9
    cmp_ok($stats->{extstore_objects_read}, '>', 0, 'one object read');
Packit Service 584ef9
    cmp_ok($stats->{extstore_bytes_read}, '>', length($value), 'some bytes read');
Packit Service 584ef9
    cmp_ok($stats->{extstore_page_reclaims}, '>', 1, 'at least two pages reclaimed');
Packit Service 584ef9
}
Packit Service 584ef9
Packit Service 584ef9
done_testing();
Packit Service 584ef9
Packit Service 584ef9
END {
Packit Service 584ef9
    unlink $ext_path if $ext_path;
Packit Service 584ef9
    unlink $ext_path2 if $ext_path2;
Packit Service 584ef9
}