@ -42,8 +42,6 @@
# include "blockchain_db/db_types.h"
# include "cryptonote_core/cryptonote_core.h"
# include <lmdb.h> // for db flag arguments
# undef MONERO_DEFAULT_LOG_CATEGORY
# define MONERO_DEFAULT_LOG_CATEGORY "bcutil"
@ -78,40 +76,16 @@ namespace po = boost::program_options;
using namespace cryptonote ;
using namespace epee ;
std : : string join_set_strings ( const std : : unordered_set < std : : string > & db_types_all , const char * delim )
{
std : : string result ;
std : : ostringstream s ;
std : : copy ( db_types_all . begin ( ) , db_types_all . end ( ) , std : : ostream_iterator < std : : string > ( s , delim ) ) ;
result = s . str ( ) ;
if ( result . length ( ) > 0 )
result . erase ( result . end ( ) - strlen ( delim ) , result . end ( ) ) ;
return result ;
}
// db_type: lmdb, berkeley
// db_mode: safe, fast, fastest
int get_db_flags_from_mode ( const std : : string & db_ type, const std : : string & db_ mode)
int get_db_flags_from_mode ( const std : : string & db_mode )
{
uint64_t BDB_FAST_MODE = 0 ;
uint64_t BDB_FASTEST_MODE = 0 ;
uint64_t BDB_SAFE_MODE = 0 ;
# if defined(BERKELEY_DB)
BDB_FAST_MODE = DB_TXN_WRITE_NOSYNC ;
BDB_FASTEST_MODE = DB_TXN_NOSYNC ;
BDB_SAFE_MODE = DB_TXN_SYNC ;
# endif
int db_flags = 0 ;
bool islmdb = db_type = = " lmdb " ;
if ( db_mode = = " safe " )
db_flags = islmdb ? MDB_NORDAHEAD : BDB_SAFE_MOD E;
db_flags = DBF_SAFE ;
else if ( db_mode = = " fast " )
db_flags = islmdb ? MDB_NOMETASYNC | MDB_NOSYNC | MDB_NORDAHEAD : BDB_FAST_MODE ;
db_flags = DBF_FAST ;
else if ( db_mode = = " fastest " )
db_flags = islmdb ? MDB_WRITEMAP | MDB_MAPASYNC | MDB_NORDAHEAD | MDB_NOMETASYNC | MDB_NOSYNC : BDB_FASTEST_MODE ;
db_flags = DBF_FASTEST ;
return db_flags ;
}
@ -132,14 +106,6 @@ int parse_db_arguments(const std::string& db_arg_str, std::string& db_type, int&
return 1 ;
}
# if !defined(BERKELEY_DB)
if ( db_type = = " berkeley " )
{
MFATAL ( " BerkeleyDB support disabled. " ) ;
return false ;
}
# endif
std : : string db_arg_str2 = db_args [ 1 ] ;
boost : : split ( db_args , db_arg_str2 , boost : : is_any_of ( " , " ) ) ;
@ -155,51 +121,7 @@ int parse_db_arguments(const std::string& db_arg_str, std::string& db_type, int&
}
if ( ! db_mode . empty ( ) )
{
db_flags = get_db_flags_from_mode ( db_type , db_mode ) ;
}
else
{
for ( auto & it : db_args )
{
boost : : algorithm : : trim ( it ) ;
if ( it . empty ( ) )
continue ;
if ( db_type = = " lmdb " )
{
MINFO ( " LMDB flag: " < < it ) ;
if ( it = = " nosync " )
db_flags | = MDB_NOSYNC ;
else if ( it = = " nometasync " )
db_flags | = MDB_NOMETASYNC ;
else if ( it = = " writemap " )
db_flags | = MDB_WRITEMAP ;
else if ( it = = " mapasync " )
db_flags | = MDB_MAPASYNC ;
else if ( it = = " nordahead " )
db_flags | = MDB_NORDAHEAD ;
else
{
std : : cerr < < " unrecognized database flag: " < < it < < ENDL ;
return 1 ;
}
}
# if defined(BERKELEY_DB)
else if ( db_type = = " berkeley " )
{
if ( it = = " txn_write_nosync " )
db_flags = DB_TXN_WRITE_NOSYNC ;
else if ( it = = " txn_nosync " )
db_flags = DB_TXN_NOSYNC ;
else if ( it = = " txn_sync " )
db_flags = DB_TXN_SYNC ;
else
{
std : : cerr < < " unrecognized database flag: " < < it < < ENDL ;
return 1 ;
}
}
# endif
}
db_flags = get_db_flags_from_mode ( db_mode ) ;
}
return 0 ;
}
@ -580,12 +502,8 @@ int main(int argc, char* argv[])
epee : : string_tools : : set_module_name_and_folder ( argv [ 0 ] ) ;
std : : string default_db_type = " lmdb " ;
std : : string default_db_engine_compiled = " blockchain_db " ;
std : : unordered_set < std : : string > db_types_all = cryptonote : : blockchain_db_types ;
db_types_all . insert ( " memory " ) ;
std : : string available_dbs = join_set_strings( db_types_all , " , " ) ;
std : : string available_dbs = cryptonote : : blockchain_db_types ( " , " ) ;
available_dbs = " available: " + available_dbs ;
uint32_t log_level = 0 ;
@ -731,7 +649,6 @@ int main(int argc, char* argv[])
std : : string db_type ;
std : : string db_engine_compiled ;
int db_flags = 0 ;
int res = 0 ;
res = parse_db_arguments ( db_arg_str , db_type , db_flags ) ;
@ -741,25 +658,12 @@ int main(int argc, char* argv[])
return 1 ;
}
if ( db_types_all . count ( db_type ) = = 0 )
if ( ! cryptonote : : blockchain_valid_db_type ( db_type ) )
{
std : : cerr < < " Invalid database type: " < < db_type < < std : : endl ;
return 1 ;
}
if ( ( db_type = = " lmdb " )
# if defined(BERKELEY_DB)
| | ( db_type = = " berkeley " )
# endif
)
{
db_engine_compiled = " blockchain_db " ;
}
else
{
db_engine_compiled = " memory " ;
}
MINFO ( " database: " < < db_type ) ;
MINFO ( " database flags: " < < db_flags ) ;
MINFO ( " verify: " < < std : : boolalpha < < opt_verify < < std : : noboolalpha ) ;
@ -788,16 +692,6 @@ int main(int argc, char* argv[])
// properties to do so. Both ways work, but fake core isn't necessary in that
// circumstance.
if ( db_type ! = " lmdb "
# if defined(BERKELEY_DB)
& & db_type ! = " berkeley "
# endif
)
{
std : : cerr < < " database type unrecognized " < < ENDL ;
return 1 ;
}
cryptonote : : cryptonote_protocol_stub pr ; //TODO: stub only for this kind of test, make real validation of relayed objects
cryptonote : : core core ( & pr ) ;
core . disable_dns_checkpoints ( true ) ;