use crate::ChangeMembers;
use crate::Raft;
use crate::RaftTypeConfig;
use crate::errors::ClientWriteError;
use crate::errors::RaftError;
use crate::errors::into_raft_result::IntoRaftResult;
#[cfg(doc)]
use crate::impls::OneshotResponder;
use crate::raft::ClientWriteResponse;
#[cfg(doc)]
use crate::raft::ManagementApi;
use crate::storage::RaftStateMachine;
impl<C, SM> Raft<C, SM>
where
C: RaftTypeConfig,
SM: RaftStateMachine<C>,
{
#[tracing::instrument(level = "info", skip_all)]
pub async fn change_membership(
&self,
members: impl Into<ChangeMembers<C::NodeId, C::Node>>,
retain: bool,
) -> Result<ClientWriteResponse<C>, RaftError<C, ClientWriteError<C>>> {
self.management_api().change_membership(members, retain).await.into_raft_result()
}
#[tracing::instrument(level = "debug", skip(self, id), fields(target=display(&id)))]
pub async fn add_learner(
&self,
id: C::NodeId,
node: C::Node,
blocking: bool,
) -> Result<ClientWriteResponse<C>, RaftError<C, ClientWriteError<C>>> {
self.management_api().add_learner(id, node, blocking).await.into_raft_result()
}
}