perf(session): limit sessions before counting messages (#11521)
This commit is contained in:
@@ -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>,
|
||||
|
||||
Reference in New Issue
Block a user