Support ordered segment list in trace query (#3906)
* Sort the segment fragments * Add comment. * Remove unnecessary box codes.
This commit is contained in:
parent
3d2325a4a1
commit
0724cdb42d
|
|
@ -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,14 @@ public class TraceQueryService implements Service {
|
|||
rootSpans.add(span);
|
||||
}
|
||||
});
|
||||
/**
|
||||
* In some cases, there are segment fragments, which could not be linked by Ref,
|
||||
* because of two kinds of reasons.
|
||||
* 1. Multiple leaf segments have no particular order in the storage.
|
||||
* 2. Lost in sampling, agent fail safe, segment lost, even bug.
|
||||
* Sorting the segments makes the trace view more readable.
|
||||
*/
|
||||
rootSpans.sort(Comparator.comparing(span -> span.getStartTime()));
|
||||
return rootSpans;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue