[AAA-177] Suspected transaction leak in MDSALDynamicAuthorizationFilter Created: 25/Jul/18  Updated: 25/Jul/18  Resolved: 25/Jul/18

Status: Resolved
Project: aaa
Component/s: None
Affects Version/s: Oxygen
Fix Version/s: None

Type: Bug Priority: Medium
Reporter: Michael Vorburger Assignee: Ryan Goulding
Resolution: Won't Do Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Issue Links:
Blocks
blocks NETVIRT-1384 Umbrella: Numerous new transaction leaks Resolved

 Description   

NETVIRT-1384 attachements shows this suspected transaction leak in aaa:

default: TracingBroker found some not yet (or never..) closed transaction[chain]s!
[NB: If no stack traces are shown below, then enable transaction-debug-context-enabled in mdsaltrace_config.xml]

  DataBroker : newReadOnlyTransaction()
    190x transactions opened here, which are not closed:
      (...)
      org.opendaylight.controller.md.sal.binding.impl.BindingDOMDataBrokerAdapter.newReadOnlyTransaction(BindingDOMDataBrokerAdapter.java:59)
      (...)
      org.opendaylight.aaa.shiro.realm.MDSALDynamicAuthorizationFilter.getHttpAuthzContainer(MDSALDynamicAuthorizationFilter.java:50)
      org.opendaylight.aaa.shiro.realm.MDSALDynamicAuthorizationFilter.isAccessAllowed(MDSALDynamicAuthorizationFilter.java:84)
      org.opendaylight.aaa.shiro.realm.MDSALDynamicAuthorizationFilter.isAccessAllowed(MDSALDynamicAuthorizationFilter.java:61)
      org.apache.shiro.web.filter.AccessControlFilter.onPreHandle(AccessControlFilter.java:162)
      org.apache.shiro.web.filter.PathMatchingFilter.isFilterChainContinued(PathMatchingFilter.java:203)
      org.apache.shiro.web.filter.PathMatchingFilter.preHandle(PathMatchingFilter.java:178)
      org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:131)
      org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
      org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
      org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
      org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
      org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
      org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
      org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449)
      org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)
      org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
      org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
      org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383)
      org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)
      org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
      org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1751)
      org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:582)
      org.ops4j.pax.web.service.jetty.internal.HttpServiceServletHandler.doHandle(HttpServiceServletHandler.java:71)
      org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
      org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548)
      org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226)
      org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1180)
      org.ops4j.pax.web.service.jetty.internal.HttpServiceContext.doHandle(HttpServiceContext.java:284)
      org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:512)
      org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
      org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1112)
      org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
      org.ops4j.pax.web.service.jetty.internal.JettyServerHandlerCollection.handle(JettyServerHandlerCollection.java:80)
      org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134)
      org.eclipse.jetty.server.Server.handle(Server.java:534)
      org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:333)
      org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:251)
      org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:283)
      org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:108)
      org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:93)
      org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.executeProduceConsume(ExecuteProduceConsume.java:303)
      org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceConsume(ExecuteProduceConsume.java:148)
      org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:136)
      org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:671)
      org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:589)
      java.lang.Thread.run(Thread.java:748)


 Comments   
Comment by Michael Vorburger [ 25/Jul/18 ]

The code path shown above is no longer present and has changed following these changes:

Comment by Michael Vorburger [ 25/Jul/18 ]

But both the old and the new code already (correctly) do it like this:

try (ReadOnlyTransaction tx = dataBroker.newReadOnlyTransaction())

so this is not a leak, but a false positive - it looks like in that scale test there really were x190 open TX stuck there. That seems curious - but not a TX leak; so closing this issue as a WONTFIX.

Generated at Wed Feb 07 19:08:50 UTC 2024 using Jira 8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d.