Build a successful `JoinResponse` from the current topology and routing.
(
topology: &ClusterTopology,
routing: &RoutingTable,
cluster_id: u64,
)
| 116 | |
| 117 | /// Build a successful `JoinResponse` from the current topology and routing. |
| 118 | fn build_response( |
| 119 | topology: &ClusterTopology, |
| 120 | routing: &RoutingTable, |
| 121 | cluster_id: u64, |
| 122 | ) -> JoinResponse { |
| 123 | let nodes: Vec<JoinNodeInfo> = topology |
| 124 | .all_nodes() |
| 125 | .map(|n| JoinNodeInfo { |
| 126 | node_id: n.node_id, |
| 127 | addr: n.addr.clone(), |
| 128 | state: n.state.as_u8(), |
| 129 | raft_groups: n.raft_groups.clone(), |
| 130 | wire_version: n.wire_version, |
| 131 | spiffe_id: n.spiffe_id.clone(), |
| 132 | spki_pin: n.spki_pin.map(|arr| arr.to_vec()), |
| 133 | }) |
| 134 | .collect(); |
| 135 | |
| 136 | let groups: Vec<JoinGroupInfo> = routing |
| 137 | .group_members() |
| 138 | .iter() |
| 139 | .map(|(&gid, info)| JoinGroupInfo { |
| 140 | group_id: gid, |
| 141 | leader: info.leader, |
| 142 | members: info.members.clone(), |
| 143 | learners: info.learners.clone(), |
| 144 | }) |
| 145 | .collect(); |
| 146 | |
| 147 | JoinResponse { |
| 148 | success: true, |
| 149 | error: String::new(), |
| 150 | cluster_id, |
| 151 | nodes, |
| 152 | vshard_to_group: routing.vshard_to_group().to_vec(), |
| 153 | groups, |
| 154 | } |
| 155 | } |
| 156 | |
| 157 | /// Build a rejection response with the given error message. |
| 158 | fn reject(error: String) -> JoinResponse { |
no test coverage detected