Skip to content

Commit 2edd420

Browse files
Brian-1402Aman-Hassansatyamjay-iitd
authored
Chaos features (#45)
* Added node endpoint for crashing individual actors Untested though Also make the rpc_client generation makefile code easier to run * Actor crashing implemented * Removing clone for NodeHandle * Client side code done for dupl, loss ChaosManager at Actor TBD Co-authored-by: Brian Sajeev <Brian-1402@users.noreply.github.com> * Actor side ChaosManager completed Co-authored-by: Brian Sajeev <Brian-1402@users.noreply.github.com> * WIP review changes * Global Chaos Implemented (Untested) Separate Chaos Endpoints for cleaner chaos request types Probability & Factor Toml validation Co-authored-by: Brian Sajeev <Brian-1402@users.noreply.github.com> * added delay chaos * Actor Restarts implemented (Untested) Chaos Refactored into apply/revert types * Stop chaos endpoint added (Untested) * Fixed merge compile errors, incomplete UnsetMsgDelay endpoint Also formatting and clippy satisfaction * Disable delay chaos added (Untested) * Added paxos to examples * debugged delay * Merged master (#53) * added docs workflow * Update docs.yml * Update docs.yml #skipci * Update docs.yml [skip ci] * Update docs.yml [skip ci] * added browser based job controller * updated ui * formatting * Update api (#49) * updated generated api clients * clippy * Added #actor macro to register the actor (#50) * updated generated api clients * clippy * updated api to get list of registerd apis * wip ui * added how_to.md * added register actor macro * added paxos to ci * merged with master * fixed makefile * formatting --------- Co-authored-by: Aman-Hassan <amanhassan2003@gmail.com> Co-authored-by: Brian Sajeev <Brian-1402@users.noreply.github.com> Co-authored-by: Satyam Jay <satyamjay030@gmail.com>
1 parent a8b4974 commit 2edd420

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+4877
-108
lines changed

.github/workflows/rust.yml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,3 +57,16 @@ jobs:
5757
echo "make job failed"
5858
exit $status
5959
fi
60+
61+
- name: Run Paxos
62+
run: |
63+
cd examples/paxos
64+
make node &
65+
sleep 1
66+
67+
timeout 6s make job || echo "make job terminated after timeout"
68+
status=$?
69+
if [ $status -ne 0 ] && [ $status -ne 124 ]; then
70+
echo "make job failed"
71+
exit $status
72+
fi

Cargo.lock

Lines changed: 83 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ members = [
77
"generic_nctrl",
88
"generic_jctrl",
99
"macros",
10+
"examples/paxos",
1011
"examples/ping_pong",
1112
"examples/read_write_server",
1213
]
@@ -17,7 +18,7 @@ exclude = [
1718
resolver = "2"
1819

1920
[workspace.package]
20-
rust-version = "1.86"
21+
rust-version = "1.89"
2122
edition = "2024"
2223
license = "MIT OR Apache-2.0"
2324
authors = ["Satyam Jay"]

Makefile

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
gen_http_client:
1+
gen_http_client: kill_node
22
echo "Running demo server..."
33
- pkill reactor_nctrl
44

@@ -14,3 +14,21 @@ gen_http_client:
1414
-g typescript-axios -o ./reactor-dashboard/api-client/src --additional-properties=packageName=reactor-client
1515

1616
- pkill reactor_nctrl
17+
18+
19+
kill_node:
20+
@echo "Killing process on port 3000 if any..."
21+
@lsof -ti :3000 | xargs --no-run-if-empty kill
22+
23+
node: kill_node
24+
@echo "Running demo server..."
25+
cargo run --features swagger --bin reactor_nctrl -- --port 3000 /tmp
26+
27+
generate:
28+
@echo "Generating client"
29+
openapi-generator-cli generate -i http://localhost:3000/api-doc/openapi.json \
30+
-g rust -o rpc_client/ --additional-properties=packageName=reactor-client
31+
32+
openapi-generator-cli generate -i http://localhost:3000/api-doc/openapi.json \
33+
-g typescript-axios -o ./reactor-dashboard/api-client/src --additional-properties=packageName=reactor-client
34+

actor/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ tracing = {version = "0.1.41", features = ["std", "attributes"] }
2020
tracing-subscriber = "0.3.19"
2121
tracing-shared = "0.1.5"
2222
criterion = "0.6.0"
23+
rand = "0.9.2"
2324
serde_json = "1.0.143"
2425
inventory = "0.3.21"
2526
reactor-macros = { path = "../macros" }

actor/src/chaos_manager.rs

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
use rand::Rng;
2+
3+
#[derive(Debug)]
4+
pub struct ChaosManager {
5+
pub msg_loss_probability: Option<f32>,
6+
pub msg_duplication_factor: Option<u32>,
7+
pub msg_duplication_probability: Option<f32>,
8+
}
9+
10+
impl ChaosManager {
11+
pub fn new() -> Self {
12+
ChaosManager {
13+
msg_loss_probability: None,
14+
msg_duplication_factor: None,
15+
msg_duplication_probability: None,
16+
}
17+
}
18+
19+
pub fn set_msg_loss(&mut self, probability: f32) {
20+
self.msg_loss_probability = Some(probability);
21+
}
22+
23+
pub fn set_msg_duplication(&mut self, factor: u32, probability: f32) {
24+
self.msg_duplication_factor = Some(factor);
25+
self.msg_duplication_probability = Some(probability);
26+
}
27+
28+
#[allow(dead_code)]
29+
pub fn unset_msg_loss(&mut self) {
30+
self.msg_loss_probability = None;
31+
}
32+
33+
#[allow(dead_code)]
34+
pub fn unset_msg_duplication(&mut self) {
35+
self.msg_duplication_factor = None;
36+
self.msg_duplication_probability = None;
37+
}
38+
39+
pub fn apply_chaos<T: Clone>(&self, msg: T) -> Vec<T> {
40+
let mut rng = rand::rng();
41+
42+
if self
43+
.msg_loss_probability
44+
.is_some_and(|p| rng.random_bool(p as f64))
45+
{
46+
return vec![];
47+
}
48+
49+
if let (Some(factor), Some(prob)) = (
50+
self.msg_duplication_factor,
51+
self.msg_duplication_probability,
52+
) && rng.random_bool(prob as f64)
53+
{
54+
return vec![msg; factor as usize];
55+
}
56+
57+
vec![msg]
58+
}
59+
}

0 commit comments

Comments
 (0)