-
Notifications
You must be signed in to change notification settings - Fork 803
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Arc
definition in TransactionPool
#7042
Arc
definition in TransactionPool
#7042
Conversation
/// Get hash of transaction. | ||
fn hash_of(&self, transaction: &B::Extrinsic) -> H; | ||
fn hash_of(&self, transaction: &Arc<B::Extrinsic>) -> H; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think Arc is not needed here.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I mean we are already passing reference to the extrinsics data.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah 👍
/// Import a transaction into the pool. | ||
/// | ||
/// This will return future. | ||
fn import(&self, transaction: B::Extrinsic) -> TransactionImportFuture; | ||
fn import(&self, transaction: Arc<B::Extrinsic>) -> TransactionImportFuture; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This currently does not make sense. We would need to change submit_one
/ submit_and_watch
API to accept Arc.
Otherwise we create Arc, then dereference it and create new one within transcaction pool implementation.
For the sake of the simplicity I would only rework
When it comes to |
@dharjeezy are you planning to continue working on this? |
yes. i will get it done through the week/weekend. |
@@ -471,7 +471,8 @@ where | |||
|
|||
debug!(target: LOG_TARGET, "Propagating transaction [{:?}]", hash); | |||
if let Some(transaction) = self.transaction_pool.transaction(hash) { | |||
let propagated_to = self.do_propagate_transactions(&[(hash.clone(), transaction)]); | |||
let propagated_to = | |||
self.do_propagate_transactions(&[(hash.clone(), Arc::new(transaction))]); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Could we avoid Arc::new
here?
I think that this transaction
method could also provide an Arc
reference, here:
polkadot-sdk/substrate/client/service/src/lib.rs
Lines 562 to 567 in 682f8cd
fn transaction(&self, hash: &H) -> Option<B::Extrinsic> { | |
self.pool.ready_transaction(hash).and_then( | |
// Only propagable transactions should be resolved for network service. | |
|tx| if tx.is_propagable() { Some((**tx.data()).clone()) } else { None }, | |
) | |
} |
This is just method of the same trait (sc-network-transactions::config::TransactionPool
), so should be easily doable:
fn transaction(&self, hash: &H) -> Option<B::Extrinsic>; |
Would you change it too?
prdoc/pr_5978.prdoc
Outdated
title: `networking::TransactionPool` should accept `Arc` | ||
doc: | ||
- audience: Node Dev | ||
description: The TransactionPool trait now accepts an `Arc` for transactions. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
description: The TransactionPool trait now accepts an `Arc` for transactions. | |
description: The `sc_network_transactions::config::TransactionPool` trait now accepts an `Arc` for transactions. |
substrate/client/service/src/lib.rs
Outdated
self.pool.ready_transaction(hash).and_then( | ||
// Only propagable transactions should be resolved for network service. | ||
|tx| if tx.is_propagable() { Some((**tx.data()).clone()) } else { None }, | ||
|tx| if tx.is_propagable() { Some(Arc::new((**tx.data()).clone())) } else { None }, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We don't need new Arc
, something like this should work:
|tx| if tx.is_propagable() { Some(Arc::new((**tx.data()).clone())) } else { None }, | |
|tx| tx.is_propagable().then(|| { tx.data().clone() }), |
prdoc/pr_5978.prdoc
Outdated
@@ -0,0 +1,9 @@ | |||
title: `networking::TransactionPool` should accept `Arc` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Name of the file is incorrect. Please rename it to: pr_7042.prdoc
prdoc/pr_5978.prdoc
Outdated
title: `networking::TransactionPool` should accept `Arc` | ||
doc: | ||
- audience: Node Dev | ||
description: The `sc_network_transactions::config::TransactionPool` trait now accepts an `Arc` for transactions. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
description: The `sc_network_transactions::config::TransactionPool` trait now accepts an `Arc` for transactions. | |
description: The `sc_network_transactions::config::TransactionPool` trait now returns an `Arc` for transactions. |
Looks good, thank you! |
bot fmt |
@michalkucharczyk https://gitlab.parity.io/parity/mirrors/polkadot-sdk/-/jobs/8096196 was started for your command Comment |
@michalkucharczyk Command |
b2004ed
closes #5978