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

Reply via email to