cleanup verifier_cache (add it to block ctx) (#1638)

rename process_block_no_orphans -> process_block_single
This commit is contained in:
Antioch Peverell 2018-10-02 16:13:02 +01:00 committed by GitHub
parent 85d5feafa3
commit 0635945740
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 8 additions and 6 deletions

View file

@ -215,7 +215,7 @@ impl Chain {
b: Block, b: Block,
opts: Options, opts: Options,
) -> Result<(Option<Tip>, Option<Block>), Error> { ) -> Result<(Option<Tip>, Option<Block>), Error> {
match self.process_block_no_orphans(b, opts) { match self.process_block_single(b, opts) {
Ok((t, b)) => { Ok((t, b)) => {
// We accepted a block, so see if we can accept any orphans // We accepted a block, so see if we can accept any orphans
if let Some(ref b) = b { if let Some(ref b) = b {
@ -230,7 +230,7 @@ impl Chain {
/// Attempt to add a new block to the chain. Returns the new chain tip if it /// Attempt to add a new block to the chain. Returns the new chain tip if it
/// has been added to the longest chain, None if it's added to an (as of /// has been added to the longest chain, None if it's added to an (as of
/// now) orphan chain. /// now) orphan chain.
pub fn process_block_no_orphans( fn process_block_single(
&self, &self,
b: Block, b: Block,
opts: Options, opts: Options,
@ -239,7 +239,7 @@ impl Chain {
let bhash = b.hash(); let bhash = b.hash();
let mut ctx = self.new_ctx(opts, &mut batch)?; let mut ctx = self.new_ctx(opts, &mut batch)?;
let res = pipe::process_block(&b, &mut ctx, &mut batch, self.verifier_cache.clone()); let res = pipe::process_block(&b, &mut ctx, &mut batch);
let add_to_hash_cache = || { let add_to_hash_cache = || {
// only add to hash cache below if block is definitively accepted // only add to hash cache below if block is definitively accepted
@ -365,6 +365,7 @@ impl Chain {
header_head, header_head,
pow_verifier: self.pow_verifier, pow_verifier: self.pow_verifier,
block_hashes_cache: self.block_hashes_cache.clone(), block_hashes_cache: self.block_hashes_cache.clone(),
verifier_cache: self.verifier_cache.clone(),
txhashset: self.txhashset.clone(), txhashset: self.txhashset.clone(),
orphans: self.orphans.clone(), orphans: self.orphans.clone(),
}) })
@ -410,7 +411,7 @@ impl Chain {
String::new() String::new()
}, },
); );
let res = self.process_block_no_orphans(orphan.block, orphan.opts); let res = self.process_block_single(orphan.block, orphan.opts);
if let Ok((_, Some(b))) = res { if let Ok((_, Some(b))) = res {
orphan_accepted = true; orphan_accepted = true;
height_accepted = b.header.height; height_accepted = b.header.height;

View file

@ -53,6 +53,8 @@ pub struct BlockContext {
pub txhashset: Arc<RwLock<txhashset::TxHashSet>>, pub txhashset: Arc<RwLock<txhashset::TxHashSet>>,
/// Recently processed blocks to avoid double-processing /// Recently processed blocks to avoid double-processing
pub block_hashes_cache: Arc<RwLock<LruCache<Hash, bool>>>, pub block_hashes_cache: Arc<RwLock<LruCache<Hash, bool>>>,
/// The verifier cache (caching verifier for rangeproofs and kernel signatures)
pub verifier_cache: Arc<RwLock<VerifierCache>>,
/// Recent orphan blocks to avoid double-processing /// Recent orphan blocks to avoid double-processing
pub orphans: Arc<OrphanBlockPool>, pub orphans: Arc<OrphanBlockPool>,
} }
@ -70,7 +72,6 @@ pub fn process_block(
b: &Block, b: &Block,
ctx: &mut BlockContext, ctx: &mut BlockContext,
batch: &mut store::Batch, batch: &mut store::Batch,
verifier_cache: Arc<RwLock<VerifierCache>>,
) -> Result<Option<Tip>, Error> { ) -> Result<Option<Tip>, Error> {
// TODO should just take a promise for a block with a full header so we don't // TODO should just take a promise for a block with a full header so we don't
// spend resources reading the full block when its header is invalid // spend resources reading the full block when its header is invalid
@ -140,7 +141,7 @@ pub fn process_block(
// Validate the block itself, make sure it is internally consistent. // Validate the block itself, make sure it is internally consistent.
// Use the verifier_cache for verifying rangeproofs and kernel signatures. // Use the verifier_cache for verifying rangeproofs and kernel signatures.
validate_block(b, batch, verifier_cache)?; validate_block(b, batch, ctx.verifier_cache.clone())?;
// Start a chain extension unit of work dependent on the success of the // Start a chain extension unit of work dependent on the success of the
// internal validation and saving operations // internal validation and saving operations