#include <db_cxx.h> int DbEnv::txn_recover(DB_PREPLIST preplist[], long count, long *retp, u_int32_t flags);
Database environment recovery restores transactions that were
prepared, but not yet resolved at the time of the system shut down or
crash, to their state prior to the shut down or crash, including any
locks previously held. The DbEnv::txn_recover()
method returns a
list of those prepared transactions.
The DbEnv::txn_recover()
method should only be called after the
environment has been recovered.
Multiple threads of control may call DbEnv::txn_recover()
, but only
one thread of control may resolve each returned transaction, that is,
only one thread of control may call DbTxn::commit()
or DbTxn::abort() on each
returned transaction. Callers of DbEnv::txn_recover()
must call
DbTxn::discard() to
discard each transaction they do not resolve.
On return from DbEnv::txn_recover()
, the preplist parameter will be filled in with a list of transactions
that must be resolved by the application (committed, aborted or discarded). The preplist parameter is a structure of type
DB_PREPLIST
; the following DB_PREPLIST
fields will be
filled in:
DB_TXN * txn;
The transaction handle for the transaction.
u_int8_t gid[DB_XIDDATASIZE];
The global transaction ID for the transaction. The global transaction ID is the one specified when the transaction was prepared. The application is responsible for ensuring uniqueness among global transaction IDs.
The DbEnv::txn_recover()
method either returns a non-zero error value or throws an
exception that encapsulates a non-zero error value on
failure, and returns 0 on success.
The count parameter specifies the
number of available entries in the passed-in preplist array. The retp parameter returns the number of entries
DbEnv::txn_recover()
has filled in, in the array.
The flags parameter must be set to one of the following values:
DB_FIRST
Begin returning a list of prepared, but not yet resolved transactions.
Specifying this flag begins a new pass over all prepared, but not yet
completed transactions, regardless of whether they have already been
returned in previous calls to DbEnv::txn_recover.()
Calls to
DbEnv::txn_recover()
from different threads of control should not be
intermixed in the same environment.
DB_NEXT
Continue returning a list of prepared, but not yet resolved
transactions, starting where the last call to
DbEnv::txn_recover()
left off.