This is an automated email from the ASF dual-hosted git repository.
wusheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/skywalking.git
The following commit(s) were added to refs/heads/master by this push:
new 50825c5f77 Fix missing memory filter when query profiling trace.
(#13534)
50825c5f77 is described below
commit 50825c5f77d097683fb83311422bbbe1d7e81ab9
Author: Wan Kai <[email protected]>
AuthorDate: Fri Oct 10 13:12:24 2025 +0800
Fix missing memory filter when query profiling trace. (#13534)
---
.../banyandb/trace/BanyanDBTraceQueryDAO.java | 25 +++++++++++++++++++---
1 file changed, 22 insertions(+), 3 deletions(-)
diff --git
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/trace/BanyanDBTraceQueryDAO.java
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/trace/BanyanDBTraceQueryDAO.java
index dcbfbc3ef2..a8699653ad 100644
---
a/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/trace/BanyanDBTraceQueryDAO.java
+++
b/oap-server/server-storage-plugin/storage-banyandb-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/banyandb/trace/BanyanDBTraceQueryDAO.java
@@ -79,6 +79,9 @@ public class BanyanDBTraceQueryDAO extends
AbstractBanyanDBDAO implements ITrace
@Override
public List<SegmentRecord> queryBySegmentIdList(List<String>
segmentIdList, @Nullable Duration duration) throws IOException {
+ if (CollectionUtils.isEmpty(segmentIdList)) {
+ return Collections.emptyList();
+ }
final boolean isColdStage = duration != null && duration.isColdStage();
TraceQueryResponse resp = queryTraceDebuggable(isColdStage,
SegmentRecord.INDEX_NAME, getTimestampRange(duration),
new QueryBuilder<TraceQuery>() {
@@ -89,11 +92,14 @@ public class BanyanDBTraceQueryDAO extends
AbstractBanyanDBDAO implements ITrace
query.setOrderBy(new
TraceQuery.OrderBy(SegmentRecord.START_TIME, AbstractQuery.Sort.DESC));
}
});
- return buildRecords(resp);
+ return buildRecords(resp, segmentIdList, null, true);
}
@Override
public List<SegmentRecord> queryByTraceIdWithInstanceId(List<String>
traceIdList, List<String> instanceIdList, @Nullable Duration duration) throws
IOException {
+ if (CollectionUtils.isEmpty(traceIdList) ||
CollectionUtils.isEmpty(instanceIdList)) {
+ return Collections.emptyList();
+ }
final boolean isColdStage = duration != null && duration.isColdStage();
TraceQueryResponse resp = queryTraceDebuggable(isColdStage,
SegmentRecord.INDEX_NAME, getTimestampRange(duration),
new QueryBuilder<TraceQuery>() {
@@ -105,7 +111,7 @@ public class BanyanDBTraceQueryDAO extends
AbstractBanyanDBDAO implements ITrace
}
});
- return buildRecords(resp);
+ return buildRecords(resp, null, instanceIdList, false);
}
@Override
@@ -226,7 +232,10 @@ public class BanyanDBTraceQueryDAO extends
AbstractBanyanDBDAO implements ITrace
/**
* Notice: this method not build the full SegmentRecord, only build the
fields needed by ProfiledTraceSegments and ProfiledSegment
*/
- private List<SegmentRecord> buildRecords(TraceQueryResponse resp) throws
IOException {
+ private List<SegmentRecord> buildRecords(TraceQueryResponse resp,
+ @Nullable List<String>
segmentIdList,
+ @Nullable List<String>
instanceIdList,
+ boolean filterBySegmentId) throws
IOException {
List<SegmentRecord> segmentRecords = new ArrayList<>();
for (var t : resp.getTraces()) {
for (var wrapper : t.getSpansList()) {
@@ -234,6 +243,11 @@ public class BanyanDBTraceQueryDAO extends
AbstractBanyanDBDAO implements ITrace
if (spanWrapper.getSource().equals(Source.SKYWALKING)) {
SegmentObject segmentObject =
SegmentObject.parseFrom(spanWrapper.getSpan());
SegmentRecord segmentRecord = new SegmentRecord();
+ if (filterBySegmentId) {
+ if (segmentIdList == null ||
!segmentIdList.contains(segmentObject.getTraceSegmentId())) {
+ continue;
+ }
+ }
segmentRecord.setSegmentId(segmentObject.getTraceSegmentId());
segmentRecord.setTraceId(segmentObject.getTraceId());
String serviceName = Const.EMPTY_STRING;
@@ -244,6 +258,11 @@ public class BanyanDBTraceQueryDAO extends
AbstractBanyanDBDAO implements ITrace
String serviceId =
IDManager.ServiceID.buildId(serviceName, true);
segmentRecord.setServiceId(serviceId);
String serviceInstanceId =
IDManager.ServiceInstanceID.buildId(serviceId, instanceName);
+ if (!filterBySegmentId) {
+ if (instanceIdList == null ||
!instanceIdList.contains(serviceInstanceId)) {
+ continue;
+ }
+ }
segmentRecord.setServiceInstanceId(serviceInstanceId);
long startTimestamp = 0;
long endTimestamp = 0;