From 03f590f7caf039c06d4b9f55fcdffcababd6e122 Mon Sep 17 00:00:00 2001 From: Ruslan Cheremin Date: Thu, 6 Oct 2022 14:02:10 +0200 Subject: [PATCH] [monitoring] fix FileAlreadyExistsException in CsvMetricsExporter if target path has a symlink GitOrigin-RevId: 3c930d4d33d5375518aed74c77c5ece5e655606e --- platform/diagnostic/telemetry/src/CsvMetricsExporter.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/platform/diagnostic/telemetry/src/CsvMetricsExporter.java b/platform/diagnostic/telemetry/src/CsvMetricsExporter.java index 5ff3e02595cc..1e3c817e9fc7 100644 --- a/platform/diagnostic/telemetry/src/CsvMetricsExporter.java +++ b/platform/diagnostic/telemetry/src/CsvMetricsExporter.java @@ -45,7 +45,12 @@ public final class CsvMetricsExporter implements MetricExporter { public CsvMetricsExporter(final @NotNull Path writeToPath) throws IOException { this.writeToPath = writeToPath.toAbsolutePath(); if (!Files.exists(this.writeToPath)) { - Files.createDirectories(this.writeToPath.getParent()); + final Path parentDir = this.writeToPath.getParent(); + if(!Files.isDirectory(parentDir)) { + //RC: createDirectories() _does_ throw FileAlreadyExistsException if path is a _symlink_ to a directory, not a directory + // itself (JDK-8130464). Check !isDirectory() above should work around that case. + Files.createDirectories(parentDir); + } Files.write(this.writeToPath, csvHeadersLines(), CREATE, WRITE); } }