package ElasticSearch::Error;
$ElasticSearch::Error::VERSION = '0.68';
@ElasticSearch::Error::Internal::ISA = __PACKAGE__;
@ElasticSearch::Error::Param::ISA = __PACKAGE__;
@ElasticSearch::Error::NoServers::ISA = __PACKAGE__;
@ElasticSearch::Error::ClusterBlocked::ISA = __PACKAGE__;
@ElasticSearch::Error::Request::ISA = __PACKAGE__;
@ElasticSearch::Error::Timeout::ISA = __PACKAGE__;
@ElasticSearch::Error::Connection::ISA = __PACKAGE__;
@ElasticSearch::Error::JSON::ISA = __PACKAGE__;
@ElasticSearch::Error::QueryParser::ISA = __PACKAGE__;
@ElasticSearch::Error::Conflict::ISA
= ( 'ElasticSearch::Error::Request', __PACKAGE__ );
@ElasticSearch::Error::Missing::ISA
= ( 'ElasticSearch::Error::Request', __PACKAGE__ );
@ElasticSearch::Error::NotReady::ISA
= ( 'ElasticSearch::Error::Connection', __PACKAGE__ );
use strict;
use warnings FATAL => 'all', NONFATAL => 'redefine';
use overload (
'""' => 'stringify',
'cmp' => 'compare',
);
use Data::Dumper;
#===================================
sub stringify {
#===================================
my $error = shift;
local $Data::Dumper::Terse = 1;
local $Data::Dumper::Indent = 1;
my $msg
= '[ERROR] ** '
. ( ref($error) || 'ElasticSearch::Error' ) . ' at '
. $error->{-file}
. ' line '
. $error->{-line} . " : \n"
. ( $error->{-text} || 'Missing error message' ) . "\n"
. (
$error->{-vars}
? "\nWith vars:" . Dumper( $error->{-vars} ) . "\n"
: ''
) . ( $error->{'-stacktrace'} || '' );
return $msg;
}
#===================================
sub compare {
#===================================
my ( $error, $other, $swap ) = @_;
$error .= '';
( $error, $other ) = ( $other, $error ) if $swap;
return $error cmp $other;
}
=head1 NAME
ElasticSearch::Error - Exception objects for ElasticSearch
=head1 DESCRIPTION
ElasticSearch::Error is a base class for exceptions thrown by any ElasticSearch
code.
There are several exception subclasses, which indicate different types of error.
All of them inherit from L<ElasticSearch::Error>, and all include:
$error->{-text} # error message
$error->{-file} # file where error was thrown
$error->{-line} # line where error was thrown
They may also include:
$error->{-vars} # Any relevant variables related to the error
$error->{-stacktrace} # A stacktrace, if $ElasticSearch::DEBUG == 1
Error objects can be stringified, and include all of the above information
in the string output.
=head1 EXCEPTION CLASSES
=over
=item * ElasticSearch::Error::Param
An incorrect parameter was passed in
=item * ElasticSearch::Error::Timeout
The request timed out
=item * ElasticSearch::Error::Connection
There was an error connecting to the current node. The request will be
retried on another node.
=item * ElasticSearch::Error::NotReady
The current node is not yet able to serve requests. The request will be
retried on another node. C<ElasticSearch::Error::NotReady> inherits from
C<ElasticSearch::Error::Connection>.
=item * ElasticSearch::Error::ClusterBlocked
The cluster was unable to process the request because it is currently blocking,
eg the requested index is closed.
=item * ElasticSearch::Error::Request
There was some other error performing the request
=item * ElasticSearch::Error::Conflict
There was a versioning conflict while performing an index/create/delete
operation. C<ElasticSearch::Error::Conflict> inherits from
C<ElasticSearch::Error::Request>.
The lastest version number is available as:
$error->{-vars}{current_version};
=item * ElasticSearch::Error::Missing
Tried to get/delete a document or index that doesn't exist.
C<ElasticSearch::Error::Missing> inherits from
C<ElasticSearch::Error::Request>.
=item * ElasticSearch::Error::NoServers
No servers are available
=item * ElasticSearch::Error::JSON
There was an error parsing a JSON doc
=item * ElasticSearch::Error::Internal
An internal error - you shouldn't see these
=back
=head1 LICENSE AND COPYRIGHT
Copyright 2010 - 2011 Clinton Gormley.
This program is free software; you can redistribute it and/or modify it
under the terms of either: the GNU General Public License as published
by the Free Software Foundation; or the Artistic License.
See http://dev.perl.org/licenses/ for more information.
=cut
1;