Improved get_state method efficiency.
This commit is contained in:
@@ -71,7 +71,7 @@ impl From<Cluster> for MapCluster {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#[derive(Clone, Copy, Debug, Deserialize, PartialEq)]
|
#[derive(Clone, Copy, Debug, Deserialize, PartialEq, PartialOrd)]
|
||||||
pub enum Status {
|
pub enum Status {
|
||||||
Untested,
|
Untested,
|
||||||
ForIsolation(u8),
|
ForIsolation(u8),
|
||||||
@@ -191,33 +191,21 @@ impl MapFile {
|
|||||||
/// Get current recovery status.
|
/// Get current recovery status.
|
||||||
pub fn get_state(self) -> Status {
|
pub fn get_state(self) -> Status {
|
||||||
let mut recover_status = Status::Damaged;
|
let mut recover_status = Status::Damaged;
|
||||||
let mut cluster_stage: Option<u8> = Option::None;
|
|
||||||
|
|
||||||
for cluster in self.map {
|
for cluster in self.map {
|
||||||
match cluster.status {
|
match cluster.status {
|
||||||
Status::Untested => return Status::Untested,
|
Status::Untested => return Status::Untested,
|
||||||
Status::ForIsolation(cs) => {
|
Status::ForIsolation(_) => {
|
||||||
if recover_status == Status::Damaged {
|
if recover_status == Status::Damaged
|
||||||
recover_status = cluster.status;
|
|| cluster.status < recover_status {
|
||||||
} else {
|
// Note that recover_status after first condition is
|
||||||
cluster_stage = Some(cs);
|
// only ever Status::ForIsolation(_), thus PartialEq,
|
||||||
|
// PartialOrd are useful for comparing the internal value.
|
||||||
|
recover_status = cluster.status
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
Status::Damaged => (),
|
Status::Damaged => (),
|
||||||
}
|
}
|
||||||
|
|
||||||
if cluster_stage.is_some() {
|
|
||||||
let recover_stage = match recover_status {
|
|
||||||
Status::ForIsolation(rs) => rs,
|
|
||||||
_ => unreachable!(),
|
|
||||||
};
|
|
||||||
|
|
||||||
if cluster_stage.unwrap() < recover_stage {
|
|
||||||
recover_status = cluster.status
|
|
||||||
}
|
|
||||||
|
|
||||||
cluster_stage = None
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
recover_status
|
recover_status
|
||||||
|
|||||||
Reference in New Issue
Block a user