refactor(cache): redesign cache system with structured keys and improved performance

- Add repo_path parameter to cached_response and cached_vec_response functions
- Implement structured cache key format with namespace, repo_path, and request proto
- Replace global cache with Moka in-memory cache using weight-based eviction
- Set 256MB memory cap with 10-minute TTL and 2-minute TTI policy
- Add metrics collection for cache operations and evictions
- Implement efficient repo-scoped invalidation using key structure
- Add detailed documentation comments explaining cache architecture
- Remove outdated dependencies and update dependency versions
- Add error handling for encoding failures in cache operations
- Optimize Vec responses with length-delimited encoding and pre-allocation
This commit is contained in:
zhenyi
2026-06-12 12:53:23 +08:00
parent a40da90ef9
commit 934858bebf
82 changed files with 1273 additions and 4969 deletions
+37 -33
View File
@@ -20,7 +20,7 @@ impl GitBare {
crate::sanitize::validate_refspec(rs)?;
}
let remote_check = std::process::Command::new("git")
let remote_exists = std::process::Command::new("git")
.args([
"--git-dir",
&self.bare_dir.to_string_lossy(),
@@ -28,38 +28,33 @@ impl GitBare {
"get-url",
remote_name,
])
.output();
.output()
.map(|output| output.status.success())
.unwrap_or(false);
if remote_check.is_err() || !remote_check.unwrap().status.success() {
std::process::Command::new("git")
.args([
"--git-dir",
&self.bare_dir.to_string_lossy(),
"remote",
"add",
remote_name,
&request.remote_url,
])
.output()
.map_err(|e| crate::error::GitError::CommandFailed {
status_code: None,
stderr: e.to_string(),
})?;
} else {
std::process::Command::new("git")
.args([
"--git-dir",
&self.bare_dir.to_string_lossy(),
"remote",
"set-url",
remote_name,
&request.remote_url,
])
.output()
.map_err(|e| crate::error::GitError::CommandFailed {
status_code: None,
stderr: e.to_string(),
})?;
let remote_command = if remote_exists { "set-url" } else { "add" };
let remote_output = std::process::Command::new("git")
.args([
"--git-dir",
&self.bare_dir.to_string_lossy(),
"remote",
remote_command,
remote_name,
&request.remote_url,
])
.output()
.map_err(|e| crate::error::GitError::CommandFailed {
status_code: None,
stderr: e.to_string(),
})?;
if !remote_output.status.success() {
return Ok(UpdateRemoteMirrorResponse {
ok: false,
error: String::from_utf8_lossy(&remote_output.stderr)
.trim()
.to_string(),
});
}
let mut fetch_args = vec![
@@ -156,7 +151,7 @@ impl GitBare {
.unwrap_or(false);
if !exists {
std::process::Command::new("git")
let remote_output = std::process::Command::new("git")
.args([
"--git-dir",
&self.bare_dir.to_string_lossy(),
@@ -170,6 +165,15 @@ impl GitBare {
status_code: None,
stderr: e.to_string(),
})?;
if !remote_output.status.success() {
return Ok(FetchRemoteResponse {
ok: false,
error: String::from_utf8_lossy(&remote_output.stderr)
.trim()
.to_string(),
});
}
}
let mut args = vec![