{"record":{"id":"cd75a18544e8464c","repo":"alibaba/spring-ai-alibaba","slug":"0","errorCode":null,"errorMessage":"数据集版本数据量为0或不存在: {}","messagePattern":"数据集版本数据量为0或不存在: (.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"spring-ai-alibaba-admin/spring-ai-alibaba-admin-server-start/src/main/java/com/alibaba/cloud/ai/studio/admin/service/impl/ExperimentServiceImpl.java","lineNumber":179,"sourceCode":"        experiment.setEvaluatorConfig(JSON.toJSONString(evaluatorConfigList));\n        return experiment;\n    }\n\n    @Override\n    public List<ExperimentEvaluatorResult> getResults(Long experimentId) {\n        log.info(\"查询实验结果: {}\", experimentId);\n        \n        // 先检查实验是否存在\n        ExperimentDO experiment = experimentMapper.selectById(experimentId);\n        if (experiment == null) {\n            log.warn(\"实验不存在: {}\", experimentId);\n            return null;\n        }\n\n        Integer dataCount = datasetVersionMapper.selectById(experiment.getDatasetVersionId()).getDataCount();\n        // 检查dataCount是否为null或0，避免除零异常\n        if (dataCount == null || dataCount == 0) {\n            log.warn(\"数据集版本数据量为0或不存在: {}\", experiment.getDatasetVersionId());\n            dataCount = 1; // 避免除零异常，设置默认值\n        }\n\n\n        // 正确解析 evaluatorConfig JSON 数组字符串为 List<EvaluatorConfig>\n        List<EvaluatorConfig> evaluatorConfigList = JSON.parseArray(experiment.getEvaluatorConfig(), EvaluatorConfig.class);\n\n        // 提取 evaluatorVersionId 列表\n        List<Long> evaluatorList = evaluatorConfigList.stream()\n                .map(e -> Long.valueOf(e.getEvaluatorVersionId()))\n                .toList();\n\n        // 使用stream map collect方式构建结果列表\n        Integer finalDataCount = dataCount;\n        return evaluatorList.stream().map(evaluatorVersionId -> {\n            List<ExperimentResultDO> resultList = experimentResultMapper.selectByExperimentAndEvaluator(experimentId, evaluatorVersionId);\n            //计算score的平均值，避免除零异常\n            BigDecimal averageScore = BigDecimal.ZERO;","sourceCodeStart":161,"sourceCodeEnd":197,"githubUrl":"https://github.com/alibaba/spring-ai-alibaba/blob/f82da0b50f35744c13968191be2b1cd2452ef550/spring-ai-alibaba-admin/spring-ai-alibaba-admin-server-start/src/main/java/com/alibaba/cloud/ai/studio/admin/service/impl/ExperimentServiceImpl.java#L161-L197","documentation":"In ExperimentServiceImpl.getResults, after loading the experiment, the code reads the dataset version's dataCount. If the dataset version row is missing or dataCount is null/0, it logs this warning and sets dataCount = 1 to avoid a divide-by-zero when computing average scores. Results are still returned but any per-item averages are skewed by this artificial divisor.","triggerScenarios":"Calling getResults for an experiment whose datasetVersionId points to a deleted/missing dataset_version row, or a version that was saved with 0 items (dataCount null or 0).","commonSituations":"Dataset version deleted while experiments referencing it remain; dataset uploaded empty; import produced zero rows; dataCount column never populated by an older schema/version.","solutions":["Check the dataset_version row for experiment.datasetVersionId — restore it or fix the reference.","Ensure dataset versions have at least one item before running experiments; validate datasetCount on creation.","Backfill dataCount for legacy rows created before the column existed.","Treat reported averages with dataCount defaulted to 1 as unreliable and re-run the experiment with a populated dataset."],"exampleFix":"// before\nInteger dataCount = datasetVersionMapper.selectById(id).getDataCount(); // NPE if version missing\n\n// after\nDatasetVersionDO version = datasetVersionMapper.selectById(id);\nif (version == null || version.getDataCount() == null || version.getDataCount() == 0) {\n    log.warn(\"Dataset version missing or empty: {}\", id);\n    throw new ResponseStatusException(HttpStatus.CONFLICT, \"Dataset version has no data: \" + id);\n}\nInteger dataCount = version.getDataCount();","handlingStrategy":"validation","validationCode":"DatasetVersionDO version = datasetVersionMapper.selectById(experiment.getDatasetVersionId());\nif (version == null || version.getDataCount() == null || version.getDataCount() <= 0) {\n    throw new IllegalStateException(\"Dataset version \" + experiment.getDatasetVersionId() + \" has no data\");\n}","typeGuard":null,"tryCatchPattern":"try {\n    return experimentService.getResults(id);\n} catch (NullPointerException | IllegalStateException e) {\n    // dataset version row missing (NPE inside service) or empty dataset\n    throw new ResponseStatusException(HttpStatus.CONFLICT, \"Experiment dataset has no data\", e);\n}","preventionTips":["Require dataCount > 0 before allowing an experiment to run.","Add a NOT NULL / CHECK constraint or service-level validation on dataCount.","Backfill dataCount for legacy dataset versions.","Do not delete dataset versions still referenced by experiments; audit references first."],"tags":["java","spring","dataset","division-by-zero","data-quality"],"backgroundTag":"empty-result-set","analyzedSha":"f82da0b50f35744c13968191be2b1cd2452ef550","analyzedAt":"2026-09-09T15:32:42.421Z","contentChangedAt":"2026-09-09T15:32:42.421Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}