Simulation App: Make step cost configurable (#102)
* WIP: make step cost configurable * fix fmt
This commit is contained in:
parent
2d8c9f1099
commit
ea589d018a
@ -8,6 +8,7 @@ edition = "2021"
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
rand = { version = "0.8", features = ["small_rng"] }
|
rand = { version = "0.8", features = ["small_rng"] }
|
||||||
serde = { version = "1.0", features = ["derive", "rc"] }
|
serde = { version = "1.0", features = ["derive", "rc"] }
|
||||||
|
serde_with = "2.3"
|
||||||
serde_json = "1.0"
|
serde_json = "1.0"
|
||||||
|
|
||||||
clap = { version = "4", features = ["derive"] }
|
clap = { version = "4", features = ["derive"] }
|
||||||
|
@ -6,7 +6,7 @@ use serde::{Deserialize, Serialize};
|
|||||||
use simulations::{
|
use simulations::{
|
||||||
config::Config,
|
config::Config,
|
||||||
node::{
|
node::{
|
||||||
carnot::{CarnotNode, CarnotStep},
|
carnot::{CarnotNode, CarnotStep, CarnotStepSolverType},
|
||||||
Node, StepTime,
|
Node, StepTime,
|
||||||
},
|
},
|
||||||
overlay::{flat::FlatOverlay, Overlay},
|
overlay::{flat::FlatOverlay, Overlay},
|
||||||
@ -98,6 +98,7 @@ pub fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|||||||
<CarnotNode as Node>::Settings,
|
<CarnotNode as Node>::Settings,
|
||||||
<FlatOverlay as Overlay<CarnotNode>>::Settings,
|
<FlatOverlay as Overlay<CarnotNode>>::Settings,
|
||||||
CarnotStep,
|
CarnotStep,
|
||||||
|
CarnotStepSolverType,
|
||||||
>,
|
>,
|
||||||
>(std::fs::File::open(config)?)?;
|
>(std::fs::File::open(config)?)?;
|
||||||
#[allow(clippy::unit_arg)]
|
#[allow(clippy::unit_arg)]
|
||||||
|
@ -4,9 +4,10 @@ use serde::{Deserialize, Serialize};
|
|||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize)]
|
#[derive(Serialize, Deserialize)]
|
||||||
pub struct Config<N, O, S>
|
pub struct Config<N, O, S, C>
|
||||||
where
|
where
|
||||||
S: core::str::FromStr,
|
S: core::str::FromStr,
|
||||||
|
C: core::str::FromStr,
|
||||||
{
|
{
|
||||||
pub network_behaviors: HashMap<(Region, Region), StepTime>,
|
pub network_behaviors: HashMap<(Region, Region), StepTime>,
|
||||||
pub regions: Vec<Region>,
|
pub regions: Vec<Region>,
|
||||||
@ -14,5 +15,5 @@ where
|
|||||||
pub node_settings: N,
|
pub node_settings: N,
|
||||||
pub node_count: usize,
|
pub node_count: usize,
|
||||||
pub committee_size: usize,
|
pub committee_size: usize,
|
||||||
pub steps: Vec<S>,
|
pub step_costs: Vec<(S, C)>,
|
||||||
}
|
}
|
||||||
|
@ -69,6 +69,7 @@ fn receive_commit(
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash, serde::Serialize, serde::Deserialize)]
|
#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash, serde::Serialize, serde::Deserialize)]
|
||||||
|
#[serde(rename_all = "snake_case")]
|
||||||
pub enum CarnotStep {
|
pub enum CarnotStep {
|
||||||
RootReceiveProposal,
|
RootReceiveProposal,
|
||||||
ReceiveProposal,
|
ReceiveProposal,
|
||||||
@ -102,15 +103,35 @@ pub enum CarnotStepSolver {
|
|||||||
RootCommitteeReceiverSolver(RootCommitteeReceiverSolver),
|
RootCommitteeReceiverSolver(RootCommitteeReceiverSolver),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[serde_with::serde_as]
|
||||||
#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash, serde::Serialize, serde::Deserialize)]
|
#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash, serde::Serialize, serde::Deserialize)]
|
||||||
|
#[serde(rename_all = "snake_case")]
|
||||||
pub enum CarnotStepSolverType {
|
pub enum CarnotStepSolverType {
|
||||||
Plain(StepTime),
|
Plain(#[serde_as(as = "serde_with::DurationMilliSeconds")] StepTime),
|
||||||
ParentCommitteeReceiverSolver,
|
ParentCommitteeReceiverSolver,
|
||||||
ChildCommitteeReceiverSolver,
|
ChildCommitteeReceiverSolver,
|
||||||
LeaderToCommitteeReceiverSolver,
|
LeaderToCommitteeReceiverSolver,
|
||||||
RootCommitteeReceiverSolver,
|
RootCommitteeReceiverSolver,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl core::str::FromStr for CarnotStepSolverType {
|
||||||
|
type Err = String;
|
||||||
|
|
||||||
|
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
||||||
|
match s.trim().replace(['_', '-'], "").to_lowercase().as_str() {
|
||||||
|
"plain" => Ok(Self::Plain(StepTime::from_millis(1))),
|
||||||
|
"parentcommitteereceiversolver" => Ok(Self::ParentCommitteeReceiverSolver),
|
||||||
|
"childcommitteereceiversolver" => Ok(Self::ChildCommitteeReceiverSolver),
|
||||||
|
x => {
|
||||||
|
let millis = x
|
||||||
|
.parse::<u64>()
|
||||||
|
.map_err(|_| format!("Unknown step solver type: {s}"))?;
|
||||||
|
Ok(Self::Plain(StepTime::from_millis(millis)))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl CarnotStepSolverType {
|
impl CarnotStepSolverType {
|
||||||
pub fn to_solver(self) -> CarnotStepSolver {
|
pub fn to_solver(self) -> CarnotStepSolver {
|
||||||
match self {
|
match self {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user