Struct fbas_analyzer::Analysis
source · pub struct Analysis { /* private fields */ }
Expand description
Front end for many interesting FBAS analyses. Among other things, it does ID space shrinking (which improves memory and performance when using bit sets) and caches the results of long-running computations.
Implementations§
source§impl Analysis
impl Analysis
sourcepub fn shrink_to_core_nodes(&mut self)
pub fn shrink_to_core_nodes(&mut self)
Shrink the FBAS to its core nodes, i.e., to the union of all quorum-containing strongly connected components. Future splitting sets returned by this object will miss any splitting sets that do not consist entirely of core nodes and don’t cause at least one pair of core nodes to end up in non-intersecting quorums.
sourcepub fn all_nodes(&self) -> NodeIdSetResult
pub fn all_nodes(&self) -> NodeIdSetResult
Nodes in the analyzed FBAS - not filtered by relevance.
sourcepub fn satisfiable_nodes(&self) -> NodeIdSetResult
pub fn satisfiable_nodes(&self) -> NodeIdSetResult
Nodes in the analyzed FBAS that can be satisfied given their quorum sets and the nodes existing in the FBAS.
sourcepub fn unsatisfiable_nodes(&self) -> NodeIdSetResult
pub fn unsatisfiable_nodes(&self) -> NodeIdSetResult
Nodes in the analyzed FBAS that can never be satisfied given their quorum sets and the nodes existing in the FBAS.
sourcepub fn has_quorum_intersection(&self) -> bool
pub fn has_quorum_intersection(&self) -> bool
Regular quorum intersection check via finding all minimal quorums (algorithm inspired by Lachowski 2019).
sourcepub fn has_quorum_intersection_via_alternative_check(
&self
) -> (bool, Option<NodeIdSetVecResult>)
pub fn has_quorum_intersection_via_alternative_check( &self ) -> (bool, Option<NodeIdSetVecResult>)
Quorum intersection check that works without enumerating all minimal quorums.
sourcepub fn minimal_quorums(&self) -> NodeIdSetVecResult
pub fn minimal_quorums(&self) -> NodeIdSetVecResult
Minimal quorums - no proper subset of any of these node sets is a quorum.
sourcepub fn minimal_blocking_sets(&self) -> NodeIdSetVecResult
pub fn minimal_blocking_sets(&self) -> NodeIdSetVecResult
Minimal blocking sets - minimal indispensable sets for global liveness.
sourcepub fn minimal_splitting_sets(&self) -> NodeIdSetVecResult
pub fn minimal_splitting_sets(&self) -> NodeIdSetVecResult
Minimal splitting sets - minimal indispensable sets for safety.
sourcepub fn minimal_splitting_sets_with_affected_quorums(
&self
) -> Vec<(NodeIdSetResult, NodeIdSetVecResult)>
pub fn minimal_splitting_sets_with_affected_quorums( &self ) -> Vec<(NodeIdSetResult, NodeIdSetVecResult)>
For each minimal splitting set, returns two or more quorums that it’s splitting, i.e., quorums that lack quorum intersection after the splitting sets are deleted from the FBAS.
sourcepub fn top_tier(&self) -> NodeIdSetResult
pub fn top_tier(&self) -> NodeIdSetResult
Top tier - the set of nodes exclusively relevant when determining minimal quorums and minimal blocking sets.
sourcepub fn symmetric_top_tier(&self) -> Option<QuorumSet>
pub fn symmetric_top_tier(&self) -> Option<QuorumSet>
If the top tier is symmetric, i.e., each two top-tier nodes have the same quorum set,
return the top tier’s common quorum set. Else return None
.
sourcepub fn symmetric_clusters(&self) -> Vec<QuorumSet>
pub fn symmetric_clusters(&self) -> Vec<QuorumSet>
Symmetric clusters - sets of nodes in which each two nodes have the same quorum set. Here, each found symmetric cluster is represented by its common quorum set.