Use active_leaves instead of known_leaves (#6068)

* Use active_leaves for synchronization.

Otherwise on reverts the syncrhonization of create inherent would not
work.

* Add some trace logs.
This commit is contained in:
Robert Klotzner
2022-10-04 10:11:02 +02:00
committed by GitHub
parent 5d2f81035f
commit 92dc27584a
2 changed files with 26 additions and 5 deletions
@@ -57,6 +57,11 @@ impl ParachainsInherentDataProvider {
) -> Result<Self, Error> {
let pid = async {
let (sender, receiver) = futures::channel::oneshot::channel();
gum::trace!(
target: LOG_TARGET,
relay_parent = ?parent,
"Inherent data requested by Babe"
);
overseer.wait_for_activation(parent, sender).await;
receiver
.await
@@ -64,6 +69,11 @@ impl ParachainsInherentDataProvider {
.map_err(|e| Error::Subsystem(e))?;
let (sender, receiver) = futures::channel::oneshot::channel();
gum::trace!(
target: LOG_TARGET,
relay_parent = ?parent,
"Requesting inherent data (after having waited for activation)"
);
overseer
.send_msg(
ProvisionerMessage::RequestInherentData(parent, sender),
+16 -5
View File
@@ -843,6 +843,11 @@ where
self.metrics.on_head_activated();
if let Some(listeners) = self.activation_external_listeners.remove(hash) {
gum::trace!(
target: LOG_TARGET,
relay_parent = ?hash,
"Leaf got activated, notifying exterinal listeners"
);
for listener in listeners {
// it's fine if the listener is no longer interested
let _ = listener.send(Ok(()));
@@ -884,14 +889,20 @@ where
fn handle_external_request(&mut self, request: ExternalRequest) {
match request {
ExternalRequest::WaitForActivation { hash, response_channel } => {
// We use known leaves here because the `WaitForActivation` message
// is primarily concerned about leaves which subsystems have simply
// not been made aware of yet. Anything in the known leaves set,
// even if stale, has been activated in the past.
if self.known_leaves.peek(&hash).is_some() {
if self.active_leaves.get(&hash).is_some() {
gum::trace!(
target: LOG_TARGET,
relay_parent = ?hash,
"Leaf was already ready - answering `WaitForActivation`"
);
// it's fine if the listener is no longer interested
let _ = response_channel.send(Ok(()));
} else {
gum::trace!(
target: LOG_TARGET,
relay_parent = ?hash,
"Leaf not yet ready - queuing `WaitForActivation` sender"
);
self.activation_external_listeners
.entry(hash)
.or_default()