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 133cbc6d20 Fail fast if SampleFamily is empty after MAL filter 
expression (#13608)
133cbc6d20 is described below

commit 133cbc6d20fea9fe49023fd5e02fdb0dc38efcf3
Author: weixiang1862 <[email protected]>
AuthorDate: Mon Dec 15 13:41:12 2025 +0800

    Fail fast if SampleFamily is empty after MAL filter expression (#13608)
---
 docs/en/changes/changes.md                               |  1 +
 .../apache/skywalking/oap/meter/analyzer/Analyzer.java   |  6 ++++++
 .../oap/meter/analyzer/dsl/FilterExpression.java         | 16 ++++++++++------
 3 files changed, 17 insertions(+), 6 deletions(-)

diff --git a/docs/en/changes/changes.md b/docs/en/changes/changes.md
index edcc5fa985..c81121fd8d 100644
--- a/docs/en/changes/changes.md
+++ b/docs/en/changes/changes.md
@@ -9,6 +9,7 @@
 * Enhance the alarm kernel with recovered status notification capability
 * Fix BrowserWebVitalsPerfData `clsTime` to `cls` and make it double type.
 * Init `log-mal-rules` at module provider start stage to avoid re-init for 
every LAL.
+* Fail fast if SampleFamily is empty after MAL filter expression.
 
 #### UI
 * Fix the missing icon in new native trace view.
diff --git 
a/oap-server/analyzer/meter-analyzer/src/main/java/org/apache/skywalking/oap/meter/analyzer/Analyzer.java
 
b/oap-server/analyzer/meter-analyzer/src/main/java/org/apache/skywalking/oap/meter/analyzer/Analyzer.java
index f278ee2695..a8b6a66625 100644
--- 
a/oap-server/analyzer/meter-analyzer/src/main/java/org/apache/skywalking/oap/meter/analyzer/Analyzer.java
+++ 
b/oap-server/analyzer/meter-analyzer/src/main/java/org/apache/skywalking/oap/meter/analyzer/Analyzer.java
@@ -129,6 +129,12 @@ public class Analyzer {
         }
         if (filterExpression != null) {
             input = filterExpression.filter(input);
+            if (input.isEmpty()) {
+                if (log.isDebugEnabled()) {
+                    log.debug("{} is ignored due to mismatch of filter {}", 
expression, filterExpression);
+                }
+                return;
+            }
         }
         Result r = expression.run(input);
         if (!r.isSuccess()) {
diff --git 
a/oap-server/analyzer/meter-analyzer/src/main/java/org/apache/skywalking/oap/meter/analyzer/dsl/FilterExpression.java
 
b/oap-server/analyzer/meter-analyzer/src/main/java/org/apache/skywalking/oap/meter/analyzer/dsl/FilterExpression.java
index 69ffe9b66c..9b532bf723 100644
--- 
a/oap-server/analyzer/meter-analyzer/src/main/java/org/apache/skywalking/oap/meter/analyzer/dsl/FilterExpression.java
+++ 
b/oap-server/analyzer/meter-analyzer/src/main/java/org/apache/skywalking/oap/meter/analyzer/dsl/FilterExpression.java
@@ -20,12 +20,12 @@ package org.apache.skywalking.oap.meter.analyzer.dsl;
 
 import groovy.lang.Closure;
 import groovy.lang.GroovyShell;
+import java.util.HashMap;
 import java.util.Map;
+import java.util.Objects;
 import lombok.ToString;
 import lombok.extern.slf4j.Slf4j;
 
-import static java.util.stream.Collectors.toMap;
-
 @Slf4j
 @ToString(of = {"literal"})
 public class FilterExpression {
@@ -42,10 +42,14 @@ public class FilterExpression {
 
     public Map<String, SampleFamily> filter(final Map<String, SampleFamily> 
sampleFamilies) {
         try {
-            return sampleFamilies.entrySet().stream().collect(toMap(
-                Map.Entry::getKey,
-                it -> it.getValue().filter(filterClosure)
-            ));
+            Map<String, SampleFamily> result = new HashMap<>();
+            for (Map.Entry<String, SampleFamily> entry : 
sampleFamilies.entrySet()) {
+                SampleFamily afterFilter = 
entry.getValue().filter(filterClosure);
+                if (!Objects.equals(afterFilter, SampleFamily.EMPTY)) {
+                    result.put(entry.getKey(), afterFilter);
+                }
+            }
+            return result;
         } catch (Throwable t) {
             log.error("failed to run \"{}\"", literal, t);
         }

Reply via email to