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;

Reply via email to