feat(cluster): implement Raft consensus with tracing and HTTP support

- Add Raft log and snapshot mechanisms for distributed consensus
- Integrate hyper HTTP server and client libraries for network communication
- Enhance tracing capabilities with structured logging and spans
- Add dependency tracking for new consensus-related crates
- Implement snapshot storage with serialization and persistence
- Add remote repository synchronization via Raft commands
- Include comprehensive tracing instrumentation across services
This commit is contained in:
zhenyi
2026-06-10 18:33:42 +08:00
parent 0207cde234
commit c32a7cad2f
10 changed files with 453 additions and 6 deletions
+12
View File
@@ -182,8 +182,12 @@ impl diff_service_server::DiffService for GitksService {
let m = crate::metrics::RequestMetrics::new("gitks.DiffService/RawDiff");
let inner = request.into_inner();
let _rate = self.acquire_rate_limit(inner.repository.as_ref()).await?;
let repo = self.repo_label(inner.repository.as_ref());
let span = tracing::info_span!("diff.raw_diff", %repo);
let _enter = span.enter();
let gb = self.resolve(inner.repository.as_ref())?;
let chunks = gb.raw_diff(inner).map_err(into_status)?;
tracing::info!(%repo, "raw_diff streaming started");
m.record("ok");
Ok(tonic::Response::new(into_stream(chunks)))
}
@@ -195,8 +199,12 @@ impl diff_service_server::DiffService for GitksService {
let m = crate::metrics::RequestMetrics::new("gitks.DiffService/RawPatch");
let inner = request.into_inner();
let _rate = self.acquire_rate_limit(inner.repository.as_ref()).await?;
let repo = self.repo_label(inner.repository.as_ref());
let span = tracing::info_span!("diff.raw_patch", %repo);
let _enter = span.enter();
let gb = self.resolve(inner.repository.as_ref())?;
let chunks = gb.raw_patch(inner).map_err(into_status)?;
tracing::info!(%repo, "raw_patch streaming started");
m.record("ok");
Ok(tonic::Response::new(into_stream(chunks)))
}
@@ -208,8 +216,12 @@ impl diff_service_server::DiffService for GitksService {
let m = crate::metrics::RequestMetrics::new("gitks.DiffService/FindChangedPaths");
let inner = request.into_inner();
let _rate = self.acquire_rate_limit(inner.repository.as_ref()).await?;
let repo = self.repo_label(inner.repository.as_ref());
let span = tracing::info_span!("diff.find_changed_paths", %repo);
let _enter = span.enter();
let gb = self.resolve(inner.repository.as_ref())?;
let resp = gb.find_changed_paths(inner).map_err(into_status)?;
tracing::info!(%repo, paths = resp.paths.len(), "find_changed_paths done");
m.record("ok");
Ok(tonic::Response::new(resp))
}