Beispiel #1
0
void CBDB_Env::Open(const string& db_home, int flags)
{
    int ret = x_Open(db_home.c_str(), flags);
    BDB_CHECK(ret, "DB_ENV");

    SetDirectDB(m_DirectDB);
    SetDirectLog(m_DirectLOG);
}
Beispiel #2
0
const string &
CSeqDBGiMask::GetDesc(int               algo_id,
                      CSeqDBLockHold  & locked)
{
    //m_Atlas.Lock(locked);
    x_Open(algo_id);
    return m_Desc;
}
Beispiel #3
0
void
CSeqDBGiMask::GetMaskData(int                     algo_id,
                          TGi                     gi,
                          CSeqDB::TSequenceRanges &ranges,
                          CSeqDBLockHold          &locked)
{
    //m_Atlas.Lock(locked);

    x_Open(algo_id);

    int page, vol, off;

    if (s_BinarySearch(m_GiIndex, m_NumIndex, GI_TO(int, gi), page)) {
        vol = m_GiIndex[m_NumIndex + page * 2];
        off = m_GiIndex[m_NumIndex + page * 2 + 1];
    } else {
Beispiel #4
0
void CBDB_Env::OpenWithTrans(const string& db_home, TEnvOpenFlags opt)
{
    int ret = m_Env->set_lk_detect(m_Env, DB_LOCK_DEFAULT);
    BDB_CHECK(ret, "DB_ENV");

    if (m_MaxLockObjects) {
        this->SetMaxLockObjects(m_MaxLockObjects);
    }
    if (m_MaxLocks) {
        this->SetMaxLocks(m_MaxLocks);
    }
    if (m_MaxLockers) {
        this->SetMaxLockers(m_MaxLockers);
    }

    int flag =  DB_INIT_TXN |
                DB_CREATE | DB_INIT_LOCK | DB_INIT_MPOOL;

    // for windows we try to init environment in system memory
    // (not file based)
    // so it is reclaimed by OS automatically even if the application crashes
# ifdef NCBI_OS_MSWIN
    flag |= DB_SYSTEM_MEM;
# endif
    if (opt & eThreaded) {
        flag |= DB_THREAD;
    }
    if (opt & ePrivate) {
        flag |= DB_PRIVATE;
    }

    // Run recovery procedure, reinitialize the environment

    if (opt & eRunRecovery) {
        // use private environment as prescribed by "db_recover" utility
        int recover_flag = flag | DB_RECOVER | DB_CREATE;

        if (!(recover_flag & DB_SYSTEM_MEM)) {
            recover_flag |= DB_PRIVATE;
        }

        ret = x_Open(db_home.c_str(), recover_flag);
        BDB_CHECK(ret, "DB_ENV");

        // non-private recovery
        if (!(recover_flag & DB_PRIVATE)) {
            m_Transactional = true;
            return;
        }

        // "Private" recovery requires reopening, to make
        // it available for other programs

        ret = m_Env->close(m_Env, 0);
        BDB_CHECK(ret, "DB_ENV");

        ret = db_env_create(&m_Env, 0);
        BDB_CHECK(ret, "DB_ENV");
    } else
    if (opt & eRunRecoveryFatal) {
        // use private environment as prescribed by "db_recover" utility
        int recover_flag = flag | DB_RECOVER_FATAL | DB_CREATE;

        if (!(recover_flag & DB_SYSTEM_MEM)) {
            recover_flag |= DB_PRIVATE;
        }

        ret = x_Open(db_home.c_str(), recover_flag);
        BDB_CHECK(ret, "DB_ENV");

        // non-private recovery
        if (!(recover_flag & DB_PRIVATE)) {
            m_Transactional = true;
            return;
        }

        // "Private" recovery requires reopening, to make
        // it available for other programs

        ret = m_Env->close(m_Env, 0);
        BDB_CHECK(ret, "DB_ENV");

        ret = db_env_create(&m_Env, 0);
        BDB_CHECK(ret, "DB_ENV");
    }

    Open(db_home,  flag);
    m_Transactional = true;
}
Beispiel #5
0
void CBDB_Env::OpenPrivate(const string& db_home)
{
    int ret = x_Open(db_home.c_str(),
                     DB_CREATE|DB_THREAD|DB_PRIVATE|DB_INIT_MPOOL);
    BDB_CHECK(ret, "DB_ENV");
}