{"record":{"id":"43f1e7aaeba07b16","repo":"apache/skywalking","slug":"series-labeled-with-no-labeled-no-labeled-result","errorCode":null,"errorMessage":"Series Labeled with No Labeled, no labeled result is empty.","messagePattern":"Series Labeled with No Labeled, no labeled result is empty\\.","errorType":"exception","errorClass":"IllegalExpressionException","httpStatus":null,"severity":"error","filePath":"oap-server/mqe-rt/src/main/java/org/apache/skywalking/mqe/rt/operation/LROp.java","lineNumber":238,"sourceCode":"            MQEValue valueL = mqeValuesL.getValues().get(i);\n            MQEValue valueR = mqeValuesR.getValues().get(i);\n            if (valueL.isEmptyValue() || valueR.isEmptyValue()) {\n                valueL.setEmptyValue(true);\n                continue;\n            }\n            //time should be mapped\n            double newValue = calculate.apply(valueL.getDoubleValue(), valueR.getDoubleValue(), opType);\n            mqeValuesL.getValues().get(i).setDoubleValue(newValue);\n        }\n\n        return seriesLeft;\n    }\n\n    private static ExpressionResult seriesLabeledWithNoLabeled(ExpressionResult seriesLeft,\n                                                               ExpressionResult seriesRight,\n                                                               int opType, LROp calculate) throws IllegalExpressionException {\n        if (seriesRight.getResults().isEmpty()) {\n            throw new IllegalExpressionException(\"Series Labeled with No Labeled, no labeled result is empty.\");\n        }\n        MQEValues mqeValuesR = seriesRight.getResults().get(0);\n        for (MQEValues mqeValuesL : seriesLeft.getResults()) {\n            if (mqeValuesL.getValues().size() != mqeValuesR.getValues().size()) {\n                throw new IllegalExpressionException(\"Series Labeled with No Labeled, left and right series value size not equal.\");\n            }\n            for (int i = 0; i < mqeValuesL.getValues().size(); i++) {\n                //reserve left metric info\n                MQEValue valueL = mqeValuesL.getValues().get(i);\n                MQEValue valueR = mqeValuesR.getValues().get(i);\n                if (valueL.isEmptyValue() || valueR.isEmptyValue()) {\n                    valueL.setEmptyValue(true);\n                    continue;\n                }\n                double newValue = calculate.apply(valueL.getDoubleValue(), valueR.getDoubleValue(), opType);\n                mqeValuesL.getValues().get(i).setDoubleValue(newValue);\n            }\n        }","sourceCodeStart":220,"sourceCodeEnd":256,"githubUrl":"https://github.com/apache/skywalking/blob/102af09b4a56064e22050dded10e2c52e490d040/oap-server/mqe-rt/src/main/java/org/apache/skywalking/mqe/rt/operation/LROp.java#L220-L256","documentation":"Thrown by LROp.seriesLabeledWithNoLabeled when a labeled TIME_SERIES_VALUES is combined with a non-labeled series: the right (non-labeled) side's results list must not be empty, because its single series is used as the operand for every labeled group on the left.","triggerScenarios":"MQE expression 'relabels(seriesLabeled, ...) + seriesPlain' (or two series metrics, one carrying labels) where the non-labeled right operand returns zero results.","commonSituations":"The unlabeled base metric has no data in the time range while the labeled one does (or vice versa); relabels applied to one side making the label status asymmetric; metric ingestion stopped for one metric after an agent/OAP upgrade.","solutions":["Run the non-labeled operand alone and confirm it returns data","Ensure both metrics cover the same time range and step","Remove the relabels if both metrics actually share identical labels — the labeled-with-labeled path tolerates partial label overlap better","Use viewAsSeq to fall through to whichever series has data when gaps are expected"],"exampleFix":"// before\nquery: relabels(a, tag:(k,v)) + b   // b empty in range\n// after: query a window where b has data, or\nquery: relabels(a, tag:(k,v)) + sum_per_minute(b)","handlingStrategy":"validation","validationCode":"boolean ok = !seriesRight.getResults().isEmpty(); // the non-labeled side","typeGuard":null,"tryCatchPattern":"catch (IllegalExpressionException e) { surfaceQueryError(e); }","preventionTips":["Check the unlabeled operand returns data before mixing labeled and unlabeled series","Keep step/duration aligned across both metrics"],"tags":["mqe","query-engine","labels","time-series"],"backgroundTag":null,"analyzedSha":"102af09b4a56064e22050dded10e2c52e490d040","analyzedAt":"2026-08-14T10:47:52.647Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}