]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/Search.pm
search: retry document loading from Xapian
[public-inbox.git] / lib / PublicInbox / Search.pm
index 5e6bfc68bdb3d20985ffc177660b270c6ed3cd09..24cb26670754b2f4a21b62e7d22c3cdc76098a5a 100644 (file)
@@ -166,22 +166,27 @@ sub get_thread {
        _do_enquire($self, $qtid, $opts);
 }
 
-sub _do_enquire {
-       my ($self, $query, $opts) = @_;
+sub retry_reopen {
+       my ($self, $cb) = @_;
        my $ret;
        for (1..10) {
-               eval { $ret = _enquire_once($self, $query, $opts) };
+               eval { $ret = $cb->() };
                return $ret unless $@;
                # Exception: The revision being read has been discarded -
                # you should call Xapian::Database::reopen()
-               if (index($@, 'Xapian::Database::reopen') >= 0) {
+               if (ref($@) eq 'Search::Xapian::DatabaseModifiedError') {
                        reopen($self);
                } else {
-                       die $@;
+                       die;
                }
        }
 }
 
+sub _do_enquire {
+       my ($self, $query, $opts) = @_;
+       retry_reopen($self, sub { _enquire_once($self, $query, $opts) });
+}
+
 sub _enquire_once {
        my ($self, $query, $opts) = @_;
        my $enquire = $self->enquire;