[ 
https://issues.apache.org/jira/browse/MRESOLVER-325?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17694090#comment-17694090
 ] 

Uwe Schindler commented on MRESOLVER-325:
-----------------------------------------

Hi,
the Lucene team knows this issue, but due to our 2-phase-commits we have put a 
lot of thought to get the transactional system running correctly. The issue 
here is in fact not limited to Windows. When testing on Linux with e.g., the 
ext4 filesystem, the underlying problem is not necesarily showing up, because 
ext4 has a workaround for badly written appplications. Of course on Linux you 
won't get an AccessDeniedException as Linux can overwrite files that are 
currently open or in use.

https://www.kernel.org/doc/Documentation/filesystems/ext4.txt
{quote}
auto_da_alloc: Many broken applications don’t use fsync() when replacing 
existing files via patterns such as fd = 
open(“foo.new”)/write(fd,..)/close(fd)/ rename(“foo.new”, “foo”), or worse yet, 
fd = open(“foo”, O_TRUNC)/write(fd,..)/close(fd). If auto_da_alloc is enabled, 
ext4 will detect the replace-via-rename and replace-via-truncate patterns and 
force that any delayed allocation blocks are allocated such that at the next 
journal commit, in the default data=ordered mode, the data blocks of the new 
file are forced to disk before the rename() operation is committed. This 
provides roughly the same level of guarantees as ext3, and avoids the 
“zero-length” problem that can happen when a system crashes before the delayed 
allocation blocks are forced to disk.
{quote}

So the correct way how to do this type of stuff is to fsync the newly created 
file and after that rename it.

