diff --git a/src/traft/node.rs b/src/traft/node.rs
index 4c7ba9517b04a44c14763c4366010494a0b22919..592297db003032fc299988b88dea602bb3c2bef2 100644
--- a/src/traft/node.rs
+++ b/src/traft/node.rs
@@ -197,8 +197,10 @@ impl Node {
 
     pub fn campaign(&self) -> Result<(), Error> {
         self.raw_operation(|raw_node| raw_node.campaign().map_err(Into::into))?;
-        // even though we don't expect a response, we still should let the
-        // main_loop do an iteration
+        // Even though we don't expect a response, we still should let the
+        // main_loop do an iteration. Without rescheduling, the Ready state
+        // wouldn't be processed, the Status wouldn't be updated, and some
+        // assertions may fail (e.g. in `postjoin()` in `main.rs`).
         fiber::reschedule();
         Ok(())
     }