fn main()

in librabft-v2/src/main.rs [18:55]


fn main() {
    let args = get_arguments();
    env_logger::init();
    let seed = args.seed.unwrap_or_else(|| rand::thread_rng().gen());
    warn!("seed: {}", seed);
    let context_factory = |author, num_nodes| {
        let mut context = SimulatedContext::new(author, num_nodes, args.commands_per_epoch);
        let config = NodeConfig {
            target_commit_interval: args.target_commit_interval,
            delta: args.delta,
            gamma: args.gamma,
            lambda: args.lambda,
        };
        let mut node = NodeState::make_initial_state(&context, config, NodeTime(0));
        block_on(node.save_node(&mut context)).unwrap();
        context
    };
    let delay_distribution = simulator::RandomDelay::new(args.mean, args.variance);
    let mut sim = simulator::Simulator::<
        NodeState<SimulatedContext>,
        SimulatedContext,
        DataSyncNotification<SimulatedContext>,
        DataSyncRequest,
        DataSyncResponse<SimulatedContext>,
    >::new(seed, args.nodes, delay_distribution, context_factory);
    let contexts = sim.loop_until(
        simulator::GlobalTime(args.max_clock),
        args.output_data_files,
    );
    warn!("Commands executed per node: {:#?}", {
        let x: Vec<_> = contexts
            .iter()
            .map(|context| context.committed_history().len())
            .collect();
        x
    });
    info!("SMR contexts: {:#?}", contexts);
}