Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(utils): Improve robustness in createFolder #1619

Merged

Conversation

rbioteau
Copy link
Contributor

@rbioteau rbioteau commented Dec 8, 2023

The createFolder util method should not throw an Exception when the folder already exists.

A first step toward this behavior has been added with 00ca0df

It looks however incomplete as I have a case in my integration of me where an ResourceException is thrown like below:

org.eclipse.core.internal.resources.ResourceException(/procurement-app/target)[374]:
java.lang.Exception: Resource '/procurement-app/target' already exists.
 	at org.eclipse.core.internal.resources.ResourceException.provideStackTrace(ResourceException.java:42)
 	at org.eclipse.core.internal.resources.ResourceException.<init>(ResourceException.java:38)
 	at org.eclipse.core.internal.resources.Resource.checkDoesNotExist(Resource.java:346)
 	at org.eclipse.core.internal.resources.Resource.checkDoesNotExist(Resource.java:333)
 	at org.eclipse.core.internal.resources.Folder.assertCreateRequirements(Folder.java:40)
 	at org.eclipse.core.internal.resources.Folder.create(Folder.java:101)
 	at org.eclipse.core.internal.resources.Folder.create(Folder.java:129)
 	at org.eclipse.m2e.core.internal.M2EUtils.createFolder(M2EUtils.java:61)
 	at org.eclipse.m2e.core.project.configurator.AbstractLifecycleMapping.configure(AbstractLifecycleMapping.java:87)
 	at org.eclipse.m2e.core.internal.project.ProjectConfigurationManager.lambda$6(ProjectConfigurationManager.java:504)
 	at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:394)
 	at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:275)
 	at org.eclipse.m2e.core.internal.project.ProjectConfigurationManager.updateProjectConfiguration(ProjectConfigurationManager.java:498)
 	at org.eclipse.m2e.core.internal.project.ProjectConfigurationManager.configureNewMavenProjects(ProjectConfigurationManager.java:279)
 	at org.eclipse.m2e.core.internal.project.ProjectConfigurationManager.lambda$1(ProjectConfigurationManager.java:166)
 	at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:394)
 	at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:275)
 	at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:214)
 	at org.eclipse.m2e.core.internal.project.ProjectConfigurationManager.importProjects(ProjectConfigurationManager.java:139)
 	at org.eclipse.m2e.core.internal.project.ProjectConfigurationManager.importProjects(ProjectConfigurationManager.java:130)

374 is the code status for PATH_OCCUPIED which is used here

Also ignoring this status should improve robustness.

Copy link

github-actions bot commented Dec 8, 2023

Test Results

107 files  ±0  107 suites  ±0   7m 1s ⏱️ +13s
662 tests ±0  652 ✅ ±0  10 💤 ±0  0 ❌ ±0 
662 runs  ±0  651 ✅ ±0  11 💤 ±0  0 ❌ ±0 

Results for commit 624cc53. ± Comparison against base commit 98dbefe.

♻️ This comment has been updated with latest results.

rbioteau and others added 2 commits January 8, 2024 17:17
The `createFolder` util method should not throw an Exception when the
folder already exists.

A first step toward this behavior has been added with
eclipse-m2e@00ca0df

It looks however incomplete as I have a case in my integration of me
where an ResourceException is thrown like below:

```
org.eclipse.core.internal.resources.ResourceException(/procurement-app/target)[374]:
java.lang.Exception: Resource '/procurement-app/target' already exists.
 	at org.eclipse.core.internal.resources.ResourceException.provideStackTrace(ResourceException.java:42)
 	at org.eclipse.core.internal.resources.ResourceException.<init>(ResourceException.java:38)
 	at org.eclipse.core.internal.resources.Resource.checkDoesNotExist(Resource.java:346)
 	at org.eclipse.core.internal.resources.Resource.checkDoesNotExist(Resource.java:333)
 	at org.eclipse.core.internal.resources.Folder.assertCreateRequirements(Folder.java:40)
 	at org.eclipse.core.internal.resources.Folder.create(Folder.java:101)
 	at org.eclipse.core.internal.resources.Folder.create(Folder.java:129)
 	at org.eclipse.m2e.core.internal.M2EUtils.createFolder(M2EUtils.java:61)
 	at org.eclipse.m2e.core.project.configurator.AbstractLifecycleMapping.configure(AbstractLifecycleMapping.java:87)
 	at org.eclipse.m2e.core.internal.project.ProjectConfigurationManager.lambda$6(ProjectConfigurationManager.java:504)
 	at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:394)
 	at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:275)
 	at org.eclipse.m2e.core.internal.project.ProjectConfigurationManager.updateProjectConfiguration(ProjectConfigurationManager.java:498)
 	at org.eclipse.m2e.core.internal.project.ProjectConfigurationManager.configureNewMavenProjects(ProjectConfigurationManager.java:279)
 	at org.eclipse.m2e.core.internal.project.ProjectConfigurationManager.lambda$1(ProjectConfigurationManager.java:166)
 	at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:394)
 	at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:275)
 	at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:214)
 	at org.eclipse.m2e.core.internal.project.ProjectConfigurationManager.importProjects(ProjectConfigurationManager.java:139)
 	at org.eclipse.m2e.core.internal.project.ProjectConfigurationManager.importProjects(ProjectConfigurationManager.java:130)
```

`374` is the code status for `PATH_OCCUPIED` which is used
[here](https://github.com/eclipse-platform/eclipse.platform/blob/master/resources/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Resource.java#L345)

Also ignoring this status should improve robustness.

Signed-off-by: Romain Bioteau <romain.bioteau@bonitasoft.com>
…s.java

Co-authored-by: Mickael Istria <mistria@redhat.com>
@mickaelistria mickaelistria force-pushed the fix/create_folder_race_condition branch from 84207b0 to 624cc53 Compare January 8, 2024 16:17
@mickaelistria mickaelistria merged commit 5cdedd8 into eclipse-m2e:master Jan 9, 2024
6 of 7 checks passed
@mickaelistria
Copy link
Contributor

Thanks!

@HannesWell HannesWell added this to the 2.6.0 milestone Feb 17, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants