[
https://issues.apache.org/jira/browse/FINERACT-1037?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17160340#comment-17160340
]
Petri Tuomola commented on FINERACT-1037:
-----------------------------------------
Ok I've now managed to reproduce this with my own Docker setup. As I guessed,
you get this error if you recreate your Fineract docker image but you do not
recreate your MySQL database. In that case, your database contains a reference
to an uploaded file, but that file can no longer be found on the Fineract
Docker container as it has been recreated.
I think the right way to fix this would be to make the ~/.fineract directory
(into which these uploaded files are stored) a mounted volume in Docker so that
it is persisted and reused even if the Docker image is recreated. I think that
would also be a sensible solution for any "real" installation as we shouldn't
really be storing files on container images. But of course that then can result
in the volume growing out of control as it is never cleaned up.
The "quick and dirty" solution (for testing & demos) would be to always reset
MySQL database when rebuilding the Docker image - then we would never have a
database with references to non-existent files.
[~vorburger] - this is probably most relevant to you and fineract.dev... any
preferences?
> FileNotFoundException:
> /home/tomcat/.fineract/DefaultDemoTenant/documents/CLIENTS_PERSON/null/sf5694ypszb/something.xls
> -----------------------------------------------------------------------------------------------------------------------
>
> Key: FINERACT-1037
> URL: https://issues.apache.org/jira/browse/FINERACT-1037
> Project: Apache Fineract
> Issue Type: Bug
> Reporter: Michael Vorburger
> Priority: Blocker
>
> See FINERACT-932 for general background; I'm currently seeing this in logs of
> https://www.fineract.dev:
> {noformat}java.io.FileNotFoundException:
> /home/tomcat/.fineract/DefaultDemoTenant/documents/CLIENTS_PERSON/null/sf5694ypszb/CLIENTS_PERSON2020-05-06
> (1).xls (No such file or directory)
> at java.io.FileInputStream.open0 (Native Method)
> at java.io.FileInputStream.open (FileInputStream.java:219)
> at java.io.FileInputStream.<init> (FileInputStream.java:157)
> at com.sun.jersey.core.impl.provider.entity.FileProvider.writeTo
> (FileProvider.java:101)
> at com.sun.jersey.core.impl.provider.entity.FileProvider.writeTo
> (FileProvider.java:64)
> at com.sun.jersey.spi.container.ContainerResponse.write
> (ContainerResponse.java:302)
> at
> com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest
> (WebApplicationImpl.java:1510)
> at
> com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest
> (WebApplicationImpl.java:1419)
> at
> com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest
> (WebApplicationImpl.java:1409)
> at com.sun.jersey.spi.container.servlet.WebComponent.service
> (WebComponent.java:409)
> at com.sun.jersey.spi.container.servlet.ServletContainer.service
> (ServletContainer.java:558)
> at com.sun.jersey.spi.container.servlet.ServletContainer.service
> (ServletContainer.java:733)
> at javax.servlet.http.HttpServlet.service (HttpServlet.java:741)
> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
> (ApplicationFilterChain.java:231)
> at org.apache.catalina.core.ApplicationFilterChain.doFilter
> (ApplicationFilterChain.java:166)
> at org.apache.tomcat.websocket.server.WsFilter.doFilter
> (WsFilter.java:53)
> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
> (ApplicationFilterChain.java:193)
> at org.apache.catalina.core.ApplicationFilterChain.doFilter
> (ApplicationFilterChain.java:166)
> at
> org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke
> (FilterSecurityInterceptor.java:115)
> at
> org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter
> (FilterSecurityInterceptor.java:90)
> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
> (ApplicationFilterChain.java:193)
> at org.apache.catalina.core.ApplicationFilterChain.doFilter
> (ApplicationFilterChain.java:166)
> at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter
> (FilterChainProxy.java:320)
> at
> org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke
> (FilterSecurityInterceptor.java:115)
> at
> org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter
> (FilterSecurityInterceptor.java:90)
> at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter
> (FilterChainProxy.java:334)
> at
> org.springframework.security.web.access.ExceptionTranslationFilter.doFilter
> (ExceptionTranslationFilter.java:118)
> at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter
> (FilterChainProxy.java:334)
> at
> org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter
> (AnonymousAuthenticationFilter.java:111)
> at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter
> (FilterChainProxy.java:334)
> at
> org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter
> (SecurityContextHolderAwareRequestFilter.java:158)
> at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter
> (FilterChainProxy.java:334)
> at
> org.apache.fineract.infrastructure.security.filter.InsecureTwoFactorAuthenticationFilter.doFilter
> (InsecureTwoFactorAuthenticationFilter.java:78)
> at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter
> (FilterChainProxy.java:334)
> at org.springframework.web.filter.OncePerRequestFilter.doFilter
> (OncePerRequestFilter.java:113)
> at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter
> (FilterChainProxy.java:334)
> at org.springframework.web.filter.OncePerRequestFilter.doFilter
> (OncePerRequestFilter.java:113)
> at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter
> (FilterChainProxy.java:334)
> at org.springframework.web.filter.OncePerRequestFilter.doFilter
> (OncePerRequestFilter.java:113)
> at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter
> (FilterChainProxy.java:334)
> at
> org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter
> (SecurityContextPersistenceFilter.java:82)
> at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter
> (FilterChainProxy.java:334)
> at
> org.springframework.security.web.access.channel.ChannelProcessingFilter.doFilter
> (ChannelProcessingFilter.java:157)
> at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter
> (FilterChainProxy.java:334)
> at org.springframework.security.web.FilterChainProxy.doFilterInternal
> (FilterChainProxy.java:215)
> at org.springframework.security.web.FilterChainProxy.doFilter
> (FilterChainProxy.java:186)
> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
> (ApplicationFilterChain.java:193)
> at org.apache.catalina.core.ApplicationFilterChain.doFilter
> (ApplicationFilterChain.java:166)
> at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter
> (FilterChainProxy.java:320)
> at
> org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke
> (FilterSecurityInterceptor.java:126)
> at
> org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter
> (FilterSecurityInterceptor.java:90)
> at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter
> (FilterChainProxy.java:334)
> at
> org.springframework.security.web.access.ExceptionTranslationFilter.doFilter
> (ExceptionTranslationFilter.java:118)
> at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter
> (FilterChainProxy.java:334)
> at
> org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter
> (AnonymousAuthenticationFilter.java:111)
> at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter
> (FilterChainProxy.java:334)
> at
> org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter
> (SecurityContextHolderAwareRequestFilter.java:158)
> at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter
> (FilterChainProxy.java:334)
> at
> org.apache.fineract.infrastructure.security.filter.InsecureTwoFactorAuthenticationFilter.doFilter
> (InsecureTwoFactorAuthenticationFilter.java:78)
> at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter
> (FilterChainProxy.java:334)
> at
> org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter
> (HeaderWriterFilter.java:92)
> at
> org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal
> (HeaderWriterFilter.java:77)
> at org.springframework.web.filter.OncePerRequestFilter.doFilter
> (OncePerRequestFilter.java:119)
> at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter
> (FilterChainProxy.java:334)
> at
> org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal
> (WebAsyncManagerIntegrationFilter.java:56)
> at org.springframework.web.filter.OncePerRequestFilter.doFilter
> (OncePerRequestFilter.java:119)
> at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter
> (FilterChainProxy.java:334)
> at
> org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilterInternal
> (BasicAuthenticationFilter.java:204)
> at
> org.apache.fineract.infrastructure.security.filter.TenantAwareBasicAuthenticationFilter.doFilterInternal
> (TenantAwareBasicAuthenticationFilter.java:145)
> at org.springframework.web.filter.OncePerRequestFilter.doFilter
> (OncePerRequestFilter.java:119)
> at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter
> (FilterChainProxy.java:334)
> at
> org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter
> (SecurityContextPersistenceFilter.java:105)
> at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter
> (FilterChainProxy.java:334)
> at
> org.springframework.security.web.access.channel.ChannelProcessingFilter.doFilter
> (ChannelProcessingFilter.java:157)
> at
> org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter
> (FilterChainProxy.java:334)
> at org.springframework.security.web.FilterChainProxy.doFilterInternal
> (FilterChainProxy.java:215)
> at org.springframework.security.web.FilterChainProxy.doFilter
> (FilterChainProxy.java:178)
> at
> org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate
> (DelegatingFilterProxy.java:358)
> at org.springframework.web.filter.DelegatingFilterProxy.doFilter
> (DelegatingFilterProxy.java:271)
> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
> (ApplicationFilterChain.java:193)
> at org.apache.catalina.core.ApplicationFilterChain.doFilter
> (ApplicationFilterChain.java:166)
> at
> org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal
> (WebMvcMetricsFilter.java:109)
> at org.springframework.web.filter.OncePerRequestFilter.doFilter
> (OncePerRequestFilter.java:119)
> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
> (ApplicationFilterChain.java:193)
> at org.apache.catalina.core.ApplicationFilterChain.doFilter
> (ApplicationFilterChain.java:166)
> at
> org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal
> (CharacterEncodingFilter.java:201)
> at org.springframework.web.filter.OncePerRequestFilter.doFilter
> (OncePerRequestFilter.java:119)
> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
> (ApplicationFilterChain.java:193)
> at org.apache.catalina.core.ApplicationFilterChain.doFilter
> (ApplicationFilterChain.java:166)
> at
> org.springframework.web.filter.ForwardedHeaderFilter.doFilterInternal
> (ForwardedHeaderFilter.java:158)
> at org.springframework.web.filter.OncePerRequestFilter.doFilter
> (OncePerRequestFilter.java:119)
> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
> (ApplicationFilterChain.java:193)
> at org.apache.catalina.core.ApplicationFilterChain.doFilter
> (ApplicationFilterChain.java:166)
> at org.apache.catalina.core.StandardWrapperValve.invoke
> (StandardWrapperValve.java:202)
> at org.apache.catalina.core.StandardContextValve.invoke
> (StandardContextValve.java:96)
> at org.apache.catalina.authenticator.AuthenticatorBase.invoke
> (AuthenticatorBase.java:541)
> at org.apache.catalina.core.StandardHostValve.invoke
> (StandardHostValve.java:139)
> at org.apache.catalina.valves.ErrorReportValve.invoke
> (ErrorReportValve.java:92)
> at org.apache.catalina.core.StandardEngineValve.invoke
> (StandardEngineValve.java:74)
> at org.apache.catalina.connector.CoyoteAdapter.service
> (CoyoteAdapter.java:343)
> at org.apache.coyote.http11.Http11Processor.service
> (Http11Processor.java:373)
> at org.apache.coyote.AbstractProcessorLight.process
> (AbstractProcessorLight.java:65)
> at org.apache.coyote.AbstractProtocol$ConnectionHandler.process
> (AbstractProtocol.java:868)
> at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun
> (NioEndpoint.java:1590)
> at org.apache.tomcat.util.net.SocketProcessorBase.run
> (SocketProcessorBase.java:49)
> at java.util.concurrent.ThreadPoolExecutor.runWorker
> (ThreadPoolExecutor.java:1128)
> at java.util.concurrent.ThreadPoolExecutor$Worker.run
> (ThreadPoolExecutor.java:628)
> at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run
> (TaskThread.java:61)
> at java.lang.Thread.run (Thread.java:834){noformat}
> The stack trace doesn't make it super clear exactly where in Fineract this is
> coming from...
> If I had to guess, it would be that we have a (or several?) REST Resource
> classes that accept a POST file upload ("multi-part" ?) and attempts to write
> it into a directory which... perhaps does not exist? Something somewhere
> should have created the missing parent directories?
--
This message was sent by Atlassian Jira
(v8.3.4#803005)