refactor(actor): implement Raft consensus algorithm for cluster leader election

- Add voting mechanism with term tracking and vote persistence
- Implement election triggering logic with majority vote counting
- Add primary/replica role transition handling with state management
- Integrate health check failure detection for automatic elections
- Refactor actor messaging system for distributed coordination
- Update repository registration to query cluster for existing primary
- Add broadcast mechanism for role change notifications
- Implement proper term comparison and duplicate request filtering
- Upgrade dependency versions including tokio-util for async utilities
- Optimize code formatting and line wrapping for improved readability
- Remove redundant blank lines and improve code structure consistency
- Enhance error logging and trace information for debugging purposes
This commit is contained in:
zhenyi
2026-06-10 12:35:10 +08:00
parent ab32e8826e
commit 9a0c26e5f6
40 changed files with 1184 additions and 449 deletions
+30
View File
@@ -5,3 +5,33 @@ pub mod list_packfiles;
pub mod pack_objects;
pub mod receive_pack;
pub mod upload_pack;
/// A wrapper around ReceiverStream that cancels a token when dropped.
/// Used to properly clean up child processes when clients disconnect.
pub struct CancellableReceiverStream<T> {
inner: tokio_stream::wrappers::ReceiverStream<T>,
_cancel_guard: tokio_util::sync::DropGuard,
}
impl<T> CancellableReceiverStream<T> {
pub fn new(
inner: tokio_stream::wrappers::ReceiverStream<T>,
cancel_guard: tokio_util::sync::DropGuard,
) -> Self {
Self {
inner,
_cancel_guard: cancel_guard,
}
}
}
impl<T> tokio_stream::Stream for CancellableReceiverStream<T> {
type Item = T;
fn poll_next(
mut self: std::pin::Pin<&mut Self>,
cx: &mut std::task::Context<'_>,
) -> std::task::Poll<Option<Self::Item>> {
std::pin::Pin::new(&mut self.inner).poll_next(cx)
}
}