Apache-Solr
view release on metacpan or search on metacpan
lib/Apache/Solr.pm view on Meta::CPAN
return if $self->{AS_rem_msg}{$msg}++; # report only once
warning __x"Removed solr {message}", message => $msg;
}
#------------------------
sub endpoint($@)
{ my ($self, $action, %args) = @_;
my $core = $args{core} || $self->core;
my $take = $self->server->clone; # URI
$take->path($take->path . (defined $core ? "/$core" : '') . "/$action");
# make parameters ordered
my $params = $args{params} || [];
$params = [ %$params ] if ref $params eq 'HASH';
@$params or return $take;
# remove paramers with undefined value
my @p = @$params;
my @params;
while(@p)
{ push @params, $p[0] => $p[1] if defined $p[1];
shift @p, shift @p;
}
$take->query_form(@params) if @params;
$take;
}
sub request($$;$$)
{ my ($self, $url, $result, $body, $body_ct) = @_;
my $req;
if($body)
{ # request with 'form' payload
$req = HTTP::Request->new
( POST => $url
, [ Content_Type => $body_ct
, Content_Disposition => 'form-data; name="content"'
]
, (ref $body eq 'SCALAR' ? $$body : $body)
);
}
else
{ # request without payload
$req = HTTP::Request->new(GET => $url);
}
$result->request($req);
my $resp;
my $retries = $self->{AS_retry_max};
my $wait = $self->{AS_retry_wait};
my $start = time;
while($retries--)
{ $resp = $self->agent->request($req);
$result->response($resp);
my $dec = $result->decoded($self->decodeResponse($resp));
last if $resp->is_success;
if($resp->code==500)
{ $! = ENETDOWN; # HTTP(500) -> unix error
alert __x"Solr request failed with {code}, {retries} retries left",
code => $resp->code, retries => $retries, result => $result;
sleep $wait if $wait && $retries; # let remote settle a bit
next;
}
error __x"Solr request failed with: {err}",
err => ($result->solrError || $result->httpError), result => $result;
}
unless($resp->is_success)
{ $! = $resp->code==500 ? ENETDOWN : ENETUNREACH;
fault __x"Solr request failed after {elapse} seconds after {retries} retries",
elapse => time - $start, retries => $self->{AS_retry_max} - $retries -1, result => $result;
}
$resp;
}
sub decodeResponse($) { undef }
#----------------------------------
1;
( run in 1.651 second using v1.01-cache-2.11-cpan-600a1bdf6e4 )