@ -317,9 +317,9 @@ int import_from_file(cryptonote::core& core, const std::string& import_file_path
MWARNING ( " WARNING: chunk_size " < < chunk_size < < " > BUFFER_SIZE " < < BUFFER_SIZE ) ;
throw std : : runtime_error ( " Aborting: chunk size exceeds buffer size " ) ;
}
if ( chunk_size > 100000 )
if ( chunk_size > CHUNK_SIZE_WARNING_THRESHOLD )
{
MINFO ( " NOTE: chunk_size " < < chunk_size < < " > 100000 " ) ;
MINFO ( " NOTE: chunk_size " < < chunk_size < < " > " < < CHUNK_SIZE_WARNING_THRESHOLD ) ;
}
else if ( chunk_size = = 0 ) {
MFATAL ( " ERROR: chunk_size == 0 " ) ;
@ -327,9 +327,19 @@ int import_from_file(cryptonote::core& core, const std::string& import_file_path
}
import_file . read ( buffer_block , chunk_size ) ;
if ( ! import_file ) {
MFATAL ( " ERROR: unexpected end of file: bytes read before error: "
< < import_file . gcount ( ) < < " of chunk_size " < < chunk_size ) ;
return 2 ;
if ( import_file . eof ( ) )
{
std : : cout < < refresh_string ;
MINFO ( " End of file reached - file was truncated " ) ;
quit = 1 ;
break ;
}
else
{
MFATAL ( " ERROR: unexpected end of file: bytes read before error: "
< < import_file . gcount ( ) < < " of chunk_size " < < chunk_size ) ;
return 2 ;
}
}
bytes_read + = chunk_size ;
MDEBUG ( " Total bytes read: " < < bytes_read ) ;
@ -686,18 +696,12 @@ int main(int argc, char* argv[])
MINFO ( " bootstrap file path: " < < import_file_path ) ;
MINFO ( " database path: " < < m_config_folder ) ;
cryptonote : : cryptonote_protocol_stub pr ; //TODO: stub only for this kind of test, make real validation of relayed objects
cryptonote : : core core ( & pr ) ;
try
{
// fake_core needed for verification to work when enabled.
//
// NOTE: don't need fake_core method of doing things when we're going to call
// BlockchainDB add_block() directly and have available the 3 block
// properties to do so. Both ways work, but fake core isn't necessary in that
// circumstance.
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 ) ;
if ( ! core . init ( vm , NULL ) )
{
@ -725,23 +729,19 @@ int main(int argc, char* argv[])
import_from_file ( core , import_file_path , block_stop ) ;
// ensure db closed
// - transactions properly checked and handled
// - disk sync if needed
//
core . deinit ( ) ;
}
catch ( const DB_ERROR & e )
{
std : : cout < < std : : string ( " Error loading blockchain db: " ) + e . what ( ) + " -- shutting down now " < < ENDL ;
core . deinit ( ) ;
return 1 ;
}
// destructors called at exit:
//
// ensure db closed
// - transactions properly checked and handled
// - disk sync if needed
//
// fake_core object's destructor is called when it goes out of scope. For an
// LMDB fake_core, it calls Blockchain::deinit() on its object, which in turn
// calls delete on its BlockchainDB derived class' object, which closes its
// files.
return 0 ;
CATCH_ENTRY ( " Import error " , 1 ) ;