Skip to content

Commit

Permalink
fix: Make solidifiers immutable (#159)
Browse files Browse the repository at this point in the history
  • Loading branch information
grtlr committed May 16, 2022
1 parent 1406a9f commit 8c55537
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 10 deletions.
15 changes: 7 additions & 8 deletions bin/inx-chronicle/src/collector/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@ pub mod solidifier;
#[cfg(all(feature = "stardust", feature = "inx"))]
pub(crate) mod stardust_inx;

use std::collections::HashMap;

use async_trait::async_trait;
use chronicle::{
db::{bson::DocError, MongoDb},
Expand Down Expand Up @@ -44,22 +42,21 @@ impl Collector {

#[async_trait]
impl Actor for Collector {
type State = HashMap<usize, Addr<Solidifier>>;
type State = Box<[Addr<Solidifier>]>;
type Error = CollectorError;

async fn init(&mut self, cx: &mut ActorContext<Self>) -> Result<Self::State, Self::Error> {
let mut solidifiers = HashMap::new();
let mut solidifiers = Vec::with_capacity(self.config.solidifier_count);
for i in 0..self.config.solidifier_count {
solidifiers.insert(
i,
solidifiers.push(
cx.spawn_child(Solidifier::new(i, self.db.clone()).with_registration(false))
.await,
);
}
#[cfg(all(feature = "stardust", feature = "inx"))]
cx.spawn_child(stardust_inx::InxWorker::new(self.config.inx.clone()))
.await;
Ok(solidifiers)
Ok(solidifiers.into_boxed_slice())
}
}

Expand All @@ -79,7 +76,9 @@ impl HandleEvent<Report<Solidifier>> for Collector {
ActorError::Result(e) => match e {
#[cfg(all(feature = "stardust", feature = "inx"))]
solidifier::SolidifierError::MissingStardustInxRequester => {
solidifiers.insert(report.actor.id, cx.spawn_child(report.actor).await);
let actor_id = report.actor.id;
// Panic: `Solidifier::id` points to the correct index by construction.
solidifiers[actor_id] = cx.spawn_child(report.actor).await;
}
// TODO: Maybe map Solidifier errors to Collector errors and return them?
_ => {
Expand Down
4 changes: 2 additions & 2 deletions bin/inx-chronicle/src/collector/stardust_inx/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -185,8 +185,8 @@ impl HandleEvent<inx::proto::Milestone> for Collector {
.extend(Vec::from(rec.payload.essence.parents).into_iter());
solidifiers
// Divide solidifiers fairly by milestone
.get(&(rec.milestone_index as usize % self.config.solidifier_count))
// Unwrap: We never remove solidifiers, so they should always exist
.get(rec.milestone_index as usize % self.config.solidifier_count)
// Unwrap: We can never remove a `Solidifier` from the boxed slice, so they should always exist.
.unwrap()
.send(state)?;
}
Expand Down

0 comments on commit 8c55537

Please sign in to comment.