📄 cxx_env.cpp
字号:
{ int ret; DB_ENV *env = unwrap(this); // after a remove (no matter if success or failure), // the underlying DB_ENV object must not be accessed, // so we clean up in advance. // cleanup(); if ((ret = env->remove(env, db_home, flags)) != 0) DB_ERROR(this, "DbEnv::remove", ret, error_policy()); return (ret);}// Report an error associated with the DbEnv.// error_policy is one of:// ON_ERROR_THROW throw an error// ON_ERROR_RETURN do nothing here, the caller will return an error// ON_ERROR_UNKNOWN defer the policy to policy saved in DbEnv::DbEnv//void DbEnv::runtime_error(DbEnv *env, const char *caller, int error, int error_policy){ if (error_policy == ON_ERROR_UNKNOWN) error_policy = last_known_error_policy; if (error_policy == ON_ERROR_THROW) { // Creating and throwing the object in two separate // statements seems to be necessary for HP compilers. switch (error) { case DB_LOCK_DEADLOCK: { DbDeadlockException dl_except(caller); dl_except.set_env(env); throw dl_except; } break; case DB_RUNRECOVERY: { DbRunRecoveryException rr_except(caller); rr_except.set_env(env); throw rr_except; } break; case DB_LOCK_NOTGRANTED: { DbLockNotGrantedException lng_except(caller); lng_except.set_env(env); throw lng_except; } break; default: { DbException except(caller, error); except.set_env(env); throw except; } break; } }}// Like DbEnv::runtime_error, but issue a DbMemoryException// based on the fact that this Dbt is not large enough.void DbEnv::runtime_error_dbt(DbEnv *env, const char *caller, Dbt *dbt, int error_policy){ if (error_policy == ON_ERROR_UNKNOWN) error_policy = last_known_error_policy; if (error_policy == ON_ERROR_THROW) { // Creating and throwing the object in two separate // statements seems to be necessary for HP compilers. DbMemoryException except(caller, dbt); except.set_env(env); throw except; }}// Like DbEnv::runtime_error, but issue a DbLockNotGrantedException,// or a regular runtime error.// call regular runtime_error if itvoid DbEnv::runtime_error_lock_get(DbEnv *env, const char *caller, int error, db_lockop_t op, db_lockmode_t mode, const Dbt *obj, DbLock lock, int index, int error_policy){ if (error != DB_LOCK_NOTGRANTED) { runtime_error(env, caller, error, error_policy); return; } if (error_policy == ON_ERROR_UNKNOWN) error_policy = last_known_error_policy; if (error_policy == ON_ERROR_THROW) { // Creating and throwing the object in two separate // statements seems to be necessary for HP compilers. DbLockNotGrantedException except(caller, op, mode, obj, lock, index); except.set_env(env); throw except; }}void DbEnv::_stream_error_function( const DB_ENV *env, const char *prefix, const char *message){ const DbEnv *cxxenv = DbEnv::get_const_DbEnv(env); if (cxxenv == 0) { DB_ERROR(0, "DbEnv::stream_error", EINVAL, ON_ERROR_UNKNOWN); return; } if (cxxenv->error_callback_) cxxenv->error_callback_(cxxenv, prefix, message); else if (cxxenv->error_stream_) { // HP compilers need the extra casts, we don't know why. if (prefix) { (*cxxenv->error_stream_) << prefix; (*cxxenv->error_stream_) << (const char *)": "; } if (message) (*cxxenv->error_stream_) << (const char *)message; (*cxxenv->error_stream_) << (const char *)"\n"; }}void DbEnv::_stream_message_function(const DB_ENV *env, const char *message){ const DbEnv *cxxenv = DbEnv::get_const_DbEnv(env); if (cxxenv == 0) { DB_ERROR(0, "DbEnv::stream_message", EINVAL, ON_ERROR_UNKNOWN); return; } if (cxxenv->message_callback_) cxxenv->message_callback_(cxxenv, message); else if (cxxenv->message_stream_) { // HP compilers need the extra casts, we don't know why. (*cxxenv->message_stream_) << (const char *)message; (*cxxenv->message_stream_) << (const char *)"\n"; }}// static methodchar *DbEnv::strerror(int error){ return (db_strerror(error));}// We keep these alphabetical by field name,// for comparison with Java's list.//DBENV_METHOD(set_data_dir, (const char *dir), (dbenv, dir))DBENV_METHOD(get_encrypt_flags, (u_int32_t *flagsp), (dbenv, flagsp))DBENV_METHOD(set_encrypt, (const char *passwd, u_int32_t flags), (dbenv, passwd, flags))DBENV_METHOD_VOID(get_errfile, (FILE **errfilep), (dbenv, errfilep))DBENV_METHOD_VOID(set_errfile, (FILE *errfile), (dbenv, errfile))DBENV_METHOD_VOID(get_errpfx, (const char **errpfxp), (dbenv, errpfxp))DBENV_METHOD_VOID(set_errpfx, (const char *errpfx), (dbenv, errpfx))DBENV_METHOD(get_lg_bsize, (u_int32_t *bsizep), (dbenv, bsizep))DBENV_METHOD(set_lg_bsize, (u_int32_t bsize), (dbenv, bsize))DBENV_METHOD(get_lg_dir, (const char **dirp), (dbenv, dirp))DBENV_METHOD(set_lg_dir, (const char *dir), (dbenv, dir))DBENV_METHOD(get_lg_max, (u_int32_t *maxp), (dbenv, maxp))DBENV_METHOD(set_lg_max, (u_int32_t max), (dbenv, max))DBENV_METHOD(get_lg_regionmax, (u_int32_t *regionmaxp), (dbenv, regionmaxp))DBENV_METHOD(set_lg_regionmax, (u_int32_t regionmax), (dbenv, regionmax))DBENV_METHOD(get_lk_conflicts, (const u_int8_t **lk_conflictsp, int *lk_maxp), (dbenv, lk_conflictsp, lk_maxp))DBENV_METHOD(set_lk_conflicts, (u_int8_t *lk_conflicts, int lk_max), (dbenv, lk_conflicts, lk_max))DBENV_METHOD(get_lk_detect, (u_int32_t *detectp), (dbenv, detectp))DBENV_METHOD(set_lk_detect, (u_int32_t detect), (dbenv, detect))DBENV_METHOD(set_lk_max, (u_int32_t max), (dbenv, max))DBENV_METHOD(get_lk_max_lockers, (u_int32_t *max_lockersp), (dbenv, max_lockersp))DBENV_METHOD(set_lk_max_lockers, (u_int32_t max_lockers), (dbenv, max_lockers))DBENV_METHOD(get_lk_max_locks, (u_int32_t *max_locksp), (dbenv, max_locksp))DBENV_METHOD(set_lk_max_locks, (u_int32_t max_locks), (dbenv, max_locks))DBENV_METHOD(get_lk_max_objects, (u_int32_t *max_objectsp), (dbenv, max_objectsp))DBENV_METHOD(set_lk_max_objects, (u_int32_t max_objects), (dbenv, max_objects))DBENV_METHOD(get_mp_mmapsize, (size_t *mmapsizep), (dbenv, mmapsizep))DBENV_METHOD(set_mp_mmapsize, (size_t mmapsize), (dbenv, mmapsize))DBENV_METHOD_VOID(get_msgfile, (FILE **msgfilep), (dbenv, msgfilep))DBENV_METHOD_VOID(set_msgfile, (FILE *msgfile), (dbenv, msgfile))DBENV_METHOD(get_tmp_dir, (const char **tmp_dirp), (dbenv, tmp_dirp))DBENV_METHOD(set_tmp_dir, (const char *tmp_dir), (dbenv, tmp_dir))DBENV_METHOD(get_tx_max, (u_int32_t *tx_maxp), (dbenv, tx_maxp))DBENV_METHOD(set_tx_max, (u_int32_t tx_max), (dbenv, tx_max))DBENV_METHOD_QUIET(set_alloc, (db_malloc_fcn_type malloc_fcn, db_realloc_fcn_type realloc_fcn, db_free_fcn_type free_fcn), (dbenv, malloc_fcn, realloc_fcn, free_fcn))void DbEnv::set_app_private(void *value){ unwrap(this)->app_private = value;}DBENV_METHOD(get_cachesize, (u_int32_t *gbytesp, u_int32_t *bytesp, int *ncachep), (dbenv, gbytesp, bytesp, ncachep))DBENV_METHOD(set_cachesize, (u_int32_t gbytes, u_int32_t bytes, int ncache), (dbenv, gbytes, bytes, ncache))void DbEnv::set_errcall(void (*arg)(const DbEnv *, const char *, const char *)){ DB_ENV *dbenv = unwrap(this); error_callback_ = arg; error_stream_ = 0; dbenv->set_errcall(dbenv, (arg == 0) ? 0 : _stream_error_function_c);}__DB_STD(ostream) *DbEnv::get_error_stream(){ return (error_stream_);}void DbEnv::set_error_stream(__DB_STD(ostream) *stream){ DB_ENV *dbenv = unwrap(this); error_stream_ = stream; error_callback_ = 0; dbenv->set_errcall(dbenv, (stream == 0) ? 0 : _stream_error_function_c);}int DbEnv::set_feedback(void (*arg)(DbEnv *, int, int)){ DB_ENV *dbenv = unwrap(this); feedback_callback_ = arg; return (dbenv->set_feedback(dbenv, _feedback_intercept_c));}DBENV_METHOD(get_flags, (u_int32_t *flagsp), (dbenv, flagsp))DBENV_METHOD(set_flags, (u_int32_t flags, int onoff), (dbenv, flags, onoff))void DbEnv::set_msgcall(void (*arg)(const DbEnv *, const char *)){ DB_ENV *dbenv = unwrap(this); message_callback_ = arg; message_stream_ = 0; dbenv->set_msgcall(dbenv, (arg == 0) ? 0 : _stream_message_function_c);}__DB_STD(ostream) *DbEnv::get_message_stream(){ return (message_stream_);}void DbEnv::set_message_stream(__DB_STD(ostream) *stream){ DB_ENV *dbenv = unwrap(this); message_stream_ = stream; message_callback_ = 0; dbenv->set_msgcall(dbenv, (stream == 0) ? 0 : _stream_message_function_c);}int DbEnv::set_paniccall(void (*arg)(DbEnv *, int)){ DB_ENV *dbenv = unwrap(this); paniccall_callback_ = arg; return (dbenv->set_paniccall(dbenv, _paniccall_intercept_c));}DBENV_METHOD(set_rpc_server, (void *cl, char *host, long tsec, long ssec, u_int32_t flags), (dbenv, cl, host, tsec, ssec, flags))DBENV_METHOD(get_shm_key, (long *shm_keyp), (dbenv, shm_keyp))DBENV_METHOD(set_shm_key, (long shm_key), (dbenv, shm_key))// Note: this changes from last_known_error_policy to error_policy()DBENV_METHOD(get_tas_spins, (u_int32_t *argp), (dbenv, argp))DBENV_METHOD(set_tas_spins, (u_int32_t arg), (dbenv, arg))int DbEnv::set_app_dispatch (int (*arg)(DbEnv *, Dbt *, DbLsn *, db_recops)){ DB_ENV *dbenv = unwrap(this); int ret; app_dispatch_callback_ = arg; if ((ret = dbenv->set_app_dispatch(dbenv, _app_dispatch_intercept_c)) != 0) DB_ERROR(this, "DbEnv::set_app_dispatch", ret, error_policy()); return (ret);}DBENV_METHOD(get_tx_timestamp, (time_t *timestamp), (dbenv, timestamp))DBENV_METHOD(set_tx_timestamp, (time_t *timestamp), (dbenv, timestamp))DBENV_METHOD(get_verbose, (u_int32_t which, int *onoffp), (dbenv, which, onoffp))DBENV_METHOD(set_verbose, (u_int32_t which, int onoff), (dbenv, which, onoff))int DbEnv::txn_begin(DbTxn *pid, DbTxn **tid, u_int32_t flags){ DB_ENV *env = unwrap(this); DB_TXN *txn; int ret; ret = env->txn_begin(env, unwrap(pid), &txn, flags); if (DB_RETOK_STD(ret)) *tid = new DbTxn(txn); else DB_ERROR(this, "DbEnv::txn_begin", ret, error_policy()); return (ret);}DBENV_METHOD(txn_checkpoint, (u_int32_t kbyte, u_int32_t min, u_int32_t flags), (dbenv, kbyte, min, flags))int DbEnv::txn_recover(DbPreplist *preplist, long count, long *retp, u_int32_t flags){ DB_ENV *dbenv = unwrap(this); DB_PREPLIST *c_preplist; long i; int ret; /* * We need to allocate some local storage for the * returned preplist, and that requires us to do * our own argument validation. */ if (count <= 0) ret = EINVAL; else ret = __os_malloc(dbenv, sizeof(DB_PREPLIST) * count, &c_preplist); if (ret != 0) { DB_ERROR(this, "DbEnv::txn_recover", ret, error_policy()); return (ret); } if ((ret = dbenv->txn_recover(dbenv, c_preplist, count, retp, flags)) != 0) { __os_free(dbenv, c_preplist); DB_ERROR(this, "DbEnv::txn_recover", ret, error_policy()); return (ret); } for (i = 0; i < *retp; i++) { preplist[i].txn = new DbTxn(); preplist[i].txn->imp_ = c_preplist[i].txn; memcpy(preplist[i].gid, c_preplist[i].gid, sizeof(preplist[i].gid)); } __os_free(dbenv, c_preplist); return (0);}DBENV_METHOD(txn_stat, (DB_TXN_STAT **statp, u_int32_t flags), (dbenv, statp, flags))DBENV_METHOD(txn_stat_print, (u_int32_t flags), (dbenv, flags))int DbEnv::set_rep_transport(int myid, int (*f_send)(DbEnv *, const Dbt *, const Dbt *, const DbLsn *, int, u_int32_t)){ DB_ENV *dbenv = unwrap(this); int ret; rep_send_callback_ = f_send; if ((ret = dbenv->set_rep_transport(dbenv, myid, _rep_send_intercept_c)) != 0) DB_ERROR(this, "DbEnv::set_rep_transport", ret, error_policy()); return (ret);}DBENV_METHOD(rep_elect, (int nsites, int nvotes, int priority, u_int32_t timeout, int *eidp, u_int32_t flags), (dbenv, nvotes, nsites, priority, timeout, eidp, flags))int DbEnv::rep_process_message(Dbt *control, Dbt *rec, int *idp, DbLsn *ret_lsnp){ DB_ENV *dbenv = unwrap(this); int ret; ret = dbenv->rep_process_message(dbenv, control, rec, idp, ret_lsnp); if (!DB_RETOK_REPPMSG(ret)) DB_ERROR(this, "DbEnv::rep_process_message", ret, error_policy()); return (ret);}DBENV_METHOD(rep_start, (Dbt *cookie, u_int32_t flags), (dbenv, (DBT *)cookie, flags))DBENV_METHOD(rep_stat, (DB_REP_STAT **statp, u_int32_t flags), (dbenv, statp, flags))DBENV_METHOD(rep_stat_print, (u_int32_t flags), (dbenv, flags))DBENV_METHOD(get_rep_limit, (u_int32_t *gbytesp, u_int32_t *bytesp), (dbenv, gbytesp, bytesp))DBENV_METHOD(set_rep_limit, (u_int32_t gbytes, u_int32_t bytes), (dbenv, gbytes, bytes))DBENV_METHOD(get_timeout, (db_timeout_t *timeoutp, u_int32_t flags), (dbenv, timeoutp, flags))DBENV_METHOD(set_timeout, (db_timeout_t timeout, u_int32_t flags), (dbenv, timeout, flags))// static methodchar *DbEnv::version(int *major, int *minor, int *patch){ return (db_version(major, minor, patch));}// static methodDbEnv *DbEnv::wrap_DB_ENV(DB_ENV *dbenv){ DbEnv *wrapped_env = get_DbEnv(dbenv); return (wrapped_env != NULL) ? wrapped_env : new DbEnv(dbenv, 0);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -