It's possible for a long mset streaming operation to hit missing
documents after a database reopen if deletes hit the DB.
}
sub iter_retry_check ($) {
- die unless ref($@) =~ /\bDatabaseModifiedError\b/;
- $_[0]->{srch}->reopen;
- undef; # retries
+ if (ref($@) =~ /\bDatabaseModifiedError\b/) {
+ $_[0]->{srch}->reopen;
+ undef; # retries
+ } elsif (ref($@) =~ /\bDocNotFoundError\b/) {
+ warn "doc not found: $@";
+ 0; # continue to next doc
+ } else {
+ die;
+ }
}
sub dump_ibx_iter ($$$) {
} catch (const Xapian::DatabaseModifiedError & e) {
req->srch->db->reopen();
return ITER_RETRY;
+ } catch (const Xapian::DocNotFoundError & e) { // oh well...
+ warnx("doc not found: %s", e.get_description().c_str());
}
return ITER_OK;
}
} catch (const Xapian::DatabaseModifiedError & e) {
req->srch->db->reopen();
return ITER_RETRY;
+ } catch (const Xapian::DocNotFoundError & e) { // oh well...
+ warnx("doc not found: %s", e.get_description().c_str());
}
return ITER_OK;
}