From 0f2f13840285fce59ecd51d0f063e5a89bd47b8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Wa=C5=9B?= Date: Wed, 21 Sep 2022 11:00:53 +0200 Subject: [PATCH] Use advisory locks to avoid duplicate metrics --- .../main/java/io/trino/benchto/service/BenchmarkService.java | 2 ++ .../main/java/io/trino/benchto/service/repo/MetricRepo.java | 3 +++ 2 files changed, 5 insertions(+) diff --git a/benchto-service/src/main/java/io/trino/benchto/service/BenchmarkService.java b/benchto-service/src/main/java/io/trino/benchto/service/BenchmarkService.java index e72668f9..120f0578 100644 --- a/benchto-service/src/main/java/io/trino/benchto/service/BenchmarkService.java +++ b/benchto-service/src/main/java/io/trino/benchto/service/BenchmarkService.java @@ -173,6 +173,8 @@ public void finishExecution(String uniqueName, String benchmarkSequenceId, Strin private List normalizeMeasurements(List input) { // use a lookup map to avoid building a complex SQL query that compares attributes list + // acquire a lock to avoid adding multiple metrics with same name and same attributes + metricRepo.lock(); Map metrics = new HashMap<>(); metricRepo.findAll().forEach(metric -> metrics.put(metric, metric)); Map> groups = input.stream() diff --git a/benchto-service/src/main/java/io/trino/benchto/service/repo/MetricRepo.java b/benchto-service/src/main/java/io/trino/benchto/service/repo/MetricRepo.java index 74184f67..780a64dd 100644 --- a/benchto-service/src/main/java/io/trino/benchto/service/repo/MetricRepo.java +++ b/benchto-service/src/main/java/io/trino/benchto/service/repo/MetricRepo.java @@ -15,10 +15,13 @@ import io.trino.benchto.service.model.Metric; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; @Repository public interface MetricRepo extends JpaRepository { + @Query(value = "select true from pg_advisory_xact_lock(1)", nativeQuery = true) + void lock(); }