[ 
https://issues.apache.org/jira/browse/MRESOLVER-536?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jurrie Overgoor updated MRESOLVER-536:
--------------------------------------
    Description: 
When Maven resolver downloads a file and writes it to disk, it tries to set the 
last modified time on it. There are filesystems that do not support the "set 
last modified time" operation. In that case the operation will fail, and the 
Maven build will error out with a {{FileSystemException}}. Attached is (the 
last part of) such a stack track trace.

I encountered such a file system when running in a Kubernetes (Openshift 
actually, but that's Kubernetes based) cloud setup. I mapped the {{~/.m2}} 
directory to a Persistent Volume Claim so that files downloaded in one build 
are retained in the next build. I explicitly set the access mode to 
ReadWriteMany (a.k.a. RWX, a.k.a. Shared Access) so that multiple build nodes 
can use the same PVC. The PVC is provisioned by a [`file.csi.azure.com` 
provisioner|https://learn.microsoft.com/en-us/azure/aks/azure-files-csi]. And 
that translates to a file system that does not support setting the last 
modified time on a file. Thus the call to 
{{java.nio.file.Files.setLastModifiedTime(Path, FileTime)}} in 
{{org.eclipse.aether.transport.http.HttpTransporter.EntityGetter.handle(CloseableHttpResponse)org.eclipse.aether.transport.http.HttpTransporter.EntityGetter.handle(CloseableHttpResponse)}}
 comes crashing down.

There is no good way to query if the FS supports the call. So I resorted to 
wrapping the call in a `try .. catch` block. This seems to work. Maven 
downloads dependencies again, and my build progresses.

  was:
When Maven resolver downloads a file and writes it to disk, it tries to set the 
last modified time on it. There are filesystems that do not support the "set 
last modified time" operation. In that case the operation will fail, and the 
Maven build will error out with a {{FileSystemException}}. Attached is (the 
last part of) such a stack track trace.

I encountered such a file system when running in a Kubernetes (Openshift 
actually, but that's Kubernetes based) cloud setup. I mapped the {{~/.m2}} 
directory to a Persistent Volume Claim so that files downloaded in one build 
are retained in the next build. I explicitly set the access mode to 
ReadWriteMany (a.k.a. RWX, a.k.a. Shared Access) so that multiple build nodes 
can use the same PVC. The PVC is provisioned by a `file.csi.azure.com` 
provisioner. And that translates to a file system that does not support setting 
the last modified time on a file. Thus the call to 
{{java.nio.file.Files.setLastModifiedTime(Path, FileTime)}} in 
{{org.eclipse.aether.transport.http.HttpTransporter.EntityGetter.handle(CloseableHttpResponse)org.eclipse.aether.transport.http.HttpTransporter.EntityGetter.handle(CloseableHttpResponse)}}
 comes crashing down.

There is no good way to query if the FS supports the call. So I resorted to 
wrapping the call in a `try .. catch` block. This seems to work. Maven 
downloads dependencies again, and my build progresses.


> Skip setting last modified time when FS does not support it
> -----------------------------------------------------------
>
>                 Key: MRESOLVER-536
>                 URL: https://issues.apache.org/jira/browse/MRESOLVER-536
>             Project: Maven Resolver
>          Issue Type: Improvement
>          Components: Resolver
>    Affects Versions: 1.9.18
>            Reporter: Jurrie Overgoor
>            Priority: Major
>         Attachments: Stacktrace.txt
>
>
> When Maven resolver downloads a file and writes it to disk, it tries to set 
> the last modified time on it. There are filesystems that do not support the 
> "set last modified time" operation. In that case the operation will fail, and 
> the Maven build will error out with a {{FileSystemException}}. Attached is 
> (the last part of) such a stack track trace.
> I encountered such a file system when running in a Kubernetes (Openshift 
> actually, but that's Kubernetes based) cloud setup. I mapped the {{~/.m2}} 
> directory to a Persistent Volume Claim so that files downloaded in one build 
> are retained in the next build. I explicitly set the access mode to 
> ReadWriteMany (a.k.a. RWX, a.k.a. Shared Access) so that multiple build nodes 
> can use the same PVC. The PVC is provisioned by a [`file.csi.azure.com` 
> provisioner|https://learn.microsoft.com/en-us/azure/aks/azure-files-csi]. And 
> that translates to a file system that does not support setting the last 
> modified time on a file. Thus the call to 
> {{java.nio.file.Files.setLastModifiedTime(Path, FileTime)}} in 
> {{org.eclipse.aether.transport.http.HttpTransporter.EntityGetter.handle(CloseableHttpResponse)org.eclipse.aether.transport.http.HttpTransporter.EntityGetter.handle(CloseableHttpResponse)}}
>  comes crashing down.
> There is no good way to query if the FS supports the call. So I resorted to 
> wrapping the call in a `try .. catch` block. This seems to work. Maven 
> downloads dependencies again, and my build progresses.



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

Reply via email to