File system setup in clustered environments
Best practices and troubleshooting for the file system configuration in clustered censhare environments.
Configuration
Master data/File systems
- The assets and assets-temp directories (on OS level) must not be on different physical volumes 
- Due to the fact that the temporary file system must be named 'temp' it's necessary to rename the default assets-temp filesystem from 'temp' to 'assets-temp' in each installation! 
- The default is correct from 4.7.0. 
- Each server needs a temporary file system, which must be configured in Master Data/File Systems. It must be of type "Other". All servers must use this censhare filesystem. They need their own local directory. An own asset-filesystem and assets-temp filesystem for the new server is only necessary if favoured and if the remote server must have local access to an asset filesystem. 
| 
 | 
Configuration/Services/Filesystem
- In "services/filesystem" configuration, the temp filesystem must have the usage temp. 
- When you change from temp to assets-temp, always verify the customization (especially Content Export / App Export / Generic Interface) and adjust it appropriately. 
- On servers with own filesystem, make sure that a separate directory for each asset-temp - type = Temp and temp - type = Other is configured and exists in the filesystem. 
- Create new configuration for new server with assets and temp filesystem 
- Add at least one new temporary filesystem for each server configuration with the parameters usage=temp and url=file:work/temp/ 
 
Cross-mounting file systems
If you have two servers, and each has their own file system, server 1 does not need assets2 and temp2 mounted as nfs. Likewise, server 2 does not need assets 1 and temp1 as nfs.
Troubleshooting
Default work file system not properly configured
The log file shows the following error message:
2012.03.01-15:08:53.368 WARNING: T037: ImageService: server.open: Cannot determine path to temp filesystem 'temp[]' - fallback to system temp java.lang.NullPointerException at com.censhare.manager.imagemanager.ImageServiceImpl.setTmpPath(ImageServiceImpl.java:201) at com.censhare.manager.imagemanager.ImageServiceImpl.innerStart(ImageServiceImpl.java:61) at com.censhare.server.support.service.AbstractStaticService.start(AbstractStaticService.java:108) at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at com.censhare.support.service.ServiceCall$Sync.innerExecute(ServiceCall.java:387) at com.censhare.support.service.ServiceCall$Sync.innerRun(ServiceCall.java:514) at com.censhare.support.service.ServiceCall.run(ServiceCall.java:207) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662) at com.censhare.support.util.ManagedInterruptThread.run(ManagedInterruptThe error is thrown because the default work file system in Configuration/General is named temp, but was not configured in Configuration/Services/Filesystem.
Temporary filesystem usage not properly configured
The log file shows the following error message:
Caused by: com.censhare.server.rmi.RMIServerException[am.exCreatingStorageUrl]: Es kann keine Storage URL erstellt werden: ( assetID=15162, key=pdf, elementIndex=1, mimetype=application/pdf, filesystem=null, relPath=null, localFile=null) -----cause----- java.io.IOException: Can' find URL creator 'null'The error is thrown because the temporary file system in Configuration/Services/Filesystem does not have the usage=Temp attribute, but another value.
Default work file system misspelled
The log file shows the following error message:
2012.03.01-15:57:56.628 <pe> [URLStreamingServlet] WARNING: Error in servlet request: javax.servlet.ServletException: Error streaming file for: /temp at com.censhare.webclient.webserver.servlet.URLStreamingServlet.serveRequest
(URLStreamingServlet.java:119)
at com.censhare.webclient.webserver.servlet.WebAppSessionServlet.doServe
(WebAppSessionServlet.java:49) at com.censhare.webclient.webserver.servlet.WebAppSessionServlet.doGet
(WebAppSessionServlet.java:32) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707) at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:527) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1216) at com.censhare.webclient.webserver.servlet.CacheFilter.doFilter(CacheFilter.java:45) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1187) at org.eclipse.jetty.servlets.UserAgentFilter.doFilter(UserAgentFilter.java:77) at org.eclipse.jetty.servlets.GzipFilter.doFilter(GzipFilter.java:133) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1187) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:421) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:493) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:225) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:930) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:358) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:183) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:866) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117) at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:245)
 at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:126) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:113) at org.eclipse.jetty.server.Server.handle(Server.java:351) at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:594) at org.eclipse.jetty.server.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:1042) at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:549) at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:211) at org.eclipse.jetty.server.HttpConnection.handle(HttpConnection.java:424) at org.eclipse.jetty.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:506) at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:436) at java.lang.Thread.run(Thread.java:662) Caused by: java.lang.IllegalArgumentException: Only the 'temp' filesystem is possible here.Only the 'temp' filesystem is possible here. The system in server.xml is not correctly named temp, but for example tmp.
