perf(session): limit sessions before counting messages (#11521)

This commit is contained in:
Lifei Zhou
2026-08-25 00:55:23 +00:00
committed by GitHub
parent e0494d1d9f
commit da45bd17b0
2 changed files with 225 additions and 4 deletions
+44 -1
View File
@@ -155,6 +155,18 @@ fn session_activity_at(session: &Session) -> chrono::DateTime<chrono::Utc> {
session.last_message_at.unwrap_or(session.updated_at)
}
fn session_list_limit_if_safe_to_push_down(
ascending: bool,
working_dir: Option<&Path>,
limit: Option<usize>,
) -> Option<usize> {
if !ascending && working_dir.is_none() {
limit
} else {
None
}
}
pub async fn handle_session_list(
format: String,
ascending: bool,
@@ -162,7 +174,13 @@ pub async fn handle_session_list(
limit: Option<usize>,
) -> Result<()> {
let session_manager = SessionManager::instance();
let mut sessions = session_manager.list_sessions().await?;
let mut sessions = if let Some(limit) =
session_list_limit_if_safe_to_push_down(ascending, working_dir.as_deref(), limit)
{
session_manager.list_sessions_with_limit(limit).await?
} else {
session_manager.list_sessions().await?
};
if let Some(ref pat) = working_dir {
let pat_lower = pat.to_string_lossy().to_lowercase();
@@ -223,6 +241,31 @@ pub async fn handle_session_list(
Ok(())
}
#[cfg(test)]
mod session_list_tests {
use super::*;
#[test]
fn pushes_down_only_safe_session_list_limits() {
assert_eq!(
session_list_limit_if_safe_to_push_down(false, None, Some(50)),
Some(50)
);
assert_eq!(
session_list_limit_if_safe_to_push_down(true, None, Some(50)),
None
);
assert_eq!(
session_list_limit_if_safe_to_push_down(false, Some(Path::new("/tmp")), Some(50)),
None
);
assert_eq!(
session_list_limit_if_safe_to_push_down(false, None, None),
None
);
}
}
pub async fn handle_session_export(
session_id: String,
output_path: Option<PathBuf>,