You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@fineract.apache.org by "Petri Tuomola (Jira)" <ji...@apache.org> on 2020/07/18 06:00:00 UTC

[jira] [Commented] (FINERACT-1037) FileNotFoundException: /home/tomcat/.fineract/DefaultDemoTenant/documents/CLIENTS_PERSON/null/sf5694ypszb/something.xls

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