{"record":{"id":"f412ade2d28140da","repo":"zhisheng17/flink-learning","slug":"no-measurement-defined","errorCode":null,"errorMessage":"No measurement defined","messagePattern":"No measurement defined","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"flink-learning-connectors/flink-learning-connectors-influxdb/src/main/java/com/zhisheng/connectors/influxdb/InfluxDBSink.java","lineNumber":60,"sourceCode":"                throw new RuntimeException(\"This \" + influxDBConfig.getDatabase() + \" database does not exist!\");\n            }\n        }\n\n        influxDBClient.setDatabase(influxDBConfig.getDatabase());\n\n        if (influxDBConfig.getBatchActions() > 0) {\n            influxDBClient.enableBatch(influxDBConfig.getBatchActions(), influxDBConfig.getFlushDuration(), influxDBConfig.getFlushDurationTimeUnit());\n        }\n\n        if (influxDBConfig.isEnableGzip()) {\n            influxDBClient.enableGzip();\n        }\n    }\n\n    @Override\n    public void invoke(MetricEvent metricEvent, Context context) throws Exception {\n        if (StringUtils.isNullOrWhitespaceOnly(metricEvent.getName())) {\n            throw new RuntimeException(\"No measurement defined\");\n        }\n\n        Point.Builder builder = Point.measurement(metricEvent.getName())\n                .time(metricEvent.getTimestamp(), TimeUnit.MILLISECONDS);\n\n        if (!CollectionUtil.isNullOrEmpty(metricEvent.getFields())) {\n            builder.fields(metricEvent.getFields());\n        }\n\n        if (!CollectionUtil.isNullOrEmpty(metricEvent.getTags())) {\n            builder.tag(metricEvent.getTags());\n        }\n\n        Point point = builder.build();\n        influxDBClient.write(point);\n    }\n\n    @Override","sourceCodeStart":42,"sourceCodeEnd":78,"githubUrl":"https://github.com/zhisheng17/flink-learning/blob/d731cee7618021be56d132cc925102ffff8d75e6/flink-learning-connectors/flink-learning-connectors-influxdb/src/main/java/com/zhisheng/connectors/influxdb/InfluxDBSink.java#L42-L78","documentation":"InfluxDBSink.invoke uses the MetricEvent name as the InfluxDB measurement. If the event's name is null or whitespace, the sink throws RuntimeException('No measurement defined') because a Point cannot be written without a measurement.","triggerScenarios":"Stream processing emits a MetricEvent whose getName() is null or blank (e.g. metric not set when building the event) and it reaches invoke().","commonSituations":"Upstream transformation steps that forgot to set the metric name, events deserialized from topics with missing fields, or filter/branch logic passing placeholder events through.","solutions":["Set metricEvent.name when constructing every MetricEvent before sinking","Filter out events with blank names before adding them to the sink","Add validation at the event-producing code so bad events fail at the source"],"exampleFix":"// before\nMetricEvent e = new MetricEvent(null, fields, System.currentTimeMillis());\n// after\nMetricEvent e = new MetricEvent(\"cpu_usage\", fields, System.currentTimeMillis());","handlingStrategy":"validation","validationCode":"if (event == null || event.getName() == null || event.getName().trim().isEmpty()) {\n    return; // skip or log-and-drop before sinking\n}","typeGuard":"boolean hasMeasurement(MetricEvent e) {\n    return e != null && e.getName() != null && !e.getName().trim().isEmpty();\n}","tryCatchPattern":"try {\n    sink.invoke(metricEvent, context);\n} catch (RuntimeException e) {\n    if (\"No measurement defined\".equals(e.getMessage())) {\n        LOG.warn(\"Dropping metric event without name: {}\", metricEvent);\n    } else throw e;\n}","preventionTips":["Enforce non-null names in the MetricEvent constructor/builder","Filter or dead-letter events missing names upstream of the sink","Add a unit test that every emitted MetricEvent has a name"],"tags":["influxdb","validation","flink","null"],"backgroundTag":"empty-required-field","analyzedSha":"d731cee7618021be56d132cc925102ffff8d75e6","analyzedAt":"2026-09-06T05:35:08.496Z","contentChangedAt":"2026-09-06T05:35:08.496Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}