# FIDQuery plugin for MogileFS, by Justin Huff # Provide commands for mapping a fid to a key and vice versa. # mostly for debugging package MogileFS::Plugin::FIDQuery; use strict; use warnings; use MogileFS::Worker::Query; # called when this plugin is loaded, this sub must return a true value in order for # MogileFS to consider the plugin to have loaded successfully. if you return a # non-true value, you MUST NOT install any handlers or other changes to the system. # if you install something here, you MUST uninstall it in the unload sub. sub load { MogileFS::register_worker_command( 'fid_info', sub { # get parameters my MogileFS::Worker::Query $self = shift; my $args = shift; # verify arguments - only one expected, make sure it starts with a / my $fid = $args->{arg1} + 0; return $self->err_line('bad_params') unless $fid; # Do the query my $row = Mgd::get_store()->file_row_from_fidid($fid); return $self->err_line('failure') unless $row; my %res; # rename a couple fields... $res{key} = $row->{dkey}; $res{domain} = MogileFS::Domain->name_of_id( $row->{dmid} ); $res{class} = MogileFS::Class->class_name( $row->{dmid}, $row->{classid} ); $res{$_} = $row->{$_} foreach qw(fid devcount length); return $self->ok_line( \%res ); }); MogileFS::register_worker_command( 'key_info', sub { # get parameters my MogileFS::Worker::Query $self = shift; my $args = shift; # validate domain for plugins $args->{domain} = $args->{arg1}; $args->{dmid} = $self->check_domain($args) or return $self->err_line('domain_not_found'); # validate parameters my $dmid = $args->{dmid}; my $key = $args->{arg2} or return $self->err_line('no_key'); # Do the query my $row = Mgd::get_store()->file_row_from_dmid_key($dmid, $key); return $self->err_line('failure') unless $row; my %res; # rename a couple fields... $res{key} = $row->{dkey}; $res{domain} = MogileFS::Domain->name_of_id( $row->{dmid} ); $res{class} = MogileFS::Class->class_name( $row->{dmid}, $row->{classid} ); $res{$_} = $row->{$_} foreach qw(fid devcount length); return $self->ok_line( \%res ); }); return 1; } # this sub is called at the end or when the module is being unloaded, this needs to # unregister any registered methods, etc. you MUST uninstall everything that the # plugin has previously installed. sub unload { return 1; } 1; # vim: expandtab: