Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Shinyproxy throwing exception on shutdown when running on Kubernetes #320

Closed
nitnagpal opened this issue Sep 9, 2021 · 1 comment
Closed
Labels

Comments

@nitnagpal
Copy link

nitnagpal commented Sep 9, 2021

Shinyproxy running on Kubernetes with persistent storage configured using redis is throwing exception during shutdown and not cleaning up running pods leaving behind orphaned pods.

Shinyproxy version 2.4.0/2.4.1
Kubernetes version 1.20

The exception its throwing is below:

2021-09-09 11:50:35.808 DEBUG 1 --- [extShutdownHook] io.lettuce.core.RedisClient              : Initiate shutdown (100, 100, MILLISECONDS)
2021-09-09 11:50:35.827 DEBUG 1 --- [extShutdownHook] i.l.c.r.DefaultEventLoopGroupProvider    : Release executor io.netty.channel.nio.NioEventLoopGroup@723819f1
2021-09-09 11:50:35.829 DEBUG 1 --- [ioEventLoop-4-2] io.netty.buffer.PoolThreadCache          : Freed 7 thread-local buffer(s) from thread: lettuce-nioEventLoop-4-2
2021-09-09 11:50:35.928 DEBUG 1 --- [ioEventLoop-4-1] io.netty.buffer.PoolThreadCache          : Freed 26 thread-local buffer(s) from thread: lettuce-nioEventLoop-4-1
2021-09-09 11:50:35.931 DEBUG 1 --- [extShutdownHook] i.l.c.resource.DefaultClientResources    : Initiate shutdown (0, 2, SECONDS)
2021-09-09 11:50:35.935 DEBUG 1 --- [extShutdownHook] i.l.c.r.DefaultEventLoopGroupProvider    : Initiate shutdown (0, 2, SECONDS)
2021-09-09 11:50:35.949  WARN 1 --- [extShutdownHook] .s.c.a.CommonAnnotationBeanPostProcessor : Destroy method on bean with name 'proxyService' threw an exception

java.lang.NullPointerException: null
	at io.undertow.servlet.spec.ServletContextImpl.getInitParameter(ServletContextImpl.java:425) ~[undertow-servlet-2.1.3.Final.jar!/:2.1.3.Final]
	at org.springframework.web.context.support.ServletContextPropertySource.getProperty(ServletContextPropertySource.java:47) ~[spring-web-5.2.8.RELEASE.jar!/:5.2.8.RELEASE]
	at org.springframework.web.context.support.ServletContextPropertySource.getProperty(ServletContextPropertySource.java:33) ~[spring-web-5.2.8.RELEASE.jar!/:5.2.8.RELEASE]
	at org.springframework.core.env.PropertySourcesPropertyResolver.getProperty(PropertySourcesPropertyResolver.java:85) ~[spring-core-5.2.8.RELEASE.jar!/:5.2.8.RELEASE]
	at org.springframework.core.env.PropertySourcesPropertyResolver.getProperty(PropertySourcesPropertyResolver.java:62) ~[spring-core-5.2.8.RELEASE.jar!/:5.2.8.RELEASE]
	at org.springframework.core.env.AbstractEnvironment.getProperty(AbstractEnvironment.java:535) ~[spring-core-5.2.8.RELEASE.jar!/:5.2.8.RELEASE]
	at eu.openanalytics.containerproxy.service.UserService.getAdminGroups(UserService.java:84) ~[containerproxy-0.8.5.jar!/:0.8.5]
	at eu.openanalytics.containerproxy.service.UserService.isAdmin(UserService.java:117) ~[containerproxy-0.8.5.jar!/:0.8.5]
	at eu.openanalytics.containerproxy.service.UserService.isAdmin(UserService.java:113) ~[containerproxy-0.8.5.jar!/:0.8.5]
	at eu.openanalytics.containerproxy.service.ProxyService.getProxies(ProxyService.java:182) ~[containerproxy-0.8.5.jar!/:0.8.5]
	at eu.openanalytics.containerproxy.service.ProxyService.shutdown(ProxyService.java:99) ~[containerproxy-0.8.5.jar!/:0.8.5]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
	at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:389) ~[spring-beans-5.2.8.RELEASE.jar!/:5.2.8.RELEASE]
	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeDestroyMethods(InitDestroyAnnotationBeanPostProcessor.java:347) ~[spring-beans-5.2.8.RELEASE.jar!/:5.2.8.RELEASE]
	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeDestruction(InitDestroyAnnotationBeanPostProcessor.java:177) ~[spring-beans-5.2.8.RELEASE.jar!/:5.2.8.RELEASE]
	at org.springframework.beans.factory.support.DisposableBeanAdapter.destroy(DisposableBeanAdapter.java:242) ~[spring-beans-5.2.8.RELEASE.jar!/:5.2.8.RELEASE]
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroyBean(DefaultSingletonBeanRegistry.java:579) ~[spring-beans-5.2.8.RELEASE.jar!/:5.2.8.RELEASE]
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingleton(DefaultSingletonBeanRegistry.java:551) ~[spring-beans-5.2.8.RELEASE.jar!/:5.2.8.RELEASE]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.destroySingleton(DefaultListableBeanFactory.java:1092) ~[spring-beans-5.2.8.RELEASE.jar!/:5.2.8.RELEASE]
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingletons(DefaultSingletonBeanRegistry.java:512) ~[spring-beans-5.2.8.RELEASE.jar!/:5.2.8.RELEASE]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.destroySingletons(DefaultListableBeanFactory.java:1085) ~[spring-beans-5.2.8.RELEASE.jar!/:5.2.8.RELEASE]
	at org.springframework.context.support.AbstractApplicationContext.destroyBeans(AbstractApplicationContext.java:1061) ~[spring-context-5.2.8.RELEASE.jar!/:5.2.8.RELEASE]
	at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:1030) ~[spring-context-5.2.8.RELEASE.jar!/:5.2.8.RELEASE]
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.doClose(ServletWebServerApplicationContext.java:170) ~[spring-boot-2.3.3.RELEASE.jar!/:2.3.3.RELEASE]
	at org.springframework.context.support.AbstractApplicationContext$1.run(AbstractApplicationContext.java:949) ~[spring-context-5.2.8.RELEASE.jar!/:5.2.8.RELEASE]

Expected behaviour should be it shutdowns all the pods started by it or shinyproxy should also store the proxy information in redis with session so that new shinyproxy pod can route traffic to already running pod instead of starting a new proxy and pod.

@LEDfan
Copy link
Member

LEDfan commented Sep 13, 2021

Hi, this issue is fixed in ShinyProxy 2.4.3. Please try that version or 2.5.0

@LEDfan LEDfan closed this as completed Mar 2, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants