diff --git a/src/traft/storage.rs b/src/traft/storage.rs
index a1151294bd9e37b197358a21ed88c1d48af9243f..f2a49c1c533bfb69ddeeb306ad1a593b049723a3 100644
--- a/src/traft/storage.rs
+++ b/src/traft/storage.rs
@@ -322,10 +322,21 @@ impl Storage {
         Ok(())
     }
 
+    pub fn voters() -> Result<Vec<u64>, StorageError> {
+        Ok(Storage::raft_state("voters")?.unwrap_or_default())
+    }
+
+    pub fn learners() -> Result<Vec<u64>, StorageError> {
+        Ok(Storage::raft_state("learners")?.unwrap_or_default())
+    }
+
     pub fn conf_state() -> Result<raft::ConfState, StorageError> {
         Ok(raft::ConfState {
-            voters: Storage::raft_state("voters")?.unwrap_or_default(),
-            learners: Storage::raft_state("learners")?.unwrap_or_default(),
+            voters: Storage::voters()?,
+            learners: Storage::learners()?,
+            voters_outgoing: Storage::raft_state("voters_outgoing")?.unwrap_or_default(),
+            learners_next: Storage::raft_state("learners_next")?.unwrap_or_default(),
+            auto_leave: Storage::raft_state("auto_leave")?.unwrap_or_default(),
             ..Default::default()
         })
     }
@@ -333,6 +344,9 @@ impl Storage {
     pub fn persist_conf_state(cs: &raft::ConfState) -> Result<(), StorageError> {
         Storage::persist_raft_state("voters", &cs.voters)?;
         Storage::persist_raft_state("learners", &cs.learners)?;
+        Storage::persist_raft_state("voters_outgoing", &cs.voters_outgoing)?;
+        Storage::persist_raft_state("learners_next", &cs.learners_next)?;
+        Storage::persist_raft_state("auto_leave", &cs.auto_leave)?;
         Ok(())
     }