diff --git a/mdbx.h++ b/mdbx.h++ index 7ef55c18..0d2e8d09 100644 --- a/mdbx.h++ +++ b/mdbx.h++ @@ -583,6 +583,7 @@ MDBX_DECLARE_EXCEPTION(transaction_overlapping); MDBX_DECLARE_EXCEPTION(duplicated_lck_file); MDBX_DECLARE_EXCEPTION(dangling_map_id); MDBX_DECLARE_EXCEPTION(transaction_ousted); +MDBX_DECLARE_EXCEPTION(mvcc_retarded); #undef MDBX_DECLARE_EXCEPTION [[noreturn]] LIBMDBX_API void throw_too_small_target_buffer(); diff --git a/src/mdbx.c++ b/src/mdbx.c++ index adef7c34..d6ca4c11 100644 --- a/src/mdbx.c++ +++ b/src/mdbx.c++ @@ -340,6 +340,7 @@ DEFINE_EXCEPTION(transaction_overlapping) DEFINE_EXCEPTION(duplicated_lck_file) DEFINE_EXCEPTION(dangling_map_id) DEFINE_EXCEPTION(transaction_ousted) +DEFINE_EXCEPTION(mvcc_retarded) #undef DEFINE_EXCEPTION __cold const char *error::what() const noexcept { @@ -429,6 +430,7 @@ __cold void error::throw_exception() const { CASE_EXCEPTION(duplicated_lck_file, MDBX_DUPLICATED_CLK); CASE_EXCEPTION(dangling_map_id, MDBX_DANGLING_DBI); CASE_EXCEPTION(transaction_ousted, MDBX_OUSTED); + CASE_EXCEPTION(mvcc_retarded, MDBX_MVCC_RETARDED); #undef CASE_EXCEPTION default: if (is_mdbx_error()) diff --git a/src/misc.c b/src/misc.c index 415eee1c..bf8246ab 100644 --- a/src/misc.c +++ b/src/misc.c @@ -210,6 +210,10 @@ __cold const char *mdbx_liberr2str(int errnum) { case MDBX_OUSTED: return "MDBX_OUSTED: The parked read transaction was outed for the sake" " of recycling old MVCC snapshots"; + case MDBX_MVCC_RETARDED: + return "MDBX_MVCC_RETARDED: MVCC snapshot used by read transaction" + " is outdated and could not be copied" + " since corresponding meta-pages was overwritten"; default: return nullptr; }