[
https://issues.apache.org/jira/browse/LOG4J2-3452?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Stefan Vodita updated LOG4J2-3452:
----------------------------------
Description:
I noticed an error like:
{{ERROR Unable to create file ...}}
{{at org.apache.logging.log4j.core.util.FileUtils.mkdir(FileUtils.java:118)}}
The error could be due to a race condition:
{{Thread A: dir.exists() -> false}}
{{Thread B: dir.exists() -> false}}
{{Thread B: dir.mkdirs() -> succeeds}}
{{Thread A: dir.mkdirs() -> throws exception}}
I wrote a unit test which reproduces the error:
{{public void testMkdirConcurrent() throws IOException {}}
{{ final File file = new File("target/test/test");}}
{{ for (int i = 0; i < 1000; i++) {}}
{{ new Thread(() -> assertDoesNotThrow(() -> FileUtils.mkdir(file,
true))).start();}}
{{ org.apache.commons.io.FileUtils.deleteDirectory(file);}}
{{}}}
As a fix, we can use {{{}Files.createDirectories(){}}}, since this does the
existence check and creation as one atomic operation.
I will create a PR with the unit test and a fix.
was:
I noticed an error like:
{{{{ERROR Unable to create file ...}}}}
{{{{at
org.apache.logging.log4j.core.util.FileUtils.mkdir(FileUtils.java:118)}}}}
The error could be due to a race condition:
{{Thread A: dir.exists() -> false}}
{{Thread B: dir.exists() -> false}}
{{Thread B: dir.mkdirs() -> succeeds}}
{{Thread A: dir.mkdirs() -> throws exception}}
I wrote a unit test which reproduces the error:
{{public void testMkdirConcurrent() throws IOException {}}
{{ final File file = new File("target/test/test");}}
{{ for (int i = 0; i < 1000; i++) {}}
{{ new Thread(() -> assertDoesNotThrow(() -> FileUtils.mkdir(file,
true))).start();}}
{{ org.apache.commons.io.FileUtils.deleteDirectory(file);}}
{{}}}
As a fix, we can use {{{}Files.createDirectories(){}}}, since this does the
existence check and creation as one atomic operation.
I will create a PR with the unit test and a fix.
> Race condition in FileUtils.mkdir()
> -----------------------------------
>
> Key: LOG4J2-3452
> URL: https://issues.apache.org/jira/browse/LOG4J2-3452
> Project: Log4j 2
> Issue Type: Bug
> Affects Versions: 2.13.0
> Reporter: Stefan Vodita
> Priority: Major
>
> I noticed an error like:
> {{ERROR Unable to create file ...}}
> {{at org.apache.logging.log4j.core.util.FileUtils.mkdir(FileUtils.java:118)}}
>
> The error could be due to a race condition:
> {{Thread A: dir.exists() -> false}}
> {{Thread B: dir.exists() -> false}}
> {{Thread B: dir.mkdirs() -> succeeds}}
> {{Thread A: dir.mkdirs() -> throws exception}}
>
> I wrote a unit test which reproduces the error:
> {{public void testMkdirConcurrent() throws IOException {}}
> {{ final File file = new File("target/test/test");}}
> {{ for (int i = 0; i < 1000; i++) {}}
> {{ new Thread(() -> assertDoesNotThrow(() -> FileUtils.mkdir(file,
> true))).start();}}
> {{ org.apache.commons.io.FileUtils.deleteDirectory(file);}}
> {{}}}
>
> As a fix, we can use {{{}Files.createDirectories(){}}}, since this does the
> existence check and creation as one atomic operation.
>
> I will create a PR with the unit test and a fix.
>
>
--
This message was sent by Atlassian Jira
(v8.20.1#820001)