FrankChen021 / bithon

An observability platform mainly for Java
Apache License 2.0
14 stars 4 forks source link

NPE when adding customzed tag.xxx filter to search trace logs #770

Closed FrankChen021 closed 1 month ago

FrankChen021 commented 2 months ago
java.lang.NullPointerException:Cannot invoke "org.bithon.component.commons.expression.IDataType.equals(Object)" because "leftType" is null
    at org.bithon.component.commons.expression.ArithmeticExpression.getDataType(ArithmeticExpression.java:37)
    at org.bithon.component.commons.expression.validation.ExpressionTypeValidator.visit(ExpressionTypeValidator.java:66)
    at org.bithon.component.commons.expression.ConditionalExpression.accept(ConditionalExpression.java:42)
    at org.bithon.component.commons.expression.LogicalExpression.accept(LogicalExpression.java:88)
    at org.bithon.component.commons.expression.validation.ExpressionValidator.validate(ExpressionValidator.java:29)
    at org.bithon.server.storage.common.expression.ExpressionASTBuilder.build(ExpressionASTBuilder.java:124)
    at org.bithon.server.web.service.datasource.api.FilterExpressionToFilters.toExpression(FilterExpressionToFilters.java:76)
    at org.bithon.server.web.service.tracing.service.TraceService.getTraceListSize(TraceService.java:144)
FrankChen021 commented 2 months ago

we may also need more predicates to:

  1. match if a give tag eixsts. use EXISTS?
  2. match wildcard, simplied LIKE. use CONTAINS?
  3. match a token. use HAS?
FrankChen021 commented 1 month ago

the expression: tags.user-agent = 'a' it's parsed as:

ComparisonExpression(=):
  ArithmeticExpression(tags.user - agent)
  LiteralExpression('a')

Solutions:

  1. allow quoated identifier
  2. user Map accessor for search on tag