Skip to content
Snippets Groups Projects
Commit 3311a808 authored by Georgy Moshkin's avatar Georgy Moshkin :speech_balloon: Committed by Georgy Moshkin
Browse files

fix(grades): don't allow peers to change their Grade

parent 1de45a05
No related branches found
No related tags found
1 merge request!244attempt at topology governor
......@@ -19,7 +19,7 @@ use clap::StructOpt as _;
use protobuf::Message as _;
use crate::traft::InstanceId;
use crate::traft::{Grade, LogicalClock, RaftIndex, TargetGrade, UpdatePeerRequest};
use crate::traft::{LogicalClock, RaftIndex, TargetGrade, UpdatePeerRequest};
use traft::error::Error;
mod app;
......@@ -828,7 +828,6 @@ fn postjoin(args: &args::Run, storage: RaftSpaceAccess, peer_storage: PeerStorag
tlog!(Info, "initiating self-activation of {}", peer.instance_id);
let req = UpdatePeerRequest::new(peer.instance_id, cluster_id)
.with_grade(Grade::Online)
.with_target_grade(TargetGrade::Online)
.with_failure_domain(args.failure_domain());
......
......@@ -9,8 +9,8 @@ use crate::{stringify_cfunc, tarantool, tlog};
use crate::traft::error::Error;
use crate::traft::event;
use crate::traft::node;
use crate::traft::Grade;
use crate::traft::Storage;
use crate::traft::TargetGrade;
use crate::traft::{UpdatePeerRequest, UpdatePeerResponse};
pub fn on_shutdown() {
......@@ -44,7 +44,8 @@ pub fn on_shutdown() {
.cluster_id()
.unwrap()
.expect("cluster_id must be present");
let req = UpdatePeerRequest::new(peer.instance_id, cluster_id).with_grade(Grade::Offline);
let req = UpdatePeerRequest::new(peer.instance_id, cluster_id)
.with_target_grade(TargetGrade::Offline);
let fn_name = stringify_cfunc!(raft_update_peer);
// will run until we get successfully deactivate or tarantool shuts down
......@@ -108,6 +109,18 @@ fn raft_update_peer(
}));
}
let mut req = req;
let instance_id = &*req.instance_id;
req.changes.retain(|ch| match ch {
super::PeerChange::Grade(grade) => {
tlog!(Warning, "attempt to change grade by peer";
"instance_id" => instance_id,
"grade" => grade.to_str(),
);
false
}
_ => true,
});
node.handle_topology_request_and_wait(req.into())?;
Ok(UpdatePeerResponse {})
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment