From a4ead1f7ba7fb5c08a7aa3f204c4eca434724b7c Mon Sep 17 00:00:00 2001 From: Moises Macia Date: Thu, 20 Aug 2026 22:39:53 +0000 Subject: [PATCH] retry write file --- lib/feed_reader/collector.ex | 5 ++++- lib/feed_reader/downloader.ex | 7 ++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/feed_reader/collector.ex b/lib/feed_reader/collector.ex index 65ed21d..f66bdd6 100644 --- a/lib/feed_reader/collector.ex +++ b/lib/feed_reader/collector.ex @@ -126,11 +126,14 @@ defmodule FeedReader.Collector do path = Path.join(System.tmp_dir!(), "feed_reader-parse-#{System.unique_integer([:positive])}.xml") - case File.open(path, [:write, :binary]) do + case File.open(path, [:write, :binary, :exclusive]) do {:ok, file} -> File.close(file) {:ok, path} + {:error, :eexist} -> + temporary_path() + {:error, reason} -> {:error, reason} end diff --git a/lib/feed_reader/downloader.ex b/lib/feed_reader/downloader.ex index 6ddf463..877c2a8 100644 --- a/lib/feed_reader/downloader.ex +++ b/lib/feed_reader/downloader.ex @@ -228,7 +228,11 @@ defmodule FeedReader.Downloader do end) end - defp open_temp_file do + defp open_temp_file(attempts \\ 5) + + defp open_temp_file(0), do: {:error, :eexist} + + defp open_temp_file(attempts) do path = Path.join( System.tmp_dir!(), @@ -237,6 +241,7 @@ defmodule FeedReader.Downloader do case File.open(path, [:write, :binary, :exclusive]) do {:ok, file} -> {:ok, path, file} + {:error, :eexist} -> open_temp_file(attempts - 1) error -> error end end