store: improve error handling

Detect store-lock
This commit is contained in:
Dirk-Jan C. Binnema 2022-05-12 08:50:20 +03:00
parent 901ac23a4d
commit d79d770958
2 changed files with 7 additions and 5 deletions

View File

@ -586,8 +586,7 @@ docids_for_msgid(const Store& store, const std::string& msgid, size_t max = 100)
throw Error(Error::Code::Store, &gerr, "failed to run msgid-query");
else if (res->empty())
throw Error(Error::Code::NotFound,
"could not find message(s) for msgid %s",
msgid.c_str());
"could not find message(s) for msgid %s", msgid.c_str());
std::vector<Store::Id> docids{};
for (auto&& mi : *res)

View File

@ -113,11 +113,9 @@ struct Store::Private {
std::unique_ptr<Xapian::Database> make_xapian_db(const std::string db_path, XapianOpts opts)
try {
/* we do our own flushing, set Xapian's internal one as the
* backstop*/
g_setenv("XAPIAN_FLUSH_THRESHOLD",
format("%zu", properties_.batch_size + 100).c_str(), 1);
g_setenv("XAPIAN_FLUSH_THRESHOLD", "500000", 1);
switch (opts) {
case XapianOpts::ReadOnly:
@ -132,6 +130,11 @@ struct Store::Private {
throw std::logic_error("invalid xapian options");
}
} catch (const Xapian::DatabaseLockError& xde) {
throw Mu::Error(Error::Code::StoreLock,
"failed to lock store @ %s: %s",
db_path.c_str(),
xde.get_msg().c_str());
} catch (const Xapian::DatabaseError& xde) {
throw Mu::Error(Error::Code::Store,
"failed to open store @ %s: %s",