From adbdb2d36704ac999f625ad678ab28774d7ed2d4 Mon Sep 17 00:00:00 2001 From: Sherwood Wang Date: Sat, 20 Jan 2024 01:41:51 +0800 Subject: [PATCH] Avoid changing a correct order of span references (#5121) ## Which problem is this PR solving? - Resolves #5122 ## Description of the changes - Avoid changing order in the case described above. ## How was this change tested? - A test case is added. ## Checklist - [x] I have read https://github.com/jaegertracing/jaeger/blob/master/CONTRIBUTING_GUIDELINES.md - [X] I have signed all commits - [X] I have added unit tests for the new functionality - [X] I have run lint and test steps successfully - for `jaeger`: `make lint test` - for `jaeger-ui`: `yarn lint` and `yarn test` Signed-off-by: Sherwood Wang --- model/adjuster/parent_reference.go | 4 ++-- model/adjuster/parent_reference_test.go | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/model/adjuster/parent_reference.go b/model/adjuster/parent_reference.go index 578518db213..272e98e2909 100644 --- a/model/adjuster/parent_reference.go +++ b/model/adjuster/parent_reference.go @@ -26,7 +26,7 @@ func ParentReference() Adjuster { for _, span := range trace.Spans { firstChildOfRef := -1 firstOtherRef := -1 - for i := 1; i < len(span.References); i++ { + for i := 0; i < len(span.References); i++ { if span.References[i].TraceID == span.TraceID { if span.References[i].RefType == model.SpanRefType_CHILD_OF { firstChildOfRef = i @@ -40,7 +40,7 @@ func ParentReference() Adjuster { if swap == -1 { swap = firstOtherRef } - if swap != -1 { + if swap != 0 && swap != -1 { span.References[swap], span.References[0] = span.References[0], span.References[swap] } } diff --git a/model/adjuster/parent_reference_test.go b/model/adjuster/parent_reference_test.go index 8c26fe92a4a..bf53ed2765d 100644 --- a/model/adjuster/parent_reference_test.go +++ b/model/adjuster/parent_reference_test.go @@ -56,6 +56,11 @@ func TestParentReference(t *testing.T) { incoming: []model.SpanRef{childOf(b)}, expected: []model.SpanRef{childOf(b)}, }, + { + name: "local, local follows - keep order", + incoming: []model.SpanRef{childOf(a), followsFrom(a)}, + expected: []model.SpanRef{childOf(a), followsFrom(a)}, + }, { name: "local and remote child in order", incoming: []model.SpanRef{childOf(a), childOf(b)},