bdb_env.cpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:8k
- /*
- * ===========================================================================
- * PRODUCTION $Log: bdb_env.cpp,v $
- * PRODUCTION Revision 1000.4 2004/06/01 18:37:19 gouriano
- * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.20
- * PRODUCTION
- * ===========================================================================
- */
- /* $Id: bdb_env.cpp,v 1000.4 2004/06/01 18:37:19 gouriano Exp $
- * ===========================================================================
- *
- * PUBLIC DOMAIN NOTICE
- * National Center for Biotechnology Information
- *
- * This software/database is a "United States Government Work" under the
- * terms of the United States Copyright Act. It was written as part of
- * the author's official duties as a United States Government employee and
- * thus cannot be copyrighted. This software/database is freely available
- * to the public for use. The National Library of Medicine and the U.S.
- * Government have not placed any restriction on its use or reproduction.
- *
- * Although all reasonable efforts have been taken to ensure the accuracy
- * and reliability of the software and data, the NLM and the U.S.
- * Government do not and cannot warrant the performance or results that
- * may be obtained by using this software or data. The NLM and the U.S.
- * Government disclaim all warranties, express or implied, including
- * warranties of performance, merchantability or fitness for any particular
- * purpose.
- *
- * Please cite the author in any work or product based on this material.
- *
- * ===========================================================================
- *
- * Author: Anatoliy Kuznetsov
- *
- * File Description: BDB libarary environment class implementation.
- *
- */
- #include <ncbi_pch.hpp>
- #include <bdb/bdb_env.hpp>
- #include <db.h>
- BEGIN_NCBI_SCOPE
- CBDB_Env::CBDB_Env()
- : m_Env(0),
- m_Transactional(false),
- m_ErrFile(0)
- {
- int ret = db_env_create(&m_Env, 0);
- BDB_CHECK(ret, "DB_ENV");
- }
- CBDB_Env::CBDB_Env(DB_ENV* env)
- : m_Env(env),
- m_Transactional(false),
- m_ErrFile(0)
- {
- }
- CBDB_Env::~CBDB_Env()
- {
- /*int ret = */m_Env->close(m_Env, 0);
- if (m_ErrFile) {
- fclose(m_ErrFile);
- }
- }
- void CBDB_Env::SetCacheSize(unsigned int cache_size)
- {
- int ret = m_Env->set_cachesize(m_Env, 0, cache_size, 1);
- BDB_CHECK(ret, 0);
- }
- void CBDB_Env::Open(const char* db_home, int flags)
- {
- int ret = m_Env->open(m_Env, db_home, flags, 0664);
- BDB_CHECK(ret, "DB_ENV");
- }
- void CBDB_Env::OpenWithLocks(const char* db_home)
- {
- Open(db_home, DB_CREATE/*|DB_RECOVER*/|DB_INIT_LOCK|DB_INIT_MPOOL);
- }
- void CBDB_Env::OpenWithTrans(const char* db_home)
- {
- int ret = m_Env->set_lk_detect(m_Env, DB_LOCK_DEFAULT);
- BDB_CHECK(ret, "DB_ENV");
- Open(db_home,
- DB_INIT_TXN | DB_RECOVER |
- DB_CREATE | DB_INIT_LOCK | DB_INIT_MPOOL | DB_THREAD);
- m_Transactional = true;
- }
- void CBDB_Env::OpenConcurrentDB(const char* db_home)
- {
- int ret =
- m_Env->set_flags(m_Env,
- DB_CDB_ALLDB|DB_DIRECT_DB, 1);
- BDB_CHECK(ret, "DB_ENV::set_flags");
- Open(db_home, DB_INIT_CDB|DB_INIT_MPOOL);
- }
- void CBDB_Env::JoinEnv(const char* db_home, unsigned int opt)
- {
- int flag = DB_JOINENV;
- if (opt & eThreaded) {
- flag |= DB_THREAD;
- }
- Open(db_home, flag);
- // Check if we joined the transactional environment
- // Try to create a fake transaction to test the environment
- DB_TXN* txn = 0;
- int ret = m_Env->txn_begin(m_Env, 0, &txn, 0);
- if (ret == 0) {
- m_Transactional = true;
- ret = txn->abort(txn);
- }
- // commented since it caused crash on windows trying to free
- // txn_statp structure. (Why it happened remains unknown)
- /*
- DB_TXN_STAT *txn_statp = 0;
- int ret = m_Env->txn_stat(m_Env, &txn_statp, 0);
- if (ret == 0)
- {
- ::free(txn_statp);
- txn_statp = 0;
- // Try to create a fake transaction to test the environment
- DB_TXN* txn = 0;
- ret = m_Env->txn_begin(m_Env, 0, &txn, 0);
- if (ret == 0) {
- m_Transactional = true;
- ret = txn->abort(txn);
- }
- }
- */
- }
- DB_TXN* CBDB_Env::CreateTxn(DB_TXN* parent_txn, unsigned int flags)
- {
- DB_TXN* txn = 0;
- int ret = m_Env->txn_begin(m_Env, parent_txn, &txn, flags);
- BDB_CHECK(ret, "DB_ENV::txn_begin");
- return txn;
- }
- void CBDB_Env::OpenErrFile(const char* file_name)
- {
- if (m_ErrFile) {
- fclose(m_ErrFile);
- m_ErrFile = 0;
- }
- m_ErrFile = fopen(file_name, "a");
- if (m_ErrFile) {
- m_Env->set_errfile(m_Env, m_ErrFile);
- }
- }
- void CBDB_Env::SetDirectDB(bool on_off)
- {
- // error checking commented (not all platforms support direct IO)
- /*int ret = */ m_Env->set_flags(m_Env, DB_DIRECT_DB, (int)on_off);
- // BDB_CHECK(ret, "DB_ENV::set_flags(DB_DIRECT_DB)");
- }
- void CBDB_Env::SetDirectLog(bool on_off)
- {
- // error checking commented (not all platforms support direct IO)
- /*int ret = */ m_Env->set_flags(m_Env, DB_DIRECT_LOG, (int)on_off);
- // BDB_CHECK(ret, "DB_ENV::set_flags(DB_DIRECT_LOG)");
- }
- void CBDB_Env::TransactionCheckpoint()
- {
- if (IsTransactional()) {
- int ret = m_Env->txn_checkpoint(m_Env, 0, 0, 0);
- BDB_CHECK(ret, "DB_ENV::txn_checkpoint");
- }
- }
- END_NCBI_SCOPE
- /*
- * ===========================================================================
- * $Log: bdb_env.cpp,v $
- * Revision 1000.4 2004/06/01 18:37:19 gouriano
- * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.20
- *
- * Revision 1.20 2004/05/17 20:55:11 gorelenk
- * Added include of PCH ncbi_pch.hpp
- *
- * Revision 1.19 2004/04/08 18:10:23 vakatov
- * Rollback to R1.17, as <db_config.h> is not a part of standard BerkleyDB
- * installation (as we have it, at least). Must be done in a different way.
- *
- * Revision 1.17 2004/03/26 14:53:59 kuznets
- * No error checking for direct IO functions (does not work on some platforms)
- *
- * Revision 1.16 2004/03/26 14:05:04 kuznets
- * + implemented transaction checkpoints and buffering functions
- *
- * Revision 1.15 2004/03/12 15:09:57 kuznets
- * OpenWithLocks removed DB_RECOVER flag
- * (only applicable for transactional environments)
- *
- * Revision 1.14 2004/02/06 16:23:31 kuznets
- * Simplified JoinEnv function to avoid misterious crash on some systems
- *
- * Revision 1.13 2004/02/04 14:39:01 kuznets
- * Minor code clean up in JoinEnv when deallocating transaction statistics
- * structure
- *
- * Revision 1.12 2003/12/29 18:45:41 kuznets
- * JoinEnv changed to support thread safe join
- *
- * Revision 1.11 2003/12/29 17:24:07 kuznets
- * Created fake transaction when joining environment to check if it supports
- * transactions.
- *
- * Revision 1.10 2003/12/29 16:15:37 kuznets
- * +OpenErrFile
- *
- * Revision 1.9 2003/12/29 12:55:35 kuznets
- * Minor tweaking of locking mechanism.
- *
- * Revision 1.8 2003/12/15 14:51:43 kuznets
- * Checking environment flags in JoinEnv to determine environment is
- * transactional.
- *
- * Revision 1.7 2003/12/12 14:07:40 kuznets
- * JoinEnv: checking if we joining transactional environment
- *
- * Revision 1.6 2003/12/10 19:14:02 kuznets
- * Added support of berkeley db transactions
- *
- * Revision 1.5 2003/11/24 13:49:19 kuznets
- * +OpenConcurrentDB
- *
- * Revision 1.4 2003/11/03 13:07:22 kuznets
- * JoinEnv implemented
- *
- * Revision 1.3 2003/10/20 15:23:55 kuznets
- * Added cache management for BDB environment
- *
- * Revision 1.2 2003/08/27 20:04:29 kuznets
- * Set the correct combination of open flags (CBDB_Env::OpenWithLocks)
- *
- * Revision 1.1 2003/08/27 15:04:25 kuznets
- * Initial revision
- *
- *
- * ===========================================================================
- */