V2.7.2 stable (#11454)
* update classic testnet bootnodes (#11398)
* update classic testnet bootnodes
* Update kotti.json
* Update kotti.json
* Update kotti.json
* Update mordor.json
* verification: fix race same block + misc (#11400)
* ethcore: fix race in verification
* verification: fix some nits
* verification: refactor err type `Kind::create`
* fix: tests
* address grumbles
* address grumbles: don't panic
* fix: export hardcoded sync format (#11416)
* fix: export hardcoded sync format
* address grumbles
* make tests compile with rustc_hex 2.0
* fix grumbles: impl LowerHex for encoded Header
* goerli: replace foundation bootnode (#11433)
* Remove dead bootnodes, add new geth bootnodes (#11441)
* update kvdb-rocksdb to 0.4 (#11442)
* Avoid long state queries when serving GetNodeData requests (#11444)
* Remove dead bootnodes, add new geth bootnodes
* More granular locking when fetching state
Finish GetDataNode requests early if queries take too long
* typo
* Use latest kvdb-rocksdb
* Cleanup
* Update ethcore/sync/src/chain/supplier.rs
Co-Authored-By: Andronik Ordian <write@reusable.software>
* Address review grumbles
* Fix compilation
* Address review grumbles
Co-authored-by: Andronik Ordian <write@reusable.software>
* rlp_derive: cleanup (#11446)
* rlp_derive: update syn & co
* rlp_derive: remove dummy_const
* rlp_derive: remove unused attirubutes
* rlp-derive: change authors
* Cargo.lock: cargo update -p kvdb-rocksdb (#11447)
* Cargo.lock: new lockfile format
Manual backport of https://github.com/paritytech/parity-ethereum/pull/11448
* gcc to clang (#11453)
* gcc to clang
test
```
export CC="sccache "$CC
export CXX="sccache "$CXX
```
darwin build
```
CC=clang
CXX=clang
```
* darwin - > default clang
* Bump version and CHANGELOG.md
* chore: remove unused dependencies (#11432)
* fix: compiler warnings
* chore: remove unused dependencies
* Update CHANGELOG.md
* update Cargo.lock
* update CHANGELOG.md
* backwards compatible call_type creation_method (#11450)
* rlp_derive: update syn & co
* rlp_derive: remove dummy_const
* rlp_derive: remove unused attirubutes
* rlp-derive: change authors
* rlp_derive: add rlp(default) attribute
* Revert "Revert "[Trace] Distinguish between `create` and `create2` (#11311)" (#11427)"
This reverts commit 5d4993b0f8.
* trace: backwards compatible call_type and creation_method
* trace: add rlp backward compatibility tests
* cleanup
* i know, i hate backwards compatibility too
* address review grumbles
* update CHANGELOG.md
* just to make sure we don't screw up this again (#11455)
* Update CHANGELOG.md
Co-authored-by: Talha Cross <47772477+soc1c@users.noreply.github.com>
Co-authored-by: Niklas Adolfsson <niklasadolfsson1@gmail.com>
Co-authored-by: Martin Holst Swende <martin@swende.se>
Co-authored-by: David <dvdplm@gmail.com>
Co-authored-by: Andronik Ordian <write@reusable.software>
Co-authored-by: Denis S. Soldatov aka General-Beck <general.beck@gmail.com>
This commit is contained in:
@@ -467,30 +467,33 @@ impl<K: Kind, C> VerificationQueue<K, C> {
|
||||
}
|
||||
|
||||
/// Add a block to the queue.
|
||||
pub fn import(&self, input: K::Input) -> Result<H256, (K::Input, Error)> {
|
||||
//
|
||||
// TODO: #11403 - rework `EthcoreError::Block` to include raw bytes of the error cause
|
||||
pub fn import(&self, input: K::Input) -> Result<H256, (Error, Option<K::Input>)> {
|
||||
let hash = input.hash();
|
||||
let raw_hash = input.raw_hash();
|
||||
{
|
||||
if self.processing.read().contains_key(&hash) {
|
||||
return Err((input, Error::Import(ImportError::AlreadyQueued).into()));
|
||||
return Err((Error::Import(ImportError::AlreadyQueued), Some(input)));
|
||||
}
|
||||
|
||||
let mut bad = self.verification.bad.lock();
|
||||
if bad.contains(&hash) || bad.contains(&raw_hash) {
|
||||
return Err((input, Error::Import(ImportError::KnownBad).into()));
|
||||
return Err((Error::Import(ImportError::KnownBad), Some(input)));
|
||||
}
|
||||
|
||||
if bad.contains(&input.parent_hash()) {
|
||||
bad.insert(hash);
|
||||
return Err((input, Error::Import(ImportError::KnownBad).into()));
|
||||
return Err((Error::Import(ImportError::KnownBad), Some(input)));
|
||||
}
|
||||
}
|
||||
|
||||
match K::create(input, &*self.engine, self.verification.check_seal) {
|
||||
Ok(item) => {
|
||||
if self.processing.write().insert(hash, item.difficulty()).is_some() {
|
||||
return Err((Error::Import(ImportError::AlreadyQueued), None));
|
||||
}
|
||||
self.verification.sizes.unverified.fetch_add(item.malloc_size_of(), AtomicOrdering::SeqCst);
|
||||
|
||||
self.processing.write().insert(hash, item.difficulty());
|
||||
{
|
||||
let mut td = self.total_difficulty.write();
|
||||
*td = *td + item.difficulty();
|
||||
@@ -499,7 +502,7 @@ impl<K: Kind, C> VerificationQueue<K, C> {
|
||||
self.more_to_verify.notify_all();
|
||||
Ok(hash)
|
||||
},
|
||||
Err((input, err)) => {
|
||||
Err((err, input)) => {
|
||||
match err {
|
||||
// Don't mark future blocks as bad.
|
||||
Error::Block(BlockError::TemporarilyInvalid(_)) => {},
|
||||
@@ -517,7 +520,7 @@ impl<K: Kind, C> VerificationQueue<K, C> {
|
||||
self.verification.bad.lock().insert(hash);
|
||||
}
|
||||
}
|
||||
Err((input, err))
|
||||
Err((err, input))
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -582,7 +585,7 @@ impl<K: Kind, C> VerificationQueue<K, C> {
|
||||
let count = cmp::min(max, verified.len());
|
||||
let result = verified.drain(..count).collect::<Vec<_>>();
|
||||
|
||||
let drained_size = result.iter().map(MallocSizeOfExt::malloc_size_of).fold(0, |a, c| a + c);
|
||||
let drained_size = result.iter().map(MallocSizeOfExt::malloc_size_of).sum();
|
||||
self.verification.sizes.verified.fetch_sub(drained_size, AtomicOrdering::SeqCst);
|
||||
|
||||
self.ready_signal.reset();
|
||||
@@ -636,7 +639,7 @@ impl<K: Kind, C> VerificationQueue<K, C> {
|
||||
|
||||
/// Get the total difficulty of all the blocks in the queue.
|
||||
pub fn total_difficulty(&self) -> U256 {
|
||||
self.total_difficulty.read().clone()
|
||||
*self.total_difficulty.read()
|
||||
}
|
||||
|
||||
/// Get the current number of working verifiers.
|
||||
@@ -806,9 +809,9 @@ mod tests {
|
||||
|
||||
let duplicate_import = queue.import(new_unverified(get_good_dummy_block()));
|
||||
match duplicate_import {
|
||||
Err((_, e)) => {
|
||||
Err(e) => {
|
||||
match e {
|
||||
EthcoreError::Import(ImportError::AlreadyQueued) => {},
|
||||
(EthcoreError::Import(ImportError::AlreadyQueued), _) => {},
|
||||
_ => { panic!("must return AlreadyQueued error"); }
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user