Sync block verification (#74)

* Synchronize block verification
* max_round_blocks_to_import set to 1
* Fixed test that rely on 12block batches

Co-authored-by: adria0.eth <5526331+adria0@users.noreply.github.com>
This commit is contained in:
rakita 2020-10-27 10:45:48 +01:00 committed by GitHub
parent 410853e280
commit 50a4d5fa57
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 18 additions and 10 deletions

View File

@ -389,6 +389,8 @@ impl Importer {
let db = client.db.read();
db.key_value().flush().expect("DB flush failed.");
self.block_queue.resignal_verification();
imported
}

View File

@ -151,7 +151,7 @@ impl Default for ClientConfig {
history_mem: 32 * mb,
check_seal: true,
transaction_verification_queue_size: 8192,
max_round_blocks_to_import: 12,
max_round_blocks_to_import: 1,
snapshot: Default::default(),
}
}

View File

@ -278,7 +278,7 @@ fn can_handle_long_fork() {
push_blocks_to_client(&client, 49, 1201, 800);
push_blocks_to_client(&client, 53, 1201, 600);
for _ in 0..400 {
for _ in 0..2300 {
client.import_verified_blocks();
}
assert_eq!(2000, client.chain_info().best_block_number);

View File

@ -665,11 +665,17 @@ impl<K: Kind> VerificationQueue<K> {
.verified
.fetch_sub(drained_size, AtomicOrdering::SeqCst);
result
}
/// release taken signal and call async ClientIoMessage::BlockVerified call to client so that it can continue verification.
/// difference between sync and async is whose thread pool is used.
pub fn resignal_verification(&self) {
let verified = self.verification.verified.lock();
self.ready_signal.reset();
if !verified.is_empty() {
self.ready_signal.set_async();
}
result
}
/// Returns true if there is nothing currently in the queue.

View File

@ -706,7 +706,7 @@ usage! {
"--stratum-secret=[STRING]",
"Secret for authorizing Stratum server for peers.",
ARG arg_max_round_blocks_to_import: (usize) = 12usize, or |c: &Config| c.mining.as_ref()?.max_round_blocks_to_import.clone(),
ARG arg_max_round_blocks_to_import: (usize) = 1usize, or |c: &Config| c.mining.as_ref()?.max_round_blocks_to_import.clone(),
"--max-round-blocks-to-import=[S]",
"Maximal number of blocks to import for each import round.",
@ -1386,7 +1386,7 @@ mod tests {
arg_notify_work: Some("http://localhost:3001".into()),
flag_refuse_service_transactions: false,
flag_infinite_pending_block: false,
arg_max_round_blocks_to_import: 12usize,
arg_max_round_blocks_to_import: 1usize,
flag_stratum: false,
arg_stratum_interface: "local".to_owned(),

View File

@ -1369,7 +1369,7 @@ mod tests {
check_seal: true,
with_color: !cfg!(windows),
verifier_settings: Default::default(),
max_round_blocks_to_import: 12,
max_round_blocks_to_import: 1,
}))
);
}
@ -1395,7 +1395,7 @@ mod tests {
from_block: BlockId::Number(1),
to_block: BlockId::Latest,
check_seal: true,
max_round_blocks_to_import: 12,
max_round_blocks_to_import: 1,
}))
);
}
@ -1423,7 +1423,7 @@ mod tests {
code: true,
min_balance: None,
max_balance: None,
max_round_blocks_to_import: 12,
max_round_blocks_to_import: 1,
}))
);
}
@ -1456,7 +1456,7 @@ mod tests {
from_block: BlockId::Number(1),
to_block: BlockId::Latest,
check_seal: true,
max_round_blocks_to_import: 12,
max_round_blocks_to_import: 1,
}))
);
}
@ -1550,7 +1550,7 @@ mod tests {
download_old_blocks: true,
verifier_settings: Default::default(),
no_persistent_txqueue: false,
max_round_blocks_to_import: 12,
max_round_blocks_to_import: 1,
metrics_conf: MetricsConfiguration::default(),
};
expected.secretstore_conf.enabled = cfg!(feature = "secretstore");