From 20609216b7c7d0eb2917b8b1ee964c49f6294c62 Mon Sep 17 00:00:00 2001 From: bvolpato Date: Sun, 25 Oct 2026 01:22:04 -0400 Subject: [PATCH] [Java] Avoid duplicate timestamps in InfluxDB fixtures --- .../beam/sdk/io/influxdb/GenerateData.java | 35 +++++++++---------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/sdks/java/io/influxdb/src/test/java/org/apache/beam/sdk/io/influxdb/GenerateData.java b/sdks/java/io/influxdb/src/test/java/org/apache/beam/sdk/io/influxdb/GenerateData.java index 27e6fa3b4660..30939ca5b959 100644 --- a/sdks/java/io/influxdb/src/test/java/org/apache/beam/sdk/io/influxdb/GenerateData.java +++ b/sdks/java/io/influxdb/src/test/java/org/apache/beam/sdk/io/influxdb/GenerateData.java @@ -23,8 +23,12 @@ import java.time.ZoneOffset; import java.time.ZonedDateTime; import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Random; +import java.util.Set; import java.util.concurrent.TimeUnit; class GenerateData { @@ -32,6 +36,10 @@ class GenerateData { private static Random random = new Random(); static List getMetric(String metric, int number) { + return getMetric(metric, number, new HashSet<>()); + } + + private static List getMetric(String metric, int number, Set timestamps) { List element = new ArrayList<>(); for (int i = 0; i < number; i++) { Model m = new Model(); @@ -47,7 +55,11 @@ static List getMetric(String metric, int number) { random.nextInt(60), random.nextInt(999999999 + 1))); ZonedDateTime zdt = time.atZone(ZoneOffset.UTC); - m.setTime(zdt.toInstant().toEpochMilli()); + long timestamp = zdt.toInstant().toEpochMilli(); + while (!timestamps.add(timestamp)) { + timestamp++; + } + m.setTime(timestamp); m.setTimeUnit(TimeUnit.MILLISECONDS); element.add(m.getLineProtocol()); } @@ -56,25 +68,10 @@ static List getMetric(String metric, int number) { static List getMultipleMetric(List metrics, int number) { List element = new ArrayList<>(); + Map> timestamps = new HashMap<>(); for (String metric : metrics) { - for (int i = 0; i < number; i++) { - Model m = new Model(); - m.setMeasurement(metric); - m.addField("field1", random.nextInt(100)); - m.addField("field2", random.nextInt(100)); - LocalDateTime time = - LocalDateTime.of( - LocalDate.now(ZoneOffset.UTC), - LocalTime.of( - random.nextInt(24), - random.nextInt(60), - random.nextInt(60), - random.nextInt(999999999 + 1))); - ZonedDateTime zdt = time.atZone(ZoneOffset.UTC); - m.setTime(zdt.toInstant().toEpochMilli()); - m.setTimeUnit(TimeUnit.MILLISECONDS); - element.add(m.getLineProtocol()); - } + Set metricTimestamps = timestamps.computeIfAbsent(metric, unused -> new HashSet<>()); + element.addAll(getMetric(metric, number, metricTimestamps)); } return element; }