Writing the object_database is now almost atomic
This commit is contained in:
parent
b71f20e060
commit
95a5b57c4f
1 changed files with 8 additions and 4 deletions
|
|
@ -71,16 +71,20 @@ index& object_database::get_mutable_index(uint8_t space_id, uint8_t type_id)
|
|||
void object_database::flush()
|
||||
{
|
||||
// ilog("Save object_database in ${d}", ("d", _data_dir));
|
||||
fc::create_directories( _data_dir / "object_database" / "lock" );
|
||||
fc::create_directories( _data_dir / "object_database.tmp" / "lock" );
|
||||
for( uint32_t space = 0; space < _index.size(); ++space )
|
||||
{
|
||||
fc::create_directories( _data_dir / "object_database" / fc::to_string(space) );
|
||||
fc::create_directories( _data_dir / "object_database.tmp" / fc::to_string(space) );
|
||||
const auto types = _index[space].size();
|
||||
for( uint32_t type = 0; type < types; ++type )
|
||||
if( _index[space][type] )
|
||||
_index[space][type]->save( _data_dir / "object_database" / fc::to_string(space)/fc::to_string(type) );
|
||||
_index[space][type]->save( _data_dir / "object_database.tmp" / fc::to_string(space)/fc::to_string(type) );
|
||||
}
|
||||
fc::remove_all( _data_dir / "object_database" / "lock" );
|
||||
fc::remove_all( _data_dir / "object_database.tmp" / "lock" );
|
||||
if( fc::exists( _data_dir / "object_database" ) )
|
||||
fc::rename( _data_dir / "object_database", _data_dir / "object_database.old" );
|
||||
fc::rename( _data_dir / "object_database.tmp", _data_dir / "object_database" );
|
||||
fc::remove_all( _data_dir / "object_database.old" );
|
||||
}
|
||||
|
||||
void object_database::wipe(const fc::path& data_dir)
|
||||
|
|
|
|||
Loading…
Reference in a new issue