Add error MDB_PROBLEM, replace some MDB_CORRUPTED

When problem is most likely in txn, not on disk.
ntdll
Hallvard Furuseth 8 years ago
parent 291c69ddbd
commit 84610e65da
  1. 4
      libraries/liblmdb/lmdb.h
  2. 9
      libraries/liblmdb/mdb.c

@ -456,8 +456,10 @@ typedef enum MDB_cursor_op {
#define MDB_BAD_VALSIZE (-30781) #define MDB_BAD_VALSIZE (-30781)
/** The specified DBI was changed unexpectedly */ /** The specified DBI was changed unexpectedly */
#define MDB_BAD_DBI (-30780) #define MDB_BAD_DBI (-30780)
/** Unexpected problem - txn should abort */
#define MDB_PROBLEM (-30779)
/** The last defined error code */ /** The last defined error code */
#define MDB_LAST_ERRCODE MDB_BAD_DBI #define MDB_LAST_ERRCODE MDB_PROBLEM
/** @} */ /** @} */
/** @brief Statistics for a database in the environment */ /** @brief Statistics for a database in the environment */

@ -1565,6 +1565,7 @@ static char *const mdb_errstr[] = {
"MDB_BAD_TXN: Transaction must abort, has a child, or is invalid", "MDB_BAD_TXN: Transaction must abort, has a child, or is invalid",
"MDB_BAD_VALSIZE: Unsupported size of key/DB name/data, or wrong DUPFIXED size", "MDB_BAD_VALSIZE: Unsupported size of key/DB name/data, or wrong DUPFIXED size",
"MDB_BAD_DBI: The specified DBI handle was closed/changed unexpectedly", "MDB_BAD_DBI: The specified DBI handle was closed/changed unexpectedly",
"MDB_PROBLEM: Unexpected problem - txn should abort",
}; };
char * char *
@ -2001,7 +2002,7 @@ mdb_page_loose(MDB_cursor *mc, MDB_page *mp)
if (mp != dl[x].mptr) { /* bad cursor? */ if (mp != dl[x].mptr) { /* bad cursor? */
mc->mc_flags &= ~(C_INITIALIZED|C_EOF); mc->mc_flags &= ~(C_INITIALIZED|C_EOF);
txn->mt_flags |= MDB_TXN_ERROR; txn->mt_flags |= MDB_TXN_ERROR;
return MDB_CORRUPTED; return MDB_PROBLEM;
} }
/* ok, it's ours */ /* ok, it's ours */
loose = 1; loose = 1;
@ -2611,7 +2612,7 @@ mdb_page_touch(MDB_cursor *mc)
if (mp != dl[x].mptr) { /* bad cursor? */ if (mp != dl[x].mptr) { /* bad cursor? */
mc->mc_flags &= ~(C_INITIALIZED|C_EOF); mc->mc_flags &= ~(C_INITIALIZED|C_EOF);
txn->mt_flags |= MDB_TXN_ERROR; txn->mt_flags |= MDB_TXN_ERROR;
return MDB_CORRUPTED; return MDB_PROBLEM;
} }
return 0; return 0;
} }
@ -6263,7 +6264,7 @@ mdb_ovpage_free(MDB_cursor *mc, MDB_page *mp)
j = ++(dl[0].mid); j = ++(dl[0].mid);
dl[j] = ix; /* Unsorted. OK when MDB_TXN_ERROR. */ dl[j] = ix; /* Unsorted. OK when MDB_TXN_ERROR. */
txn->mt_flags |= MDB_TXN_ERROR; txn->mt_flags |= MDB_TXN_ERROR;
return MDB_CORRUPTED; return MDB_PROBLEM;
} }
} }
txn->mt_dirty_room++; txn->mt_dirty_room++;
@ -7656,7 +7657,7 @@ put_sub:
return rc; return rc;
bad_sub: bad_sub:
if (rc == MDB_KEYEXIST) /* should not happen, we deleted that item */ if (rc == MDB_KEYEXIST) /* should not happen, we deleted that item */
rc = MDB_CORRUPTED; rc = MDB_PROBLEM;
} }
mc->mc_txn->mt_flags |= MDB_TXN_ERROR; mc->mc_txn->mt_flags |= MDB_TXN_ERROR;
return rc; return rc;

Loading…
Cancel
Save