MogileFS-Client
view release on metacpan or search on metacpan
lib/MogileFS/Client.pm view on Meta::CPAN
$mogc->foreach_key( prefix => "foo:", sub { my $key = shift; ... } );
Functional interface/wrapper around list_keys.
Given some %OPTIONS (currently only one, "prefix"), calls your callback
for each key matching the provided prefix.
=cut
sub foreach_key {
my MogileFS::Client $self = shift;
my $callback = pop;
Carp::croak("Last parameter not a subref") unless ref $callback eq "CODE";
my %opts = @_;
my $prefix = delete $opts{prefix};
Carp::croak("Unknown option(s): " . join(", ", keys %opts)) if %opts;
my $last = "";
my $max = 1000;
my $count = $max;
while ($count == $max) {
my $res = $self->{backend}->do_request
("list_keys", {
domain => $self->{domain},
prefix => $prefix,
after => $last,
limit => $max,
}) or return undef;
$count = $res->{key_count}+0;
for (my $i = 1; $i <= $count; $i++) {
$callback->($res->{"key_$i"});
}
$last = $res->{"key_$count"};
}
return 1;
}
# just makes some sleeping happen. first and only argument is number of
# seconds to instruct backend thread to sleep for.
sub sleep {
my MogileFS::Client $self = shift;
my $duration = shift;
$self->{backend}->do_request("sleep", { duration => $duration + 0 })
or return undef;
return 1;
}
=head2 update_class
$mogc->update_class($key, $newclass);
Update the replication class of a pre-existing file, causing
the file to become more or less replicated.
=cut
sub update_class {
my MogileFS::Client $self = shift;
my ($key, $class) = @_;
my $res = $self->{backend}->do_request
("updateclass", {
domain => $self->{domain},
key => $key,
class => $class,
}) or return undef;
return $res;
}
=head2 set_pref_ip
$mogc->set_pref_ip({ "10.0.0.2" => "10.2.0.2" });
Weird option for old, weird network architecture. Sets a mapping
table of preferred alternate IPs, if reachable. For instance, if
trying to connect to 10.0.0.2 in the above example, the module would
instead try to connect to 10.2.0.2 quickly first, then then fall back
to 10.0.0.2 if 10.2.0.2 wasn't reachable.
=cut
# expects as argument a hashref of "standard-ip" => "preferred-ip"
sub set_pref_ip {
my MogileFS::Client $self = shift;
$self->{backend}->set_pref_ip(shift)
if $self->{backend};
}
=head1 PLUGIN METHODS
WRITEME
=cut
# used to support plugins that have modified the server, this builds things into
# an argument list and passes them back to the server
# TODO: there is no readonly protection here? does it matter? should we check
# with the server to see what methods they support? (and if they should be disallowed
# when the client is in readonly mode?)
sub AUTOLOAD {
# remove everything up to the last colon, so we only have the method name left
my $method = $AUTOLOAD;
$method =~ s/^.*://;
return if $method eq 'DESTROY';
# let this work
no strict 'refs';
# create a method to pass this on back
*{$AUTOLOAD} = sub {
my MogileFS::Client $self = shift;
# pre-assemble the arguments into a hashref
my $ct = 0;
my $args = {};
$args->{"arg" . ++$ct} = shift() while @_;
$args->{"argcount"} = $ct;
( run in 0.797 second using v1.01-cache-2.11-cpan-39bf76dae61 )