diff --git a/src/frontend/src/instance/jaeger.rs b/src/frontend/src/instance/jaeger.rs index 7d06236c4a..4658040d50 100644 --- a/src/frontend/src/instance/jaeger.rs +++ b/src/frontend/src/instance/jaeger.rs @@ -128,6 +128,7 @@ impl JaegerQueryHandler for Instance { trace_id: &str, start_time: Option, end_time: Option, + limit: Option, ) -> ServerResult { // It's equivalent to the following SQL query: // @@ -155,6 +156,13 @@ impl JaegerQueryHandler for Instance { filters.push(col(TIMESTAMP_COLUMN).lt_eq(lit_timestamp_nano(end_time))); } + let limit = if start_time.is_some() && end_time.is_some() { + // allow unlimited limit if time range is specified + limit + } else { + limit.or(Some(DEFAULT_LIMIT)) + }; + Ok(query_trace_table( ctx, self.catalog_manager(), @@ -162,7 +170,7 @@ impl JaegerQueryHandler for Instance { selects, filters, vec![col(TIMESTAMP_COLUMN).sort(false, false)], // Sort by timestamp in descending order. - Some(DEFAULT_LIMIT), + limit, None, vec![], ) diff --git a/src/servers/src/http/jaeger.rs b/src/servers/src/http/jaeger.rs index 39bea1ac92..b941fa839a 100644 --- a/src/servers/src/http/jaeger.rs +++ b/src/servers/src/http/jaeger.rs @@ -427,7 +427,13 @@ pub async fn handle_get_trace( let end_time_ns = query_params.end.map(|end_us| end_us * 1000); let output = match handler - .get_trace(query_ctx, &trace_id, start_time_ns, end_time_ns) + .get_trace( + query_ctx, + &trace_id, + start_time_ns, + end_time_ns, + query_params.limit, + ) .await { Ok(output) => output, diff --git a/src/servers/src/query_handler.rs b/src/servers/src/query_handler.rs index d41f68555b..60efe69faa 100644 --- a/src/servers/src/query_handler.rs +++ b/src/servers/src/query_handler.rs @@ -210,6 +210,7 @@ pub trait JaegerQueryHandler { trace_id: &str, start_time: Option, end_time: Option, + limit: Option, ) -> Result; /// Find traces by query params. It's used for `/api/traces` API.