Skip to content

Commit b96803c

Browse files
committed
Change: external_request() replace the 1st arg ServerState with RaftState
This change let user do more things with a external fn request.
1 parent c326418 commit b96803c

File tree

4 files changed

+12
-9
lines changed

4 files changed

+12
-9
lines changed

openraft/src/core/raft_core.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -858,7 +858,7 @@ impl<C: RaftTypeConfig, N: RaftNetworkFactory<C>, S: RaftStorage<C>> RaftCore<C,
858858
}
859859
}
860860
RaftMsg::ExternalRequest { req } => {
861-
req(self.engine.state.server_state, &mut self.storage, &mut self.network);
861+
req(&self.engine.state, &mut self.storage, &mut self.network);
862862
}
863863
RaftMsg::Elect { server_state_count } => {
864864
if server_state_count != Some(self.server_state_count) {

openraft/src/raft.rs

+5-3
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ use tracing::Span;
1616

1717
use crate::config::Config;
1818
use crate::core::RaftCore;
19-
use crate::core::ServerState;
2019
use crate::error::AddLearnerError;
2120
use crate::error::AppendEntriesError;
2221
use crate::error::CheckIsLeaderError;
@@ -38,6 +37,7 @@ use crate::MessageSummary;
3837
use crate::Node;
3938
use crate::NodeId;
4039
use crate::RaftNetworkFactory;
40+
use crate::RaftState;
4141
use crate::RaftStorage;
4242
use crate::SnapshotMeta;
4343
use crate::Vote;
@@ -524,7 +524,7 @@ impl<C: RaftTypeConfig, N: RaftNetworkFactory<C>, S: RaftStorage<C>> Raft<C, N,
524524
///
525525
/// If the API channel is already closed (Raft is in shutdown), then the request functor is
526526
/// destroyed right away and not called at all.
527-
pub fn external_request<F: FnOnce(ServerState, &mut S, &mut N) + Send + 'static>(&self, req: F) {
527+
pub fn external_request<F: FnOnce(&RaftState<C::NodeId>, &mut S, &mut N) + Send + 'static>(&self, req: F) {
528528
let _ignore_error = self.inner.tx_api.send((
529529
RaftMsg::ExternalRequest { req: Box::new(req) },
530530
tracing::span::Span::none(), // fire-and-forget, so no span
@@ -667,7 +667,8 @@ pub(crate) enum RaftMsg<C: RaftTypeConfig, N: RaftNetworkFactory<C>, S: RaftStor
667667
},
668668

669669
ExternalRequest {
670-
req: Box<dyn FnOnce(ServerState, &mut S, &mut N) + Send + 'static>,
670+
#[allow(clippy::type_complexity)]
671+
req: Box<dyn FnOnce(&RaftState<C::NodeId>, &mut S, &mut N) + Send + 'static>,
671672
},
672673

673674
/// Trigger an election
@@ -930,6 +931,7 @@ impl<C: RaftTypeConfig> ClientWriteRequest<C> {
930931
serde(bound = "C::R: AppDataResponse")
931932
)]
932933
pub struct ClientWriteResponse<C: RaftTypeConfig> {
934+
/// The id of the log that is applied.
933935
pub log_id: LogId<C::NodeId>,
934936

935937
/// Application specific response data.

openraft/tests/fixtures/mod.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ use openraft::Raft;
5757
use openraft::RaftMetrics;
5858
use openraft::RaftNetwork;
5959
use openraft::RaftNetworkFactory;
60+
use openraft::RaftState;
6061
use openraft::RaftTypeConfig;
6162
use openraft::ServerState;
6263
use openraft::StoreExt;
@@ -568,7 +569,7 @@ where
568569

569570
/// Send external request to the particular node.
570571
pub fn external_request<
571-
F: FnOnce(ServerState, &mut StoreExt<C, S>, &mut TypedRaftRouter<C, S>) + Send + 'static,
572+
F: FnOnce(&RaftState<C::NodeId>, &mut StoreExt<C, S>, &mut TypedRaftRouter<C, S>) + Send + 'static,
572573
>(
573574
&self,
574575
target: C::NodeId,

openraft/tests/initialize/t20_initialization.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ async fn initialization() -> anyhow::Result<()> {
6161
// (since they are awaited).
6262
for node in [0, 1, 2] {
6363
router.external_request(node, |s, _sto, _net| {
64-
assert_eq!(s, ServerState::Learner);
64+
assert_eq!(s.server_state, ServerState::Learner);
6565
});
6666
}
6767

@@ -110,7 +110,7 @@ async fn initialization() -> anyhow::Result<()> {
110110
let mut follower_count = 0;
111111
for node in [0, 1, 2] {
112112
let (tx, rx) = oneshot::channel();
113-
router.external_request(node, |s, _sm, _net| tx.send(s).unwrap());
113+
router.external_request(node, |s, _sm, _net| tx.send(s.server_state).unwrap());
114114
match rx.await.unwrap() {
115115
ServerState::Leader => {
116116
assert!(!found_leader);
@@ -140,7 +140,7 @@ async fn initialize_err_target_not_include_target() -> anyhow::Result<()> {
140140

141141
for node in [0, 1] {
142142
router.external_request(node, |s, _sto, _net| {
143-
assert_eq!(s, ServerState::Learner);
143+
assert_eq!(s.server_state, ServerState::Learner);
144144
});
145145
}
146146

@@ -174,7 +174,7 @@ async fn initialize_err_not_allowed() -> anyhow::Result<()> {
174174

175175
for node in [0] {
176176
router.external_request(node, |s, _sto, _net| {
177-
assert_eq!(s, ServerState::Learner);
177+
assert_eq!(s.server_state, ServerState::Learner);
178178
});
179179
}
180180

0 commit comments

Comments
 (0)