Merge pull request #2384
4e0e4e99
blockchain_import: warn for chunks over 500000, not 100000 (moneromooo-monero)5b29e87f
blockchain_import: properly cleanup core/db on exit (moneromooo-monero)e167c4d9
blockchain_import: do not error out on truncated files (moneromooo-monero)
This commit is contained in:
commit
02e5dcd2fa
|
@ -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);
|
MWARNING("WARNING: chunk_size " << chunk_size << " > BUFFER_SIZE " << BUFFER_SIZE);
|
||||||
throw std::runtime_error("Aborting: chunk size exceeds 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) {
|
else if (chunk_size == 0) {
|
||||||
MFATAL("ERROR: chunk_size == 0");
|
MFATAL("ERROR: chunk_size == 0");
|
||||||
|
@ -327,10 +327,20 @@ int import_from_file(cryptonote::core& core, const std::string& import_file_path
|
||||||
}
|
}
|
||||||
import_file.read(buffer_block, chunk_size);
|
import_file.read(buffer_block, chunk_size);
|
||||||
if (! import_file) {
|
if (! import_file) {
|
||||||
|
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: "
|
MFATAL("ERROR: unexpected end of file: bytes read before error: "
|
||||||
<< import_file.gcount() << " of chunk_size " << chunk_size);
|
<< import_file.gcount() << " of chunk_size " << chunk_size);
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
bytes_read += chunk_size;
|
bytes_read += chunk_size;
|
||||||
MDEBUG("Total bytes read: " << bytes_read);
|
MDEBUG("Total bytes read: " << bytes_read);
|
||||||
|
|
||||||
|
@ -686,18 +696,12 @@ int main(int argc, char* argv[])
|
||||||
MINFO("bootstrap file path: " << import_file_path);
|
MINFO("bootstrap file path: " << import_file_path);
|
||||||
MINFO("database path: " << m_config_folder);
|
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
|
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);
|
core.disable_dns_checkpoints(true);
|
||||||
if (!core.init(vm, NULL))
|
if (!core.init(vm, NULL))
|
||||||
{
|
{
|
||||||
|
@ -725,23 +729,19 @@ int main(int argc, char* argv[])
|
||||||
|
|
||||||
import_from_file(core, import_file_path, block_stop);
|
import_from_file(core, import_file_path, block_stop);
|
||||||
|
|
||||||
}
|
|
||||||
catch (const DB_ERROR& e)
|
|
||||||
{
|
|
||||||
std::cout << std::string("Error loading blockchain db: ") + e.what() + " -- shutting down now" << ENDL;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// destructors called at exit:
|
|
||||||
//
|
|
||||||
// ensure db closed
|
// ensure db closed
|
||||||
// - transactions properly checked and handled
|
// - transactions properly checked and handled
|
||||||
// - disk sync if needed
|
// - disk sync if needed
|
||||||
//
|
//
|
||||||
// fake_core object's destructor is called when it goes out of scope. For an
|
core.deinit();
|
||||||
// LMDB fake_core, it calls Blockchain::deinit() on its object, which in turn
|
}
|
||||||
// calls delete on its BlockchainDB derived class' object, which closes its
|
catch (const DB_ERROR& e)
|
||||||
// files.
|
{
|
||||||
|
std::cout << std::string("Error loading blockchain db: ") + e.what() + " -- shutting down now" << ENDL;
|
||||||
|
core.deinit();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
CATCH_ENTRY("Import error", 1);
|
CATCH_ENTRY("Import error", 1);
|
||||||
|
|
|
@ -34,6 +34,7 @@
|
||||||
// bounds checking is done before writing to buffer, but buffer size
|
// bounds checking is done before writing to buffer, but buffer size
|
||||||
// should be a sensible maximum
|
// should be a sensible maximum
|
||||||
#define BUFFER_SIZE 1000000
|
#define BUFFER_SIZE 1000000
|
||||||
|
#define CHUNK_SIZE_WARNING_THRESHOLD 500000
|
||||||
#define NUM_BLOCKS_PER_CHUNK 1
|
#define NUM_BLOCKS_PER_CHUNK 1
|
||||||
#define BLOCKCHAIN_RAW "blockchain.raw"
|
#define BLOCKCHAIN_RAW "blockchain.raw"
|
||||||
|
|
||||||
|
|
|
@ -436,10 +436,10 @@ uint64_t BootstrapFile::count_blocks(const std::string& import_file_path)
|
||||||
<< " height: " << h-1);
|
<< " height: " << h-1);
|
||||||
throw std::runtime_error("Aborting: chunk size exceeds buffer size");
|
throw std::runtime_error("Aborting: chunk size exceeds buffer size");
|
||||||
}
|
}
|
||||||
if (chunk_size > 100000)
|
if (chunk_size > CHUNK_SIZE_WARNING_THRESHOLD)
|
||||||
{
|
{
|
||||||
std::cout << refresh_string;
|
std::cout << refresh_string;
|
||||||
MDEBUG("NOTE: chunk_size " << chunk_size << " > 100000" << " height: "
|
MDEBUG("NOTE: chunk_size " << chunk_size << " > " << CHUNK_SIZE_WARNING_THRESHOLD << " << height: "
|
||||||
<< h-1);
|
<< h-1);
|
||||||
}
|
}
|
||||||
else if (chunk_size <= 0) {
|
else if (chunk_size <= 0) {
|
||||||
|
|
Loading…
Reference in New Issue