core: fix automatic safe db sync mode switching

This commit is contained in:
moneromooo-monero 2018-05-28 12:12:19 +01:00
parent aa6850c71d
commit 22a4cb0609
No known key found for this signature in database
GPG Key ID: 686F07454D6CEFC3
2 changed files with 7 additions and 5 deletions

View File

@ -1346,6 +1346,7 @@ void BlockchainLMDB::sync()
void BlockchainLMDB::safesyncmode(const bool onoff) void BlockchainLMDB::safesyncmode(const bool onoff)
{ {
MINFO("switching safe mode " << (onoff ? "on" : "off"));
mdb_env_set_flags(m_env, MDB_NOSYNC|MDB_MAPASYNC, !onoff); mdb_env_set_flags(m_env, MDB_NOSYNC|MDB_MAPASYNC, !onoff);
} }

View File

@ -438,6 +438,7 @@ namespace cryptonote
std::vector<std::string> options; std::vector<std::string> options;
boost::trim(db_sync_mode); boost::trim(db_sync_mode);
boost::split(options, db_sync_mode, boost::is_any_of(" :")); boost::split(options, db_sync_mode, boost::is_any_of(" :"));
const bool db_sync_mode_is_default = command_line::is_arg_defaulted(vm, cryptonote::arg_db_sync_mode);
for(const auto &option : options) for(const auto &option : options)
MDEBUG("option: " << option); MDEBUG("option: " << option);
@ -458,18 +459,18 @@ namespace cryptonote
{ {
safemode = true; safemode = true;
db_flags = DBF_SAFE; db_flags = DBF_SAFE;
sync_mode = db_nosync; sync_mode = db_sync_mode_is_default ? db_defaultsync : db_nosync;
} }
else if(options[0] == "fast") else if(options[0] == "fast")
{ {
db_flags = DBF_FAST; db_flags = DBF_FAST;
sync_mode = db_async; sync_mode = db_sync_mode_is_default ? db_defaultsync : db_async;
} }
else if(options[0] == "fastest") else if(options[0] == "fastest")
{ {
db_flags = DBF_FASTEST; db_flags = DBF_FASTEST;
blocks_per_sync = 1000; // default to fastest:async:1000 blocks_per_sync = 1000; // default to fastest:async:1000
sync_mode = db_async; sync_mode = db_sync_mode_is_default ? db_defaultsync : db_async;
} }
else else
db_flags = DEFAULT_FLAGS; db_flags = DEFAULT_FLAGS;
@ -478,9 +479,9 @@ namespace cryptonote
if(options.size() >= 2 && !safemode) if(options.size() >= 2 && !safemode)
{ {
if(options[1] == "sync") if(options[1] == "sync")
sync_mode = db_sync; sync_mode = db_sync_mode_is_default ? db_defaultsync : db_sync;
else if(options[1] == "async") else if(options[1] == "async")
sync_mode = db_async; sync_mode = db_sync_mode_is_default ? db_defaultsync : db_async;
} }
if(options.size() >= 3 && !safemode) if(options.size() >= 3 && !safemode)