From 50c9600ef8f4e2c24af9b7d0bd9f8cc0f6eb6aa2 Mon Sep 17 00:00:00 2001 From: shuiyisong <113876041+shuiyisong@users.noreply.github.com> Date: Wed, 5 Nov 2025 17:19:23 +0800 Subject: [PATCH] fix: stabilize test results (#7182) * fix: stablize test results Signed-off-by: shuiyisong * fix: test Signed-off-by: shuiyisong --------- Signed-off-by: shuiyisong --- src/frontend/src/instance/jaeger.rs | 2 +- src/servers/src/http/jaeger.rs | 5 +- tests-integration/tests/http.rs | 148 +++++++++++++++------------- 3 files changed, 84 insertions(+), 71 deletions(-) diff --git a/src/frontend/src/instance/jaeger.rs b/src/frontend/src/instance/jaeger.rs index 2e135cfd87..7d06236c4a 100644 --- a/src/frontend/src/instance/jaeger.rs +++ b/src/frontend/src/instance/jaeger.rs @@ -265,7 +265,7 @@ impl JaegerQueryHandler for Instance { self.query_engine(), vec![wildcard()], filters, - vec![], + vec![col(TIMESTAMP_COLUMN).sort(false, false)], // Sort by timestamp in descending order. None, None, vec![], diff --git a/src/servers/src/http/jaeger.rs b/src/servers/src/http/jaeger.rs index 8d15db2a5b..39bea1ac92 100644 --- a/src/servers/src/http/jaeger.rs +++ b/src/servers/src/http/jaeger.rs @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -use std::collections::HashMap; +use std::collections::{BTreeMap, HashMap}; use std::fmt; use std::str::FromStr; use std::sync::Arc; @@ -703,7 +703,8 @@ fn traces_from_records(records: HttpRecordsOutput) -> Result> { // maintain the mapping: trace_id -> (process_id -> service_name). let mut trace_id_to_processes: HashMap> = HashMap::new(); // maintain the mapping: trace_id -> spans. - let mut trace_id_to_spans: HashMap> = HashMap::new(); + // use BTreeMap to retain order + let mut trace_id_to_spans: BTreeMap> = BTreeMap::new(); // maintain the mapping: service.name -> resource.attributes. let mut service_to_resource_attributes: HashMap> = HashMap::new(); diff --git a/tests-integration/tests/http.rs b/tests-integration/tests/http.rs index 93dea19337..62275b79f4 100644 --- a/tests-integration/tests/http.rs +++ b/tests-integration/tests/http.rs @@ -5728,65 +5728,22 @@ pub async fn test_jaeger_query_api(store_type: StorageType) { assert_eq!(StatusCode::OK, res.status()); let expected = r#" { - "data": [ + "data": + [ { "traceID": "5611dce1bc9ebed65352d99a027b08ea", - "spans": [ - { - "traceID": "5611dce1bc9ebed65352d99a027b08ea", - "spanID": "008421dbbd33a3e9", - "operationName": "access-mysql", - "references": [], - "startTime": 1738726754492421, - "duration": 100000, - "tags": [ - { - "key": "net.peer.ip", - "type": "string", - "value": "1.2.3.4" - }, - { - "key": "operation.type", - "type": "string", - "value": "access-mysql" - }, - { - "key": "otel.scope.name", - "type": "string", - "value": "test-jaeger-query-api" - }, - { - "key": "otel.scope.version", - "type": "string", - "value": "1.0.0" - }, - { - "key": "otel.status_description", - "type": "string", - "value": "success" - }, - { - "key": "peer.service", - "type": "string", - "value": "test-jaeger-query-api" - }, - { - "key": "span.kind", - "type": "string", - "value": "server" - } - ], - "logs": [], - "processID": "p1" - }, + "spans": + [ { "traceID": "5611dce1bc9ebed65352d99a027b08ea", "spanID": "ffa03416a7b9ea48", "operationName": "access-redis", - "references": [], + "references": + [], "startTime": 1738726754492422, "duration": 100000, - "tags": [ + "tags": + [ { "key": "net.peer.ip", "type": "string", @@ -5823,14 +5780,68 @@ pub async fn test_jaeger_query_api(store_type: StorageType) { "value": "server" } ], - "logs": [], + "logs": + [], + "processID": "p1" + }, + { + "traceID": "5611dce1bc9ebed65352d99a027b08ea", + "spanID": "008421dbbd33a3e9", + "operationName": "access-mysql", + "references": + [], + "startTime": 1738726754492421, + "duration": 100000, + "tags": + [ + { + "key": "net.peer.ip", + "type": "string", + "value": "1.2.3.4" + }, + { + "key": "operation.type", + "type": "string", + "value": "access-mysql" + }, + { + "key": "otel.scope.name", + "type": "string", + "value": "test-jaeger-query-api" + }, + { + "key": "otel.scope.version", + "type": "string", + "value": "1.0.0" + }, + { + "key": "otel.status_description", + "type": "string", + "value": "success" + }, + { + "key": "peer.service", + "type": "string", + "value": "test-jaeger-query-api" + }, + { + "key": "span.kind", + "type": "string", + "value": "server" + } + ], + "logs": + [], "processID": "p1" } ], - "processes": { - "p1": { + "processes": + { + "p1": + { "serviceName": "test-jaeger-query-api", - "tags": [] + "tags": + [] } } } @@ -5838,7 +5849,8 @@ pub async fn test_jaeger_query_api(store_type: StorageType) { "total": 0, "limit": 0, "offset": 0, - "errors": [] + "errors": + [] } "#; @@ -6007,8 +6019,8 @@ pub async fn test_jaeger_query_api_for_trace_v1(store_type: StorageType) { "spanId": "ffa03416a7b9ea49", "name": "access-pg", "kind": 2, - "startTimeUnixNano": "1738726754492422000", - "endTimeUnixNano": "1738726754592422000", + "startTimeUnixNano": "1738726754492423000", + "endTimeUnixNano": "1738726754592423000", "attributes": [ { "key": "operation.type", @@ -6418,10 +6430,10 @@ pub async fn test_jaeger_query_api_for_trace_v1(store_type: StorageType) { "spans": [ { "traceID": "5611dce1bc9ebed65352d99a027b08ea", - "spanID": "008421dbbd33a3e9", - "operationName": "access-mysql", + "spanID": "ffa03416a7b9ea48", + "operationName": "access-redis", "references": [], - "startTime": 1738726754492421, + "startTime": 1738726754492422, "duration": 100000, "tags": [ { @@ -6432,7 +6444,7 @@ pub async fn test_jaeger_query_api_for_trace_v1(store_type: StorageType) { { "key": "operation.type", "type": "string", - "value": "access-mysql" + "value": "access-redis" }, { "key": "otel.scope.name", @@ -6465,10 +6477,10 @@ pub async fn test_jaeger_query_api_for_trace_v1(store_type: StorageType) { }, { "traceID": "5611dce1bc9ebed65352d99a027b08ea", - "spanID": "ffa03416a7b9ea48", - "operationName": "access-redis", + "spanID": "008421dbbd33a3e9", + "operationName": "access-mysql", "references": [], - "startTime": 1738726754492422, + "startTime": 1738726754492421, "duration": 100000, "tags": [ { @@ -6479,7 +6491,7 @@ pub async fn test_jaeger_query_api_for_trace_v1(store_type: StorageType) { { "key": "operation.type", "type": "string", - "value": "access-redis" + "value": "access-mysql" }, { "key": "otel.scope.name", @@ -6540,7 +6552,7 @@ pub async fn test_jaeger_query_api_for_trace_v1(store_type: StorageType) { assert_eq!(StatusCode::OK, res.status()); let expected = r#" -{"data":[{"processes":{"p1":{"serviceName":"test-jaeger-query-api","tags":[]}},"spans":[{"duration":100000,"logs":[],"operationName":"access-pg","processID":"p1","references":[],"spanID":"ffa03416a7b9ea49","startTime":1738726754492422,"tags":[{"key":"operation.type","type":"string","value":"access-pg"},{"key":"otel.scope.name","type":"string","value":"test-jaeger-find-traces"},{"key":"otel.scope.version","type":"string","value":"1.0.0"},{"key":"otel.status_description","type":"string","value":"success"},{"key":"span.kind","type":"string","value":"server"}],"traceID":"5611dce1bc9ebed65352d99a027b08fa"}],"traceID":"5611dce1bc9ebed65352d99a027b08fa"},{"processes":{"p1":{"serviceName":"test-jaeger-query-api","tags":[]}},"spans":[{"duration":100000,"logs":[],"operationName":"access-redis","processID":"p1","references":[],"spanID":"ffa03416a7b9ea48","startTime":1738726754492422,"tags":[{"key":"net.peer.ip","type":"string","value":"1.2.3.4"},{"key":"operation.type","type":"string","value":"access-redis"},{"key":"otel.scope.name","type":"string","value":"test-jaeger-query-api"},{"key":"otel.scope.version","type":"string","value":"1.0.0"},{"key":"otel.status_description","type":"string","value":"success"},{"key":"peer.service","type":"string","value":"test-jaeger-query-api"},{"key":"span.kind","type":"string","value":"server"}],"traceID":"5611dce1bc9ebed65352d99a027b08ea"}],"traceID":"5611dce1bc9ebed65352d99a027b08ea"}],"errors":[],"limit":0,"offset":0,"total":0} +{"data":[{"processes":{"p1":{"serviceName":"test-jaeger-query-api","tags":[]}},"spans":[{"duration":100000,"logs":[],"operationName":"access-redis","processID":"p1","references":[],"spanID":"ffa03416a7b9ea48","startTime":1738726754492422,"tags":[{"key":"net.peer.ip","type":"string","value":"1.2.3.4"},{"key":"operation.type","type":"string","value":"access-redis"},{"key":"otel.scope.name","type":"string","value":"test-jaeger-query-api"},{"key":"otel.scope.version","type":"string","value":"1.0.0"},{"key":"otel.status_description","type":"string","value":"success"},{"key":"peer.service","type":"string","value":"test-jaeger-query-api"},{"key":"span.kind","type":"string","value":"server"}],"traceID":"5611dce1bc9ebed65352d99a027b08ea"}],"traceID":"5611dce1bc9ebed65352d99a027b08ea"},{"processes":{"p1":{"serviceName":"test-jaeger-query-api","tags":[]}},"spans":[{"duration":100000,"logs":[],"operationName":"access-pg","processID":"p1","references":[],"spanID":"ffa03416a7b9ea49","startTime":1738726754492423,"tags":[{"key":"operation.type","type":"string","value":"access-pg"},{"key":"otel.scope.name","type":"string","value":"test-jaeger-find-traces"},{"key":"otel.scope.version","type":"string","value":"1.0.0"},{"key":"otel.status_description","type":"string","value":"success"},{"key":"span.kind","type":"string","value":"server"}],"traceID":"5611dce1bc9ebed65352d99a027b08fa"}],"traceID":"5611dce1bc9ebed65352d99a027b08fa"}],"errors":[],"limit":0,"offset":0,"total":0} "#; let resp: Value = serde_json::from_str(&res.text().await).unwrap(); @@ -6556,7 +6568,7 @@ pub async fn test_jaeger_query_api_for_trace_v1(store_type: StorageType) { assert_eq!(StatusCode::OK, res.status()); let expected = r#" -{"data":[{"processes":{"p1":{"serviceName":"test-jaeger-query-api","tags":[]}},"spans":[{"duration":100000,"logs":[],"operationName":"access-pg","processID":"p1","references":[],"spanID":"ffa03416a7b9ea49","startTime":1738726754492422,"tags":[{"key":"operation.type","type":"string","value":"access-pg"},{"key":"otel.scope.name","type":"string","value":"test-jaeger-find-traces"},{"key":"otel.scope.version","type":"string","value":"1.0.0"},{"key":"otel.status_description","type":"string","value":"success"},{"key":"span.kind","type":"string","value":"server"}],"traceID":"5611dce1bc9ebed65352d99a027b08fa"}],"traceID":"5611dce1bc9ebed65352d99a027b08fa"}],"errors":[],"limit":0,"offset":0,"total":0} +{"data":[{"processes":{"p1":{"serviceName":"test-jaeger-query-api","tags":[]}},"spans":[{"duration":100000,"logs":[],"operationName":"access-pg","processID":"p1","references":[],"spanID":"ffa03416a7b9ea49","startTime":1738726754492423,"tags":[{"key":"operation.type","type":"string","value":"access-pg"},{"key":"otel.scope.name","type":"string","value":"test-jaeger-find-traces"},{"key":"otel.scope.version","type":"string","value":"1.0.0"},{"key":"otel.status_description","type":"string","value":"success"},{"key":"span.kind","type":"string","value":"server"}],"traceID":"5611dce1bc9ebed65352d99a027b08fa"}],"traceID":"5611dce1bc9ebed65352d99a027b08fa"}],"errors":[],"limit":0,"offset":0,"total":0} "#; let resp: Value = serde_json::from_str(&res.text().await).unwrap();