Correct cache update order
This commit is contained in:
parent
a6b5aad8c9
commit
5f37f6edb4
@ -452,7 +452,32 @@ impl BlockChain {
|
|||||||
let batch = DBTransaction::new();
|
let batch = DBTransaction::new();
|
||||||
batch.put(b"best", &update.info.hash).unwrap();
|
batch.put(b"best", &update.info.hash).unwrap();
|
||||||
|
|
||||||
// These cached values must be updated atomically
|
{
|
||||||
|
let mut write_details = self.block_details.write().unwrap();
|
||||||
|
for (hash, details) in update.block_details.into_iter() {
|
||||||
|
batch.put_extras(&hash, &details);
|
||||||
|
self.note_used(CacheID::Extras(ExtrasIndex::BlockDetails, hash.clone()));
|
||||||
|
write_details.insert(hash, details);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
let mut write_receipts = self.block_receipts.write().unwrap();
|
||||||
|
for (hash, receipt) in &update.block_receipts {
|
||||||
|
batch.put_extras(hash, receipt);
|
||||||
|
write_receipts.remove(hash);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
let mut write_blocks_blooms = self.blocks_blooms.write().unwrap();
|
||||||
|
for (bloom_hash, blocks_bloom) in &update.blocks_blooms {
|
||||||
|
batch.put_extras(bloom_hash, blocks_bloom);
|
||||||
|
write_blocks_blooms.remove(bloom_hash);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// These cached values must be updated last and togeterh
|
||||||
{
|
{
|
||||||
let mut best_block = self.best_block.write().unwrap();
|
let mut best_block = self.best_block.write().unwrap();
|
||||||
let mut write_hashes = self.block_hashes.write().unwrap();
|
let mut write_hashes = self.block_hashes.write().unwrap();
|
||||||
@ -481,31 +506,6 @@ impl BlockChain {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
|
||||||
let mut write_details = self.block_details.write().unwrap();
|
|
||||||
for (hash, details) in update.block_details.into_iter() {
|
|
||||||
batch.put_extras(&hash, &details);
|
|
||||||
self.note_used(CacheID::Extras(ExtrasIndex::BlockDetails, hash.clone()));
|
|
||||||
write_details.insert(hash, details);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
let mut write_receipts = self.block_receipts.write().unwrap();
|
|
||||||
for (hash, receipt) in &update.block_receipts {
|
|
||||||
batch.put_extras(hash, receipt);
|
|
||||||
write_receipts.remove(hash);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
let mut write_blocks_blooms = self.blocks_blooms.write().unwrap();
|
|
||||||
for (bloom_hash, blocks_bloom) in &update.blocks_blooms {
|
|
||||||
batch.put_extras(bloom_hash, blocks_bloom);
|
|
||||||
write_blocks_blooms.remove(bloom_hash);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// update extras database
|
// update extras database
|
||||||
self.extras_db.write(batch).unwrap();
|
self.extras_db.write(batch).unwrap();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user