[ https://issues.apache.org/jira/browse/MNG-7705?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17707036#comment-17707036 ]
ASF GitHub Bot commented on MNG-7705: ------------------------------------- cstamas commented on code in PR #269: URL: https://github.com/apache/maven-resolver/pull/269#discussion_r1153762590 ########## maven-resolver-sync-context-ipc/src/main/java/org/eclipse/aether/sync/ipc/IpcSyncContextFactory.java: ########## @@ -0,0 +1,68 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.eclipse.aether.sync.ipc; + +import javax.annotation.PreDestroy; +import javax.inject.Named; +import javax.inject.Singleton; + +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Map; +import java.util.Optional; +import java.util.concurrent.ConcurrentHashMap; + +import org.eclipse.aether.RepositorySystemSession; +import org.eclipse.aether.SyncContext; +import org.eclipse.aether.spi.synccontext.SyncContextFactory; +import org.eclipse.sisu.Priority; + +/** + * The SyncContextFactory implementation. + */ +@Named(IpcSyncContextFactory.NAME) +@Priority(-1) +@Singleton +public class IpcSyncContextFactory implements SyncContextFactory { + + public static final String NAME = "ipc"; + + private final Map<Path, IpcClient> clients = new ConcurrentHashMap<>(); + + @Override + public SyncContext newInstance(RepositorySystemSession session, boolean shared) { + Path repository = session.getLocalRepository().getBasedir().toPath(); + Path logPath = Optional.ofNullable(System.getProperty(IpcServer.STORAGE_PROP)) + .map(Paths::get) + .orElseGet(() -> Paths.get(System.getProperty("user.home")).resolve(".m2/ipc-sync/")); + Path syncPath = null; // this is the path to a natively built server + IpcClient client = clients.computeIfAbsent(repository, r -> new IpcClient(r, logPath, syncPath)); + return new IpcSyncContext(client, shared); + } + + @PreDestroy Review Comment: String no: the component should hook into https://github.com/apache/maven-resolver/blob/d0f8564846863c8a88f2fb1da8391fc860517192/maven-resolver-impl/src/main/java/org/eclipse/aether/impl/RepositorySystemLifecycle.java#L41 and remain oblivious of who and how handles lifecycle. Just register a callback that will close clients and rely that resolver will be shut down. > Sporadic failures on multiple builds sharing the same local repo when writing > the .lastUpdated file > --------------------------------------------------------------------------------------------------- > > Key: MNG-7705 > URL: https://issues.apache.org/jira/browse/MNG-7705 > Project: Maven > Issue Type: Bug > Affects Versions: 3.9.0 > Environment: Apache Maven 3.9.0 > (9b58d2bad23a66be161c4664ef21ce219c2c8584) > Maven home: /data00/bamboo/maven/maven-next > Java version: 1.8.0_362, vendor: Red Hat, Inc., runtime: > /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b09-2.el8_7.x86_64/jre > Default locale: en_CA, platform encoding: ISO-8859-1 > OS name: "linux", version: "4.18.0-193.el8.x86_64", arch: "amd64", family: > "unix" > Reporter: Jim Sellers > Priority: Major > Attachments: 2023-02-28_failure.zip, MNG-7705-2023-02-27.zip, > MNG-7705-2023-03-07.zip, MNG-7705.zip, MNG-7705_strace_2023-02-27.zip, > apache-maven-3.9.1-SNAPSHOT-bin.tar-1.gz, failed_plan-377290782-JOB1-15.zip, > maven-resolver-util-1.9.6-SNAPSHOT.jar, xaa-1.xz, xab-1.xz, xac-1.xz, xad-1.xz > > > On a CI server, we have multiple builds running on the same host and sharing > the same repo. > While testing 3.9.0, I started to see a NIO exception for the > {{.lastUpdated}} file. This has worked fine for years, all the way up to > 3.8.7. > If you re-run the build, it will work. I think that it's just a collision > between the different processes. > {code:title=example command} > mvn --batch-mode dependency:sources dependency:resolve -Dclassifier=javadoc > # this uses dependency:3.5.0:sources > {code} > {code:title=stracktrace} > [WARNING] Failed to write tracking file > '/home/bamboo/.m2/repository/io/smallrye/config/smallrye-config/2.3.0/smallrye-config-2.3.0-javadoc.jar.lastUpdated' > java.nio.file.NoSuchFileException: > /home/bamboo/.m2/repository/io/smallrye/config/smallrye-config/2.3.0/smallrye-config-2.3.0-javadoc.jar.lastUpdated > at sun.nio.fs.UnixException.translateToIOException > (UnixException.java:86) > at sun.nio.fs.UnixException.rethrowAsIOException > (UnixException.java:102) > at sun.nio.fs.UnixException.rethrowAsIOException > (UnixException.java:107) > at sun.nio.fs.UnixFileSystemProvider.newByteChannel > (UnixFileSystemProvider.java:214) > at java.nio.file.Files.newByteChannel (Files.java:361) > at java.nio.file.Files.newByteChannel (Files.java:407) > at java.nio.file.spi.FileSystemProvider.newInputStream > (FileSystemProvider.java:384) > at java.nio.file.Files.newInputStream (Files.java:152) > at org.eclipse.aether.internal.impl.DefaultTrackingFileManager.update > (DefaultTrackingFileManager.java:90) > at org.eclipse.aether.internal.impl.DefaultUpdateCheckManager.write > (DefaultUpdateCheckManager.java:604) > at > org.eclipse.aether.internal.impl.DefaultUpdateCheckManager.touchArtifact > (DefaultUpdateCheckManager.java:539) > at > org.eclipse.aether.internal.impl.DefaultArtifactResolver.evaluateDownloads > (DefaultArtifactResolver.java:701) > 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.shared.transfer.artifact.resolve.internal.Maven31ArtifactResolver.resolveArtifact > (Maven31ArtifactResolver.java:97) > at > org.apache.maven.shared.transfer.artifact.resolve.internal.Maven31ArtifactResolver.resolveArtifact > (Maven31ArtifactResolver.java:78) > at > org.apache.maven.shared.transfer.artifact.resolve.internal.DefaultArtifactResolver.resolveArtifact > (DefaultArtifactResolver.java:70) > at > org.apache.maven.plugins.dependency.fromDependencies.AbstractDependencyFilterMojo.resolve > (AbstractDependencyFilterMojo.java:464) > at > org.apache.maven.plugins.dependency.fromDependencies.AbstractDependencyFilterMojo.getClassifierTranslatedDependencies > (AbstractDependencyFilterMojo.java:408) > at > org.apache.maven.plugins.dependency.fromDependencies.AbstractDependencyFilterMojo.getDependencySets > (AbstractDependencyFilterMojo.java:340) > at > org.apache.maven.plugins.dependency.resolvers.ResolveDependenciesMojo.doExecute > (ResolveDependenciesMojo.java:103) > at > org.apache.maven.plugins.dependency.resolvers.ResolveDependencySourcesMojo.doExecute > (ResolveDependencySourcesMojo.java:52) > at org.apache.maven.plugins.dependency.AbstractDependencyMojo.execute > (AbstractDependencyMojo.java:159) > at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo > (DefaultBuildPluginManager.java:126) > at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 > (MojoExecutor.java:342) > at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute > (MojoExecutor.java:330) > at org.apache.maven.lifecycle.internal.MojoExecutor.execute > (MojoExecutor.java:213) > at org.apache.maven.lifecycle.internal.MojoExecutor.execute > (MojoExecutor.java:175) > at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 > (MojoExecutor.java:76) > at org.apache.maven.lifecycle.internal.MojoExecutor$1.run > (MojoExecutor.java:163) > at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute > (DefaultMojosExecutionStrategy.java:39) > at org.apache.maven.lifecycle.internal.MojoExecutor.execute > (MojoExecutor.java:160) > at > org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject > (LifecycleModuleBuilder.java:105) > at > org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject > (LifecycleModuleBuilder.java:73) > at > org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build > (SingleThreadedBuilder.java:53) > at org.apache.maven.lifecycle.internal.LifecycleStarter.execute > (LifecycleStarter.java:118) > at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:260) > at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:172) > at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:100) > 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 sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) > at sun.reflect.NativeMethodAccessorImpl.invoke > (NativeMethodAccessorImpl.java:62) > at sun.reflect.DelegatingMethodAccessorImpl.invoke > (DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke (Method.java:498) > 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) > {code} -- This message was sent by Atlassian Jira (v8.20.10#820010)