Skip to content

Commit

Permalink
Merge pull request #20 from scireum/feature/jmu/race-condition
Browse files Browse the repository at this point in the history
Fix a race condition that lead to missing data in the IDB
  • Loading branch information
jmuscireum authored Jul 19, 2024
2 parents 3634e8c + fdb6f46 commit 91c28ee
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 6 deletions.
7 changes: 5 additions & 2 deletions jupiter-io/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,17 @@ async fn main() {
// Setup and enable the LRU cache...
jupiter::lru::cache::install(platform.clone());

// Setup and install a data repository...
jupiter::repository::install(platform.clone(), jupiter::repository::create(&platform));
// Setup a data repository...
let repository = jupiter::repository::create(&platform);

// Setup and enable InfoGraphDB...
jupiter::idb::install(platform.clone());

// Setup pyrun...
jupiter::pyrun::install(platform.clone());

// Finally install the data repository after all other actors have registered their loaders
jupiter::repository::install(platform.clone(), repository);

platform.require::<Server>().event_loop().await;
}
3 changes: 2 additions & 1 deletion jupiter-rs/src/repository/loader.rs
Original file line number Diff line number Diff line change
Expand Up @@ -256,11 +256,12 @@ pub fn actor(
mut background_task_sender: mpsc::Sender<BackgroundCommand>,
) -> Queue {
let (command_queue, mut commands_endpoint) = queue();
let mut listener = repository.listener();

spawn!(async move {
use crate::commands::ResultExt;

let mut loaders = HashMap::new();
let mut listener = repository.listener();
let config = platform.require::<Config>();
let mut config_changed_flag = config.notifier();
let mut namespaces = load_namespaces(&config);
Expand Down
11 changes: 8 additions & 3 deletions jupiter-rs/src/repository/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -289,14 +289,19 @@ pub fn create(platform: &Arc<Platform>) -> Arc<Repository> {
/// perform the initial repository scan to determine what contents are already available.
pub fn install(platform: Arc<Platform>, repository: Arc<Repository>) {
let (background_task_queue, update_notifier) = background::actor(platform.clone());
let command_queue = foreground::actor(

let loader_queue = loader::actor(
platform.clone(),
repository.clone(),
background_task_queue.clone(),
update_notifier,
);

let loader_queue = loader::actor(platform.clone(), repository, background_task_queue);
let command_queue = foreground::actor(
platform.clone(),
repository,
background_task_queue,
update_notifier,
);

if let Some(commands) = platform.find::<CommandDictionary>() {
commands.register_command(
Expand Down

0 comments on commit 91c28ee

Please sign in to comment.