Changeset View
Changeset View
Standalone View
Standalone View
src/wallet/db.cpp
Show First 20 Lines • Show All 111 Lines • ▼ Show 20 Lines | for (auto &db : mapDb) { | ||||
db.second->close(0); | db.second->close(0); | ||||
delete db.second; | delete db.second; | ||||
db.second = nullptr; | db.second = nullptr; | ||||
} | } | ||||
} | } | ||||
int ret = dbenv->close(0); | int ret = dbenv->close(0); | ||||
if (ret != 0) { | if (ret != 0) { | ||||
LogPrintf("BerkeleyEnvironment::EnvShutdown: Error %d shutting down " | LogPrintf("BerkeleyEnvironment::Close: Error %d closing database " | ||||
"database environment: %s\n", | "environment: %s\n", | ||||
ret, DbEnv::strerror(ret)); | ret, DbEnv::strerror(ret)); | ||||
} | } | ||||
if (!fMockDb) { | if (!fMockDb) { | ||||
DbEnv(u_int32_t(0)).remove(strPath.c_str(), 0); | DbEnv(u_int32_t(0)).remove(strPath.c_str(), 0); | ||||
} | } | ||||
} | } | ||||
void BerkeleyEnvironment::Reset() { | void BerkeleyEnvironment::Reset() { | ||||
▲ Show 20 Lines • Show All 51 Lines • ▼ Show 20 Lines | bool BerkeleyEnvironment::Open(bool retry) { | ||||
dbenv->set_flags(DB_TXN_WRITE_NOSYNC, 1); | dbenv->set_flags(DB_TXN_WRITE_NOSYNC, 1); | ||||
dbenv->log_set_config(DB_LOG_AUTO_REMOVE, 1); | dbenv->log_set_config(DB_LOG_AUTO_REMOVE, 1); | ||||
int ret = | int ret = | ||||
dbenv->open(strPath.c_str(), | dbenv->open(strPath.c_str(), | ||||
DB_CREATE | DB_INIT_LOCK | DB_INIT_LOG | DB_INIT_MPOOL | | DB_CREATE | DB_INIT_LOCK | DB_INIT_LOG | DB_INIT_MPOOL | | ||||
DB_INIT_TXN | DB_THREAD | DB_RECOVER | nEnvFlags, | DB_INIT_TXN | DB_THREAD | DB_RECOVER | nEnvFlags, | ||||
S_IRUSR | S_IWUSR); | S_IRUSR | S_IWUSR); | ||||
if (ret != 0) { | if (ret != 0) { | ||||
dbenv->close(0); | |||||
LogPrintf("BerkeleyEnvironment::Open: Error %d opening database " | LogPrintf("BerkeleyEnvironment::Open: Error %d opening database " | ||||
"environment: %s\n", | "environment: %s\n", | ||||
ret, DbEnv::strerror(ret)); | ret, DbEnv::strerror(ret)); | ||||
int ret2 = dbenv->close(0); | |||||
if (ret2 != 0) { | |||||
LogPrintf("BerkeleyEnvironment::Open: Error %d closing failed " | |||||
"database environment: %s\n", | |||||
ret2, DbEnv::strerror(ret2)); | |||||
} | |||||
Reset(); | |||||
if (retry) { | if (retry) { | ||||
// try moving the database env out of the way | // try moving the database env out of the way | ||||
fs::path pathDatabaseBak = | fs::path pathDatabaseBak = | ||||
pathIn / strprintf("database.%d.bak", GetTime()); | pathIn / strprintf("database.%d.bak", GetTime()); | ||||
try { | try { | ||||
fs::rename(pathLogDir, pathDatabaseBak); | fs::rename(pathLogDir, pathDatabaseBak); | ||||
LogPrintf("Moved old %s to %s. Retrying.\n", | LogPrintf("Moved old %s to %s. Retrying.\n", | ||||
pathLogDir.string(), pathDatabaseBak.string()); | pathLogDir.string(), pathDatabaseBak.string()); | ||||
▲ Show 20 Lines • Show All 676 Lines • Show Last 20 Lines |