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.

  1. 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.

  2. Create new configuration for new server with assets and temp filesystem

  3. 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(ManagedInterrupt
CODE

The 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'
CODE

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.
CODE

Only the 'temp' filesystem is possible here. The system in server.xml is not correctly named temp, but for example tmp.