This is an automated email from the ASF dual-hosted git repository. wusheng pushed a commit to branch segment-order in repository https://gitbox.apache.org/repos/asf/skywalking.git
View the commit online: https://github.com/apache/skywalking/commit/0c69cfb5bba7ff3d05203e51f5372751b5192260 commit 0c69cfb5bba7ff3d05203e51f5372751b5192260 Author: Wu Sheng <[email protected]> AuthorDate: Wed Nov 20 20:47:33 2019 +0800 Sort the segment fragments --- .../oap/server/core/query/TraceQueryService.java | 36 +++++++++++++++++----- 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/TraceQueryService.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/TraceQueryService.java index b32859c..2291ea3 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/TraceQueryService.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/TraceQueryService.java @@ -19,22 +19,38 @@ package org.apache.skywalking.oap.server.core.query; import java.io.IOException; -import java.util.*; -import org.apache.skywalking.apm.network.language.agent.*; -import org.apache.skywalking.apm.network.language.agent.v2.*; -import org.apache.skywalking.oap.server.core.*; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.LinkedList; +import java.util.List; +import org.apache.skywalking.apm.network.language.agent.SpanObject; +import org.apache.skywalking.apm.network.language.agent.TraceSegmentObject; +import org.apache.skywalking.apm.network.language.agent.UniqueId; +import org.apache.skywalking.apm.network.language.agent.v2.SegmentObject; +import org.apache.skywalking.apm.network.language.agent.v2.SpanObjectV2; +import org.apache.skywalking.oap.server.core.Const; +import org.apache.skywalking.oap.server.core.CoreModule; import org.apache.skywalking.oap.server.core.analysis.manual.segment.SegmentRecord; -import org.apache.skywalking.oap.server.core.cache.*; +import org.apache.skywalking.oap.server.core.cache.EndpointInventoryCache; +import org.apache.skywalking.oap.server.core.cache.NetworkAddressInventoryCache; +import org.apache.skywalking.oap.server.core.cache.ServiceInventoryCache; import org.apache.skywalking.oap.server.core.config.IComponentLibraryCatalogService; +import org.apache.skywalking.oap.server.core.query.entity.KeyValue; +import org.apache.skywalking.oap.server.core.query.entity.LogEntity; +import org.apache.skywalking.oap.server.core.query.entity.Pagination; +import org.apache.skywalking.oap.server.core.query.entity.QueryOrder; +import org.apache.skywalking.oap.server.core.query.entity.Ref; import org.apache.skywalking.oap.server.core.query.entity.RefType; +import org.apache.skywalking.oap.server.core.query.entity.Span; import org.apache.skywalking.oap.server.core.query.entity.Trace; -import org.apache.skywalking.oap.server.core.query.entity.*; +import org.apache.skywalking.oap.server.core.query.entity.TraceBrief; +import org.apache.skywalking.oap.server.core.query.entity.TraceState; import org.apache.skywalking.oap.server.core.register.EndpointInventory; import org.apache.skywalking.oap.server.core.register.ServiceInventory; import org.apache.skywalking.oap.server.core.storage.StorageModule; import org.apache.skywalking.oap.server.core.storage.query.ITraceQueryDAO; +import org.apache.skywalking.oap.server.library.module.ModuleManager; import org.apache.skywalking.oap.server.library.module.Service; -import org.apache.skywalking.oap.server.library.module.*; import org.apache.skywalking.oap.server.library.util.CollectionUtils; import static java.util.Objects.nonNull; @@ -374,6 +390,12 @@ public class TraceQueryService implements Service { rootSpans.add(span); } }); + /** + * In some cases, there are segment fragments, which could not be linked by Ref, + * because of sampling, agent fail safe, segment lost, even bug. + * Sorting the segments makes the trace view more readable. + */ + rootSpans.sort(Comparator.comparing(span -> new Long(span.getStartTime()))); return rootSpans; }
