source: t/Memd.pm @ f87131

Revision f87131, 2.2 KB checked in by Tomash Brechko <tomash.brechko@…>, 4 years ago (diff)

Use better Perl version syntax.

  • Property mode set to 100644
Line 
1package Memd;
2
3use warnings;
4use strict;
5
6
7use Cache::Memcached::Fast;
8use Storable;
9#use IO::Compress::Gzip;
10#use IO::Uncompress::Gunzip;
11
12our (@addr, %params, $memd, $version_str, $version_num, $error);
13
14
15BEGIN {
16    # Use differently spelled host addresses to enable Ketama to hash
17    # names differently.  Note that not all hosts resolve 127.x.y.z
18    # other than 127.0.0.1.
19    @addr = (
20        { address => 'localhost:11211', weight => 1.5 },
21        '127.0.0.1:11211',
22#        { address => '127.0.0.2:11211' },
23#        [ '127.0.0.3:11211', 2 ]
24    );
25
26    %params = (
27        servers => [ @addr ],
28        namespace => "Cache::Memcached::Fast/$$/",
29        connect_timeout => 5,
30        io_timeout => 5,
31        close_on_error => 0,
32        compress_threshold => 1000,
33#        compress_methods => [ \&IO::Compress::Gzip::gzip,
34#                              \&IO::Uncompress::Gunzip::gunzip ],
35        max_failures => 3,
36        failure_timeout => 2,
37        ketama_points => 150,
38        nowait => 1,
39        serialize_methods => [ \&Storable::freeze, \&Storable::thaw ],
40        utf8 => ($^V ge v5.8.1 ? 1 : 0),
41    );
42
43    $memd = Cache::Memcached::Fast->new(\%params);
44
45    # Test what server version we have.  server_versions() is
46    # currently undocumented.  We know that all servers are the same,
47    # so test only the first version.
48    my $version = $memd->server_versions;
49    if (keys %$version == @addr) {
50        $version_num = 2 ** 31;
51        while (my ($s, $v) = each %$version) {
52            if ($v =~ /(\d+)\.(\d+)\.(\d+)/) {
53                my $n = $1 * 10000 + $2 * 100 + $3;
54                if ($n < $version_num) {
55                    $version_str = $v;
56                    $version_num = $n;
57                }
58            } else {
59                $error = "Can't parse version of $s: $v";
60                undef $memd;
61                last;
62            }
63        }
64    } else {
65        my @servers = map {
66            if (ref($_) eq 'HASH') {
67                $_->{address};
68            } elsif (ref($_) eq 'ARRAY') {
69                $_->[0];
70            } else {
71                $_;
72            }
73        } @addr;
74
75        $error = "No server is running at "
76            . join(', ', grep { not exists $version->{$_} } @servers);
77        undef $memd;
78    }
79}
80
81
821;
Note: See TracBrowser for help on using the repository browser.