[
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)