Skip to content

Commit

Permalink
Merge pull request #599 from drmingdrmer/30-example-remove-node
Browse files Browse the repository at this point in the history
Refactor: add example of removing nodes
  • Loading branch information
drmingdrmer authored Nov 7, 2022
2 parents 15d557c + f916c87 commit d6ac640
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 4 deletions.
34 changes: 30 additions & 4 deletions examples/raft-kv-memstore/test-cluster.sh
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ echo "Changing membership from [1] to 3 nodes cluster: [1, 2, 3]"
echo
rpc 21001/change-membership '[1, 2, 3]'
sleep 1
echo "Membership changed"
echo 'Membership changed to [1, 2, 3]'
sleep 1

echo "Get metrics from the leader again"
Expand Down Expand Up @@ -131,10 +131,36 @@ echo "Read from node 3"
echo
rpc 21003/read '"foo"'

echo "Killing all nodes in 3s..."

echo "Changing membership from [1,2,3] to [3]"
echo
rpc 21001/change-membership '[3]'
sleep 1
echo 'Membership changed to [3]'
sleep 1

echo "Get metrics from the node-3"
sleep 1
echo
rpc 21003/metrics
sleep 1


echo "Write foo=zoo on node-3"
sleep 1
echo "Killing all nodes in 2s..."
echo
rpc 21003/write '{"Set":{"key":"foo","value":"zoo"}}'
sleep 1
echo "Killing all nodes in 1s..."
echo "Data written"
sleep 1

echo "Read foo=zoo from node-3"
sleep 1
echo "Read from node 3"
echo
rpc 21003/read '"foo"'
echo


echo "Killing all nodes..."
kill
22 changes: 22 additions & 0 deletions examples/raft-kv-memstore/tests/cluster/test_cluster.rs
Original file line number Diff line number Diff line change
Expand Up @@ -195,5 +195,27 @@ async fn test_cluster() -> anyhow::Result<()> {
Ok(_) => panic!("MUST return CheckIsLeaderError"),
}

// --- Remove node 1,2 from the cluster.

println!("=== change-membership to 3, ");
let _x = client.change_membership(&btreeset! {3}).await?;

tokio::time::sleep(Duration::from_millis(1_000)).await;

println!("=== metrics after change-membership to {{3}}");
let x = client.metrics().await?;
assert_eq!(&vec![vec![3]], x.membership_config.get_joint_config());

println!("=== write `foo=zoo` to node-3");
let _x = client3
.write(&ExampleRequest::Set {
key: "foo".to_string(),
value: "zoo".to_string(),
})
.await?;

println!("=== read `foo=zoo` to node-3");
let got = client3.read(&"foo".to_string()).await?;
assert_eq!("zoo", got);
Ok(())
}

0 comments on commit d6ac640

Please sign in to comment.