Skip to content

Spanner, LeakedSessionException is being created in every query in com.google.cloud:spring-cloud-gcp-starter-data-spanner:6.25.5 version #2266

@sravan-00

Description

@sravan-00

Environment details

  1. API: Spanner
  2. OS type and version:
  3. Java version: 11
  4. version(s): com.google.cloud:spring-cloud-gcp-starter-data-spanner:6.25.5

Steps to reproduce

  1. Create an Spring boot application that read from spanner to Database with the dependencies in the example Repo
  2. Application created to reproduce LeakedSessionException https://github.com/sravan-00/LeakedSessionException

Code example

https://github.com/sravan-00/LeakedSessionException

Stack trace

result = {StackTraceElement[91]@12497} 
 0 = {StackTraceElement@12520} "com.google.cloud.spanner.SessionPool$PooledSessionFuture.markCheckedOut(SessionPool.java:1104)"
 1 = {StackTraceElement@12521} "com.google.cloud.spanner.SessionPool$PooledSessionFuture.access$4800(SessionPool.java:1085)"
 2 = {StackTraceElement@12522} "com.google.cloud.spanner.SessionPool.checkoutSession(SessionPool.java:2135)"
 3 = {StackTraceElement@12523} "com.google.cloud.spanner.SessionPool.getSession(SessionPool.java:2116)"
 4 = {StackTraceElement@12524} "com.google.cloud.spanner.DatabaseClientImpl.getSession(DatabaseClientImpl.java:53)"
 5 = {StackTraceElement@12525} "com.google.cloud.spanner.DatabaseClientImpl.singleUse(DatabaseClientImpl.java:106)"
 6 = {StackTraceElement@12526} "com.google.cloud.spring.data.spanner.core.SpannerTemplate.doWithOrWithoutTransactionContext(SpannerTemplate.java:724)"
 7 = {StackTraceElement@12527} "com.google.cloud.spring.data.spanner.core.SpannerTemplate.getReadContext(SpannerTemplate.java:115)"
 8 = {StackTraceElement@12528} "com.google.cloud.spring.data.spanner.core.SpannerTemplate.executeRead(SpannerTemplate.java:568)"
 9 = {StackTraceElement@12529} "com.google.cloud.spring.data.spanner.core.SpannerTemplate.read(SpannerTemplate.java:213)"
 10 = {StackTraceElement@12530} "com.google.cloud.spring.data.spanner.core.SpannerTemplate.read(SpannerTemplate.java:188)"
 11 = {StackTraceElement@12531} "com.google.cloud.spring.data.spanner.core.SpannerTemplate.read(SpannerTemplate.java:163)"
 12 = {StackTraceElement@12532} "com.google.cloud.spring.data.spanner.repository.support.SimpleSpannerRepository.findById(SimpleSpannerRepository.java:95)"
 13 = {StackTraceElement@12533} "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)"
 14 = {StackTraceElement@12534} "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)"
 15 = {StackTraceElement@12535} "java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)"
 16 = {StackTraceElement@12536} "java.base/java.lang.reflect.Method.invoke(Method.java:566)"
 17 = {StackTraceElement@12537} "org.springframework.data.repository.core.support.RepositoryMethodInvoker$RepositoryFragmentMethodInvoker.lambda$new$0(RepositoryMethodInvoker.java:289)"
 18 = {StackTraceElement@12538} "org.springframework.data.repository.core.support.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:137)"
 19 = {StackTraceElement@12539} "org.springframework.data.repository.core.support.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:121)"
 20 = {StackTraceElement@12540} "org.springframework.data.repository.core.support.RepositoryComposition$RepositoryFragments.invoke(RepositoryComposition.java:529)"
 21 = {StackTraceElement@12541} "org.springframework.data.repository.core.support.RepositoryComposition.invoke(RepositoryComposition.java:285)"
 22 = {StackTraceElement@12542} "org.springframework.data.repository.core.support.RepositoryFactorySupport$ImplementationMethodExecutionInterceptor.invoke(RepositoryFactorySupport.java:639)"
 23 = {StackTraceElement@12543} "org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)"
 24 = {StackTraceElement@12544} "org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInterceptor.java:163)"
 25 = {StackTraceElement@12545} "org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterceptor.java:138)"
 26 = {StackTraceElement@12546} "org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)"
 27 = {StackTraceElement@12547} "org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)"
 28 = {StackTraceElement@12548} "org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)"
 29 = {StackTraceElement@12549} "org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215)"
 30 = {StackTraceElement@12550} "com.sun.proxy.$Proxy126.findById(Unknown Source)"
 31 = {StackTraceElement@12551} "com.example.demo.controller.DemoController.getSingerName(DemoController.java:21)"
 32 = {StackTraceElement@12552} "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)"
 33 = {StackTraceElement@12553} "java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)"
 34 = {StackTraceElement@12554} "java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)"
 35 = {StackTraceElement@12555} "java.base/java.lang.reflect.Method.invoke(Method.java:566)"
 36 = {StackTraceElement@12556} "org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)"
 37 = {StackTraceElement@12557} "org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)"
 38 = {StackTraceElement@12558} "org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)"
 39 = {StackTraceElement@12559} "org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)"
 40 = {StackTraceElement@12560} "org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)"
 41 = {StackTraceElement@12561} "org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)"
 42 = {StackTraceElement@12562} "org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067)"
 43 = {StackTraceElement@12563} "org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)"
 44 = {StackTraceElement@12564} "org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)"
 45 = {StackTraceElement@12565} "org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)"
 46 = {StackTraceElement@12566} "javax.servlet.http.HttpServlet.service(HttpServlet.java:655)"
 47 = {StackTraceElement@12567} "org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)"
 48 = {StackTraceElement@12568} "javax.servlet.http.HttpServlet.service(HttpServlet.java:764)"
 49 = {StackTraceElement@12569} "org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)"
 50 = {StackTraceElement@12570} "org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)"
 51 = {StackTraceElement@12571} "org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)"
 52 = {StackTraceElement@12572} "org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)"
 53 = {StackTraceElement@12573} "org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)"
 54 = {StackTraceElement@12574} "org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)"
 55 = {StackTraceElement@12575} "org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)"
 56 = {StackTraceElement@12576} "org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)"
 57 = {StackTraceElement@12577} "org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)"
 58 = {StackTraceElement@12578} "org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)"
 59 = {StackTraceElement@12579} "org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)"
 60 = {StackTraceElement@12580} "org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)"
 61 = {StackTraceElement@12581} "org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)"
 62 = {StackTraceElement@12582} "org.springframework.cloud.sleuth.instrument.web.servlet.TracingFilter.doFilter(TracingFilter.java:68)"
 63 = {StackTraceElement@12583} "org.springframework.cloud.sleuth.autoconfig.instrument.web.TraceWebServletConfiguration$LazyTracingFilter.doFilter(TraceWebServletConfiguration.java:129)"
 64 = {StackTraceElement@12584} "org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)"
 65 = {StackTraceElement@12585} "org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)"
 66 = {StackTraceElement@12586} "org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96)"
 67 = {StackTraceElement@12587} "org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)"
 68 = {StackTraceElement@12588} "org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)"
 69 = {StackTraceElement@12589} "org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)"
 70 = {StackTraceElement@12590} "org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)"
 71 = {StackTraceElement@12591} "org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)"
 72 = {StackTraceElement@12592} "org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)"
 73 = {StackTraceElement@12593} "org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)"
 74 = {StackTraceElement@12594} "org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)"
 75 = {StackTraceElement@12595} "org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)"
 76 = {StackTraceElement@12596} "org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540)"
 77 = {StackTraceElement@12597} "org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)"
 78 = {StackTraceElement@12598} "org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)"
 79 = {StackTraceElement@12599} "org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)"
 80 = {StackTraceElement@12600} "org.springframework.cloud.sleuth.instrument.web.tomcat.TraceValve.invoke(TraceValve.java:74)"
 81 = {StackTraceElement@12601} "org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)"
 82 = {StackTraceElement@12602} "org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)"
 83 = {StackTraceElement@12603} "org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)"
 84 = {StackTraceElement@12604} "org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895)"
 85 = {StackTraceElement@12605} "org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1722)"
 86 = {StackTraceElement@12606} "org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)"
 87 = {StackTraceElement@12607} "org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)"
 88 = {StackTraceElement@12608} "org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)"
 89 = {StackTraceElement@12609} "org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)"
 90 = {StackTraceElement@12610} "java.base/java.lang.Thread.run(Thread.java:829)"

External references such as API reference guides

NA

Any additional information below

Even though LeakedSessionExceptionis not being thrown in execution of code but We are obsering the performance issues on queries.

Following these steps guarantees the quickest resolution possible.

Thanks!

Metadata

Metadata

Assignees

Labels

api: spannerIssues related to the googleapis/java-spanner API.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions