{"record":{"id":"666888c6ae9cf3a4","repo":"apache/skywalking","slug":"cannot-parse-interpolation-expression-expr","errorCode":null,"errorMessage":"Cannot parse interpolation expression: {expr}","messagePattern":"Cannot parse interpolation expression: (.+?)","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"oap-server/analyzer/log-analyzer/src/main/java/org/apache/skywalking/oap/log/analyzer/v2/compiler/LALScriptParser.java","lineNumber":1062,"sourceCode":"    /**\n     * Parses a standalone valueAccess expression string by wrapping it in\n     * a minimal LAL script and extracting the parsed ValueAccess.\n     */\n    private static ValueAccess parseValueAccessExpr(final String expr) {\n        // Wrap in: filter { if (EXPR) { sink {} } }\n        // The expression becomes a condition, parsed as ExprCondition\n        // whose ValueAccess is what we want.\n        final String wrapper = \"filter { if (\" + expr + \") { sink {} } }\";\n        final LALScriptModel model = parse(wrapper);\n        final IfBlock ifBlock = (IfBlock) model.getStatements().get(0);\n        final LALScriptModel.Condition cond = ifBlock.getCondition();\n        if (cond instanceof ExprCondition) {\n            return ((ExprCondition) cond).getExpr();\n        }\n        if (cond instanceof ComparisonCondition) {\n            return ((ComparisonCondition) cond).getLeft();\n        }\n        throw new IllegalArgumentException(\n            \"Cannot parse interpolation expression: \" + expr);\n    }\n}\n","sourceCodeStart":1044,"sourceCodeEnd":1066,"githubUrl":"https://github.com/apache/skywalking/blob/102af09b4a56064e22050dded10e2c52e490d040/oap-server/analyzer/log-analyzer/src/main/java/org/apache/skywalking/oap/log/analyzer/v2/compiler/LALScriptParser.java#L1044-L1066","documentation":"The internal counterpart of the previous two: MeterSystem.createInternal cannot find functionName in the function register. All public create overloads delegate here after resolving the data type, so the same root cause (unknown @MeterFunction name) surfaces at this line depending on which overload was entered.","triggerScenarios":"Any meter creation path whose functionName lookup misses — MAL rule compilation, custom code calling MeterSystem.create directly with a wrong name, or a custom function class that failed to load during the boot scan (broken jar suppressed the registration).","commonSituations":"Direct MeterSystem API use in custom receivers; a partially deployed custom-plugin jar where some classes failed to load; renaming a function without updating all rule files.","solutions":["Log/verify the exact functionName string against the registered names (inspect the @MeterFunction(functionName=...) values on the classpath)","Fix the rule or caller to use a registered name","Redeploy the custom function jar intact and confirm OAP boots without classload errors"],"exampleFix":"// before\nmeterSystem.create(\"my_metric\", \"avgerage\", ScopeType.SERVICE, pool, cl, opt);\n// after\nmeterSystem.create(\"my_metric\", \"avg\", ScopeType.SERVICE, pool, cl, opt);","handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":"catch (IllegalArgumentException e) { log.error(\"meter creation failed: {}\", e.getMessage()); /* reject the single rule, don't crash the receiver */ }","preventionTips":["Cross-check functionName against @MeterFunction annotations when writing custom integrations","Watch boot logs for classload errors that silently shrink the function register"],"tags":["skywalking","oap","meter","mal","lookup"],"backgroundTag":null,"analyzedSha":"102af09b4a56064e22050dded10e2c52e490d040","analyzedAt":"2026-08-14T10:47:52.647Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}