| 319 | } |
| 320 | |
| 321 | fn save_hard_state(&mut self, state: &HardState) -> nodedb_raft::error::Result<()> { |
| 322 | let write_txn = |
| 323 | self.db |
| 324 | .begin_write() |
| 325 | .map_err(|e| nodedb_raft::error::RaftError::Storage { |
| 326 | detail: format!("write txn: {e}"), |
| 327 | })?; |
| 328 | { |
| 329 | let mut table = |
| 330 | write_txn |
| 331 | .open_table(META) |
| 332 | .map_err(|e| nodedb_raft::error::RaftError::Storage { |
| 333 | detail: format!("open meta: {e}"), |
| 334 | })?; |
| 335 | |
| 336 | let bytes = zerompk::to_msgpack_vec(state).map_err(|e| { |
| 337 | nodedb_raft::error::RaftError::Storage { |
| 338 | detail: format!("serialize: {e}"), |
| 339 | } |
| 340 | })?; |
| 341 | table |
| 342 | .insert(KEY_HARD_STATE, bytes.as_slice()) |
| 343 | .map_err(|e| nodedb_raft::error::RaftError::Storage { |
| 344 | detail: format!("insert: {e}"), |
| 345 | })?; |
| 346 | } |
| 347 | write_txn |
| 348 | .commit() |
| 349 | .map_err(|e| nodedb_raft::error::RaftError::Storage { |
| 350 | detail: format!("commit: {e}"), |
| 351 | })?; |
| 352 | |
| 353 | debug!( |
| 354 | term = state.current_term, |
| 355 | voted_for = state.voted_for, |
| 356 | "raft hard state saved" |
| 357 | ); |
| 358 | Ok(()) |
| 359 | } |
| 360 | |
| 361 | fn load_hard_state(&self) -> nodedb_raft::error::Result<HardState> { |
| 362 | let read_txn = |