DNS resolution errors if DNS changes after daemon has started
I am using a corporate private Maven repository whose domain can only be resolved once connected via VPN. When I use mvnd before I am connected to the VPN it obviously fails. But if I afterwards connect to the VPN, the DNS lookup does still not work and I get the message
[ERROR] Failed to execute goal on project org.apache.sling.feature.cpconverter: Could not resolve dependencies for project org.apache.sling:org.apache.sling.feature.cpconverter:jar:1.1.1-SNAPSHOT: Failed to collect dependencies at org.apache.sling:org.apache.sling.jcr.contentloader:jar:2.4.3-SNAPSHOT: Failed to read artifact descriptor for org.apache.sling:org.apache.sling.jcr.contentloader:jar:2.4.3-SNAPSHOT: Could not transfer artifact org.apache.sling:org.apache.sling.jcr.contentloader:pom:2.4.3-SNAPSHOT from/to nexus (https://repo.int.netcentric.biz/nexus/content/groups/public/): Transfer failed for https://repo.int.netcentric.biz/nexus/content/groups/public/org/apache/sling/org.apache.sling.jcr.contentloader/2.4.3-SNAPSHOT/org.apache.sling.jcr.contentloader-2.4.3-SNAPSHOT.pom: Unknown host repo.int.netcentric.biz -> [Help 1]
If I execute the same Maven command via regular mvn it starts working immediately once I am connected to the VPN.
Seems that either the Java process or some Maven internals still use the old DNS or cache resolutions aggressively.
Probably the system property https://docs.oracle.com/javase/8/docs/technotes/guides/net/properties.html#nct has to be set.
The default is 30 seconds afaik: https://github.com/AdoptOpenJDK/openjdk-jdk11/blob/master/src/java.base/share/classes/sun/net/InetAddressCachePolicy.java#L48
@kwin can you double check that it works if you wait one minute ?
Also, note that networkaddress.cache.ttl is a security property (it has to be set in the [JAVA_HOME]/conf/security/java.security file), but you can try adding -Dsun.net.inetaddr.ttl=5 to the command line, or adding mvnd.jvmArgs=-Dsun.net.inetaddr.ttl=5 to your ~/.m2/mvnd.properties file.
The weird thing is that the DNS resolution was not successful before, therefore sun.net.inetaddr.negative.ttl should be taken into account, but this is already set to 10 by default. I will try to do some more tests...
This error is persistent until I restart the mvn daemon. Seems that Maven is doing some kind of caching here. I don't think that Java is to blame here
Do you have the full stack trace to verify which transport is used ? The default http transport uses the org.apache.http.client.HttpClient which can optionally be configured with a custom DnsResolver, but I don't think that's the case. What's weird is that afaik, transports should not live longer than the maven session, which is tied to the build.
This is the full stack trace when not yet connected to the proper DNS:
Caused by: org.eclipse.aether.resolution.ArtifactResolutionException: Could not transfer artifact org.apache.sling:org.apache.sling.repoinit.parser:pom:1.6.9-SNAPSHOT from/to nexus (https://repo.int.netcentric.biz/nexus/content/groups/public/): transfer failed for https://repo.int.netcentric.biz/nexus/content/groups/public/org/apache/sling/org.apache.sling.repoinit.parser/1.6.9-SNAPSHOT/org.apache.sling.repoinit.parser-1.6.9-SNAPSHOT.pom
at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:424)
at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifacts(DefaultArtifactResolver.java:229)
at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifact(DefaultArtifactResolver.java:207)
at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom(DefaultArtifactDescriptorReader.java:240)
... 23 common frames omitted
Caused by: org.eclipse.aether.transfer.ArtifactTransferException: Could not transfer artifact org.apache.sling:org.apache.sling.repoinit.parser:pom:1.6.9-SNAPSHOT from/to nexus (https://repo.int.netcentric.biz/nexus/content/groups/public/): transfer failed for https://repo.int.netcentric.biz/nexus/content/groups/public/org/apache/sling/org.apache.sling.repoinit.parser/1.6.9-SNAPSHOT/org.apache.sling.repoinit.parser-1.6.9-SNAPSHOT.pom
at org.eclipse.aether.connector.basic.ArtifactTransportListener.transferFailed(ArtifactTransportListener.java:52)
at org.eclipse.aether.connector.basic.BasicRepositoryConnector$TaskRunner.run(BasicRepositoryConnector.java:369)
at org.eclipse.aether.util.concurrency.RunnableErrorForwarder$1.run(RunnableErrorForwarder.java:75)
at org.eclipse.aether.connector.basic.BasicRepositoryConnector$DirectExecutor.execute(BasicRepositoryConnector.java:628)
at org.eclipse.aether.connector.basic.BasicRepositoryConnector.get(BasicRepositoryConnector.java:262)
at org.eclipse.aether.internal.impl.DefaultArtifactResolver.performDownloads(DefaultArtifactResolver.java:513)
at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:401)
... 26 common frames omitted
Caused by: org.apache.maven.wagon.TransferFailedException: transfer failed for https://repo.int.netcentric.biz/nexus/content/groups/public/org/apache/sling/org.apache.sling.repoinit.parser/1.6.9-SNAPSHOT/org.apache.sling.repoinit.parser-1.6.9-SNAPSHOT.pom
at org.apache.maven.wagon.providers.http.wagon.shared.AbstractHttpClientWagon.fillInputData(AbstractHttpClientWagon.java:1250)
at org.apache.maven.wagon.providers.http.wagon.shared.AbstractHttpClientWagon.fillInputData(AbstractHttpClientWagon.java:1140)
at org.apache.maven.wagon.StreamWagon.getInputStream(StreamWagon.java:126)
at org.apache.maven.wagon.StreamWagon.getIfNewer(StreamWagon.java:88)
at org.apache.maven.wagon.StreamWagon.get(StreamWagon.java:61)
at org.eclipse.aether.transport.wagon.WagonTransporter$GetTaskRunner.run(WagonTransporter.java:546)
at org.eclipse.aether.transport.wagon.WagonTransporter.execute(WagonTransporter.java:430)
at org.eclipse.aether.transport.wagon.WagonTransporter.get(WagonTransporter.java:407)
at org.eclipse.aether.connector.basic.BasicRepositoryConnector$GetTaskRunner.runTask(BasicRepositoryConnector.java:457)
at org.eclipse.aether.connector.basic.BasicRepositoryConnector$TaskRunner.run(BasicRepositoryConnector.java:364)
... 31 common frames omitted
Caused by: java.net.UnknownHostException: repo.int.netcentric.biz
at java.base/java.net.InetAddress$CachedAddresses.get(InetAddress.java:797)
at java.base/java.net.InetAddress.getAllByName0(InetAddress.java:1509)
at java.base/java.net.InetAddress.getAllByName(InetAddress.java:1368)
at java.base/java.net.InetAddress.getAllByName(InetAddress.java:1302)
at org.apache.maven.wagon.providers.http.httpclient.impl.conn.SystemDefaultDnsResolver.resolve(SystemDefaultDnsResolver.java:45)
at org.apache.maven.wagon.providers.http.httpclient.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:112)
at org.apache.maven.wagon.providers.http.httpclient.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:376)
at org.apache.maven.wagon.providers.http.httpclient.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:393)
at org.apache.maven.wagon.providers.http.httpclient.impl.execchain.MainClientExec.execute(MainClientExec.java:236)
at org.apache.maven.wagon.providers.http.httpclient.impl.execchain.ProtocolExec.execute(ProtocolExec.java:186)
at org.apache.maven.wagon.providers.http.httpclient.impl.execchain.RetryExec.execute(RetryExec.java:89)
at org.apache.maven.wagon.providers.http.httpclient.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
at org.apache.maven.wagon.providers.http.httpclient.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
at org.apache.maven.wagon.providers.http.httpclient.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
at org.apache.maven.wagon.providers.http.wagon.shared.AbstractHttpClientWagon.execute(AbstractHttpClientWagon.java:1005)
at org.apache.maven.wagon.providers.http.wagon.shared.AbstractHttpClientWagon.fillInputData(AbstractHttpClientWagon.java:1162)
... 40 common frames omitted
[ERROR]
the same appears after switching to the right DNS, with standalone mvn it starts working then. This happens with
mvnd native client 0.5.0-darwin-amd64 (ce80fc5ed8b7858af8ce16119336b43d5776bb13)
Terminal: org.jline.terminal.impl.PosixSysTerminal with pty org.jline.terminal.impl.jansi.osx.OsXNativePty
Apache Maven 3.8.1 (05c21c65bdfed0f71a2f2ada8b84da59348c4c5d)
Maven home: /usr/local/Cellar/mvnd/0.5.0/libexec/mvn
Java version: 11.0.11, vendor: AdoptOpenJDK, runtime: /Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home
Default locale: en_DE, platform encoding: UTF-8
OS name: "mac os x", version: "11.4", arch: "x86_64", family: "mac"
@gnodet Is this fixed by https://github.com/mvndaemon/mvnd/pull/495 as well?
@kwin I doubt it unfortunately. I'll try to get back to this issue and investigate more...