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);
}