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:
+28
-7
@@ -4,8 +4,15 @@ use crate::pb::*;
|
||||
|
||||
impl GitBare {
|
||||
/// Update mirror from a remote URL (fetch + update all refs).
|
||||
pub fn update_remote_mirror(&self, request: UpdateRemoteMirrorRequest) -> GitResult<UpdateRemoteMirrorResponse> {
|
||||
let remote_name = if request.remote_name.is_empty() { "origin" } else { &request.remote_name };
|
||||
pub fn update_remote_mirror(
|
||||
&self,
|
||||
request: UpdateRemoteMirrorRequest,
|
||||
) -> GitResult<UpdateRemoteMirrorResponse> {
|
||||
let remote_name = if request.remote_name.is_empty() {
|
||||
"origin"
|
||||
} else {
|
||||
&request.remote_name
|
||||
};
|
||||
|
||||
// Add or update remote
|
||||
let remote_check = std::process::Command::new("git")
|
||||
@@ -114,12 +121,19 @@ impl GitBare {
|
||||
}
|
||||
}
|
||||
|
||||
Ok(UpdateRemoteMirrorResponse { ok: true, error: String::new() })
|
||||
Ok(UpdateRemoteMirrorResponse {
|
||||
ok: true,
|
||||
error: String::new(),
|
||||
})
|
||||
}
|
||||
|
||||
/// Fetch from a remote URL without mirroring.
|
||||
pub fn fetch_remote(&self, request: FetchRemoteRequest) -> GitResult<FetchRemoteResponse> {
|
||||
let remote_name = if request.remote_name.is_empty() { "origin" } else { &request.remote_name };
|
||||
let remote_name = if request.remote_name.is_empty() {
|
||||
"origin"
|
||||
} else {
|
||||
&request.remote_name
|
||||
};
|
||||
|
||||
// Ensure remote exists
|
||||
let exists = std::process::Command::new("git")
|
||||
@@ -158,8 +172,12 @@ impl GitBare {
|
||||
remote_name.to_string(),
|
||||
];
|
||||
|
||||
if request.prune { args.push("--prune".to_string()); }
|
||||
if request.force { args.push("--force".to_string()); }
|
||||
if request.prune {
|
||||
args.push("--prune".to_string());
|
||||
}
|
||||
if request.force {
|
||||
args.push("--force".to_string());
|
||||
}
|
||||
|
||||
if request.refspecs.is_empty() {
|
||||
args.push("+refs/heads/*:refs/heads/*".to_string());
|
||||
@@ -187,7 +205,10 @@ impl GitBare {
|
||||
});
|
||||
}
|
||||
|
||||
Ok(FetchRemoteResponse { ok: true, error: String::new() })
|
||||
Ok(FetchRemoteResponse {
|
||||
ok: true,
|
||||
error: String::new(),
|
||||
})
|
||||
}
|
||||
|
||||
/// Clone a repository from a remote URL (bare + mirror).
|
||||
|
||||
Reference in New Issue
Block a user