message: Do not panic on dropped requests
diff: @@ -129,6 +129,11 @@ use requests::{
  NetworkRequest, ProtoBlockRequest, StateStoreRequest, StorageRequest,
  };
  +/// Timeout that essentially is "forever".
  +///
  +/// Used to "park" tasks that should never return.
  +const A_VERY_LONG_TIME: Duration = Duration::from_secs(60 * 60 * 24 * 365 * 10_000);
  +
  /// A pinned, boxed future that produces one or more events.
  pub type Effect<Ev> = BoxFuture<'static, Multiple<Ev>>;
  @@ -401,14 +406,21 @@ impl<REv> EffectBuilder<REv> {
  let request_event = f(responder).into();
  self.0.schedule(request_event, queue_kind).await;
  - receiver.await.unwrap_or_else(|err| {
  - // The channel should never be closed, ever.
  - error!(%err, ?queue_kind, "request for {} channel closed, this is a serious bug --- \
  - a component will likely be stuck from now on ", type_name::<T>());
  + match receiver.await {
  + Ok(value) => value,
  + Err(err) => {
  + // The channel should never be closed, ever. If it is, we pretend nothing happened
  + // though, instead of crashing.
  + error!(%err, ?queue_kind, "request for {} channel closed, this may be a bug? \
  + check if a component is stuck from now on ", type_name::<T>());
  - // We cannot produce any value to satisfy the request, so all that's left is panicking.
  - panic!("request not answerable");
  - })
  + // We cannot produce any value to satisfy the request, so we just abandon this task.
  + loop {
  + tokio::time::delay_for(A_VERY_LONG_TIME).await;
  + error!("if you are seeing this message, a very long time has passed...");
  + }
  + }
  + }
  }
  /// Run and end effect immediately.
  