> [REGRESSION] Suddenly seeing I/O errors under windows aborting the build
> ------------------------------------------------------------------------
>
>                 Key: MRESOLVER-325
>                 URL: https://issues.apache.org/jira/browse/MRESOLVER-325
>             Project: Maven Resolver
>          Issue Type: Bug
>          Components: Resolver
>    Affects Versions: 1.9.4
>            Reporter: Christoph Läubrich
>            Assignee: Michael Osipov
>            Priority: Major
>             Fix For: 1.9.6
>
>
> If one runs a build that otherwise works fine on 3.8.x with 3.9 we now get 
> the following exception (full output can be found here 
> https://github.com/eclipse-platform/eclipse.platform/actions/runs/4211467991/jobs/7309831666):
> {code:java}
> Error: 5.889 [ERROR] Internal error: java.io.UncheckedIOException: 
> java.nio.file.AccessDeniedException: 
> C:\Users\runneradmin\.m2\repository\com\google\code\gson\gson\2.10.1\_remote.repositories.15650462061630955031.tmp
>  -> 
> C:\Users\runneradmin\.m2\repository\com\google\code\gson\gson\2.10.1\_remote.repositories
>  -> [Help 1]
> org.apache.maven.InternalErrorException: Internal error: 
> java.io.UncheckedIOException: java.nio.file.AccessDeniedException: 
> C:\Users\runneradmin\.m2\repository\com\google\code\gson\gson\2.10.1\_remote.repositories.15650462061630955031.tmp
>  -> 
> C:\Users\runneradmin\.m2\repository\com\google\code\gson\gson\2.10.1\_remote.repositories
>     at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:108)
>     at org.apache.maven.cli.MavenCli.execute (MavenCli.java:821)
>     at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:270)
>     at org.apache.maven.cli.MavenCli.main (MavenCli.java:192)
>     at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
>     at jdk.internal.reflect.NativeMethodAccessorImpl.invoke 
> (NativeMethodAccessorImpl.java:77)
>     at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke 
> (DelegatingMethodAccessorImpl.java:43)
>     at java.lang.reflect.Method.invoke (Method.java:568)
>     at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced 
> (Launcher.java:282)
>     at org.codehaus.plexus.classworlds.launcher.Launcher.launch 
> (Launcher.java:225)
>     at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode 
> (Launcher.java:406)
>     at org.codehaus.plexus.classworlds.launcher.Launcher.main 
> (Launcher.java:347)
> Caused by: java.io.UncheckedIOException: java.nio.file.AccessDeniedException: 
> C:\Users\runneradmin\.m2\repository\com\google\code\gson\gson\2.10.1\_remote.repositories.15650462061630955031.tmp
>  -> 
> C:\Users\runneradmin\.m2\repository\com\google\code\gson\gson\2.10.1\_remote.repositories
>     at org.eclipse.aether.internal.impl.DefaultTrackingFileManager.update 
> (DefaultTrackingFileManager.java:121)
>     at 
> org.eclipse.aether.internal.impl.EnhancedLocalRepositoryManager.addRepo 
> (EnhancedLocalRepositoryManager.java:274)
>     at 
> org.eclipse.aether.internal.impl.EnhancedLocalRepositoryManager.addArtifact 
> (EnhancedLocalRepositoryManager.java:252)
>     at org.eclipse.aether.internal.impl.EnhancedLocalRepositoryManager.add 
> (EnhancedLocalRepositoryManager.java:225)
>     at 
> org.eclipse.aether.internal.impl.DefaultArtifactResolver.evaluateDownloads 
> (DefaultArtifactResolver.java:680)
>     at 
> org.eclipse.aether.internal.impl.DefaultArtifactResolver.performDownloads 
> (DefaultArtifactResolver.java:592)
>     at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve 
> (DefaultArtifactResolver.java:478)
>     at 
> org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifacts 
> (DefaultArtifactResolver.java:278)
>     at 
> org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifact 
> (DefaultArtifactResolver.java:255)
>     at 
> org.eclipse.aether.internal.impl.DefaultRepositorySystem.resolveArtifact 
> (DefaultRepositorySystem.java:296)
>     at org.apache.maven.artifact.resolver.DefaultArtifactResolver.resolve 
> (DefaultArtifactResolver.java:197)
>     at org.apache.maven.artifact.resolver.DefaultArtifactResolver.resolve 
> (DefaultArtifactResolver.java:413)
>     at org.apache.maven.repository.legacy.LegacyRepositorySystem.resolve 
> (LegacyRepositorySystem.java:332)
>     at 
> org.eclipse.tycho.osgi.configuration.MavenDependenciesResolverConfigurer.resolve
>  (MavenDependenciesResolverConfigurer.java:104)
>     at org.eclipse.tycho.core.shared.MavenDependenciesResolver.resolve 
> (MavenDependenciesResolver.java:60)
>     at org.eclipse.tycho.core.resolver.MavenTargetDefinitionContent.<init> 
> (MavenTargetDefinitionContent.java:262)
>     at 
> org.eclipse.tycho.p2resolver.TargetDefinitionResolver.resolveContentWithExceptions
>  (TargetDefinitionResolver.java:179)
>     at org.eclipse.tycho.p2resolver.TargetDefinitionResolver.resolveContent 
> (TargetDefinitionResolver.java:110)
>     at 
> org.eclipse.tycho.p2resolver.TargetDefinitionResolverService.resolveFromArguments
>  (TargetDefinitionResolverService.java:90)
>     at java.util.concurrent.ConcurrentHashMap.computeIfAbsent 
> (ConcurrentHashMap.java:1708)
>     at 
> org.eclipse.tycho.p2resolver.TargetDefinitionResolverService.getTargetDefinitionContent
>  (TargetDefinitionResolverService.java:65)
>     at 
> org.eclipse.tycho.p2resolver.TargetPlatformFactoryImpl.resolveTargetDefinitions
>  (TargetPlatformFactoryImpl.java:214)
>     at 
> org.eclipse.tycho.p2resolver.TargetPlatformFactoryImpl.createTargetPlatform 
> (TargetPlatformFactoryImpl.java:164)
>     at 
> org.eclipse.tycho.p2resolver.TargetPlatformFactoryImpl.createTargetPlatform 
> (TargetPlatformFactoryImpl.java:137)
>     at 
> org.eclipse.tycho.p2resolver.TargetPlatformFactoryImpl.createTargetPlatform 
> (TargetPlatformFactoryImpl.java:88)
>     at 
> org.eclipse.tycho.p2resolver.ReactorRepositoryManagerImpl.computePreliminaryTargetPlatform
>  (ReactorRepositoryManagerImpl.java:61)
>     at 
> org.eclipse.tycho.p2resolver.P2DependencyResolver.computePreliminaryTargetPlatform
>  (P2DependencyResolver.java:202)
>     at org.eclipse.tycho.core.resolver.DefaultTychoResolver.resolveProject 
> (DefaultTychoResolver.java:130)
>     at 
> org.eclipse.tycho.core.maven.TychoMavenLifecycleParticipant.lambda$resolveProjects$2
>  (TychoMavenLifecycleParticipant.java:256)
>     at java.util.stream.ForEachOps$ForEachOp$OfRef.accept 
> (ForEachOps.java:183)
>     at java.util.stream.SpinedBuffer$1Splitr.forEachRemaining 
> (SpinedBuffer.java:364)
>     at java.util.stream.AbstractPipeline.copyInto (AbstractPipeline.java:509)
>     at java.util.stream.ForEachOps$ForEachTask.compute (ForEachOps.java:290)
>     at java.util.concurrent.CountedCompleter.exec (CountedCompleter.java:754)
>     at java.util.concurrent.ForkJoinTask.doExec (ForkJoinTask.java:373)
>     at java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec 
> (ForkJoinPool.java:1182)
>     at java.util.concurrent.ForkJoinPool.scan (ForkJoinPool.java:1655)
>     at java.util.concurrent.ForkJoinPool.runWorker (ForkJoinPool.java:1622)
>     at java.util.concurrent.ForkJoinWorkerThread.run 
> (ForkJoinWorkerThread.java:165)
> {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to