in lib/Search/Elasticsearch/Role/Cxn.pm [364:434]
sub process_response {
#===================================
my ( $self, $params, $code, $msg, $body, $headers ) = @_;
# Product check only for 8+ client API version
if ( $self->client_version >= 8 and $code >= 200 and $code < 300 ) {
my $product = $headers->{$PRODUCT_CHECK_HEADER} // '';
if ($product ne $PRODUCT_CHECK_VALUE) {
throw( "ProductCheck", "The client noticed that the server is not Elasticsearch and we do not support this unknown product" );
}
}
$self->_decompress_body( \$body, $headers );
my ($mime_type) = split /\s*;\s*/, ( $headers->{'content-type'} || '' );
my $is_encoded = $mime_type && $mime_type ne 'text/plain';
# Deprecation warnings
if ( my $warnings = $headers->{warning} ) {
my $warning_string = _parse_warnings($warnings);
my %temp = (%$params);
delete $temp{data};
$self->logger->deprecation( $warning_string, \%temp );
}
# Request is successful
if ( $code >= 200 and $code <= 209 ) {
if ( defined $body and length $body ) {
$body = $self->serializer->decode($body)
if $is_encoded;
return $code, $body;
}
return ( $code, 1 ) if $params->{method} eq 'HEAD';
return ( $code, '' );
}
# Check if the error should be ignored
my @ignore = to_list( $params->{ignore} );
push @ignore, 404 if $params->{method} eq 'HEAD';
return ($code) if grep { $_ eq $code } @ignore;
# Determine error type
my $error_type = $Code_To_Error{$code};
unless ($error_type) {
if ( defined $body and length $body ) {
$msg = $body;
$body = undef;
}
$error_type = $self->error_from_text( $code, $msg );
}
delete $params->{data} if $params->{body};
my %error_args = ( status_code => $code, request => $params );
# Extract error message from the body, if present
if ( $body = $self->serializer->decode($body) ) {
$error_args{body} = $body;
$msg = $self->_munge_elasticsearch_exception($body) || $msg;
$error_args{current_version} = $1
if $error_type eq 'Conflict'
and $msg =~ /: version conflict, current (?:version )?\[(\d+)\]/;
}
$msg ||= $error_type;
chomp $msg;
throw( $error_type, "[" . $self->stringify . "]-[$code] $msg",
\%error_args );
}