jgraph / docker-drawio

Dockerized draw.io based on whichever is the most secure image at the time.
GNU General Public License v3.0
1.49k stars 361 forks source link

Memcache not working with DRAWIO_MEMCACHED_ENDPOINT #79

Closed gek0 closed 2 years ago

gek0 commented 2 years ago

Setting the DRAWIO_MEMCACHED_ENDPOINT variable, in my case AWS Elasticache Memcached cluster (connectivity is fine) returns 500 internal server error when trying to authorize Google Drive storage

Following the instructions from here https://github.com/jgraph/docker-drawio/tree/dev/self-contained#amazon-elasticache Service is deployed in AWS EKS Using the latest docker version 18.0.8


<1>HTTP Status 500 – Internal Server Error</h1><hr class="line" /><p><b>Type</b> Exception Report</p><p><b>Message</b> Error instantiating servlet class [com.mxgraph.online.GoogleAuthServlet]</p><p><b>Description</b> The server encountered an unexpected condition that prevented it from fulfilling the request.</p><p><b>Exception</b></p><pre>javax.servlet.ServletException: Error instantiating servlet class [com.mxgraph.online.GoogleAuthServlet]
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360)
    org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)
    org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
    org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:890)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1743)
    org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
    org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    java.base&#47;java.lang.Thread.run(Unknown Source)

</pre><p><b>Root Cause</b></p><pre>java.lang.NoClassDefFoundError: org&#47;memcached&#47;jcache&#47;MemcachedCachingProvider
    com.mxgraph.online.CacheFacade.createCache(CacheFacade.java:34)
    com.mxgraph.online.CacheFacade.createCache(CacheFacade.java:23)
    com.mxgraph.online.AbsAuthServlet.&lt;clinit&gt;(Unknown Source)
    java.base&#47;jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    java.base&#47;jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    java.base&#47;jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    java.base&#47;java.lang.reflect.Constructor.newInstance(Unknown Source)
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360)
    org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)
    org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
    org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:890)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1743)
    org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
    org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    java.base&#47;java.lang.Thread.run(Unknown Source)

</pre><p><b>Root Cause</b></p><pre>java.lang.ClassNotFoundException: org.memcached.jcache.MemcachedCachingProvider
    org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1412)
    org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1220)
    com.mxgraph.online.CacheFacade.createCache(CacheFacade.java:34)
    com.mxgraph.online.CacheFacade.createCache(CacheFacade.java:23)
    com.mxgraph.online.AbsAuthServlet.&lt;clinit&gt;(Unknown Source)
    java.base&#47;jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    java.base&#47;jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    java.base&#47;jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    java.base&#47;java.lang.reflect.Constructor.newInstance(Unknown Source)
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360)
    org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)
    org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
    org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:890)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1743)
    org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
    org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    java.base&#47;java.lang.Thread.run(Unknown Source)
</pre><p><b>Note</b> The full stack trace of the root cause is available in the server logs.</p><hr class="line" /><h3>Apache Tomcat/9.0.63</h3>```
davidjgraph commented 2 years ago

Any better in 18.1.1?

gek0 commented 2 years ago

No still, hitting the same error. By the looks of it, Tomcat in this image is not built with Memcached support (no .jar files found either)

m-mohamedin commented 2 years ago

Unfortunately, this branch is cancelled. There was one experimental image here (https://hub.docker.com/r/jgraph/drawio-expr) as I remember but it is 2 years old. Sorry for the misleading documentation.

Note: Google Drive integration works without Memcached. But, without real-time collaboration

gek0 commented 2 years ago

Go it. Thanks for the explanation. Yes, got the Google Drive integration working via another issue. Looks like it was only triggering the Memcached issue to be spotted earlier. And no point in using the older discontinued image with possible security issues. We'll stay with the single instance then, you can close this one :+1: