Re: DatabaseModifiedError, how to handle it correctly when searching?
Yuan Fu <[email protected]> Mon, 30 Aug 2021 18:50:48 -0700
| Newsgroups | gmane.comp.search.xapian.general |
|---|---|
| Message-ID | <[email protected]> |
> On Aug 30, 2021, at 6:36 PM, Yuan Fu <[email protected]> wrote: > > > >> On Aug 30, 2021, at 2:48 AM, Eric Wong <[email protected]> wrote: >> >> Yuan Fu <[email protected]> wrote: >>> The starter guide [1] mentioned that searching could result in DatabaseModifiedError, and I need to reopen the database should it happen. However, I couldn’t figure out which functions throw that error, I looked at Enquire.get_mset(), etc, and none of them says they throw this error. How should I correctly handle this? >>> >>> [1] https://getting-started-with-xapian.readthedocs.io/en/latest/practical_example/searching/database_modified.html >> >> I think pretty much all Xapian functions which read the database >> can throw DatabaseModifiedError. I've been wrapping all >> accesses with `eval {}' (Perl's standard exception trapping >> mechanism). > > Ah, I see, so for C++ it would look something like this, I assume? > > for (int i = 0; i < 2; i++) > { > try > { > database.replace_document (termID, new_doc); > break; > } > catch (Xapian::DatabaseModifiedError &e) > { > database.reopen(); > } > } Oops, it should have been int try_count = 0; while (true) { try { (do stuff) break; } catch (Xapian::DatabaseModifiedError &e) { if (try_count > 0) throw e; database.reopen(); try_count++; } } Sorry for the noise :-( Yuan