User Attribute related query in Assets may cause high CPU usage and the objectType becomes inaccessible

XMLWordPrintable

    • 3
    • Severity 3 - Minor
    • 41

      Issue Summary

      Wrong AQL/IQL is causing a high CPU on the Jira server. Due to the limitation that the query would be sticky to the user session, it requires browser cache clearing to access that object type https://jira.atlassian.com/browse/JSDSERVER-14795 again. Also, multiple such threads would get created on the server side when the user tries again. 

      This is reproducible on Data Center: (yes)

      Steps to Reproduce

      1. We are unable to replicate the issue in-house however customer is consistently able to replicate the issue.

      Expected Results

      Wrong IQL/AQL should not cause CPU spike and the user should be able to access the object type.

      Actual Results

      The wrong IQL/AQL is causing CPU spike and the user is not able to access the object type thereafter.

      • Problematic thread stack
        • "http-nio-18080-exec-7 url: /rest/insight/1.0/objectattributefilter/filterlist; user: <user>" #54 daemon prio=5 os_prio=0 cpu=427542.76ms elapsed=245419.88s tid=0x00007f790e884800 nid=0x160cd3 runnable  [0x00007f782d3f7000]
             java.lang.Thread.State: RUNNABLE
          	at java.util.ArrayList.indexOfRange(java.base@11.0.17/ArrayList.java:330)
          	at java.util.ArrayList.indexOf(java.base@11.0.17/ArrayList.java:318)
          	at java.util.ArrayList.contains(java.base@11.0.17/ArrayList.java:307)
          	at com.riadalabs.jira.plugins.insight.services.predicate.attribute.UserPredicate.compareObjectAttributeValues(UserPredicate.java:155)
          	at com.riadalabs.jira.plugins.insight.services.predicate.attribute.AttributeValuePredicateBase.testObject(AttributeValuePredicateBase.java:171)
          	at com.riadalabs.jira.plugins.insight.services.predicate.attribute.AttributeValuePredicateBase.testObjectBean(AttributeValuePredicateBase.java:82)
          	at com.riadalabs.jira.plugins.insight.services.predicate.ObjectBeanPredicateBase.test(ObjectBeanPredicateBase.java:20)
          	at com.riadalabs.jira.plugins.insight.services.predicate.ObjectBeanPredicateBase.test(ObjectBeanPredicateBase.java:10)
          	at java.util.function.Predicate.lambda$or$2(java.base@11.0.17/Predicate.java:101)
          	at java.util.function.Predicate$$Lambda$1795/0x0000000802251c40.test(java.base@11.0.17/Unknown Source)
          	at java.util.function.Predicate.lambda$and$0(java.base@11.0.17/Predicate.java:69)
          	at java.util.function.Predicate$$Lambda$3102/0x0000000803697440.test(java.base@11.0.17/Unknown Source)
          	at com.riadalabs.jira.plugins.insight.services.predicate.ObjectTypeBucketPredicate.test(ObjectTypeBucketPredicate.java:33)
          	at com.riadalabs.jira.plugins.insight.services.predicate.ObjectTypeBucketPredicate.test(ObjectTypeBucketPredicate.java:9)
          	at com.riadalabs.jira.plugins.insight.services.core.ObjectFilterManagerImpl.filterObjectBeansInThread(ObjectFilterManagerImpl.kt:125)
          	at com.riadalabs.jira.plugins.insight.services.core.ObjectFilterManagerImpl.findObjectsBasedOnFilter(ObjectFilterManagerImpl.kt:84)
          	at com.riadalabs.jira.plugins.insight.services.core.ObjectFilterManagerImpl.findObjectsByFilter(ObjectFilterManagerImpl.kt:62)
          	at com.riadalabs.jira.plugins.insight.services.core.ObjectFilterManagerImpl.findObjectsByFilter(ObjectFilterManagerImpl.kt:53)
          	at com.riadalabs.jira.plugins.insight.services.core.iql.impl.IQLManagerImpl.findObjects(IQLManagerImpl.java:228)
          	at com.riadalabs.jira.plugins.insight.services.core.ObjectServiceImpl.findUniqueObjectAttributeValues(ObjectServiceImpl.java:2062)
          	at com.riadalabs.jira.plugins.insight.channel.web.api.rest.services.objectattribute.ObjectAttributeFilterResource.findUniqueObjectAttributeValues(ObjectAttributeFilterResource.java:82)
          	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(java.base@11.0.17/Native Method)
          	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(java.base@11.0.17/NativeMethodAccessorImpl.java:62)
          	at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(java.base@11.0.17/DelegatingMethodAccessorImpl.java:43)
          	at java.lang.reflect.Method.invoke(java.base@11.0.17/Method.java:566)
          	at com.atlassian.plugins.rest.common.interceptor.impl.DispatchProviderHelper$ResponseOutInvoker.lambda$_dispatch$0(DispatchProviderHelper.java:181)
          	at com.atlassian.plugins.rest.common.interceptor.impl.DispatchProviderHelper$ResponseOutInvoker$$Lambda$4099/0x0000000803ac3040.invoke(Unknown Source)
          	at com.atlassian.plugins.rest.common.interceptor.impl.DispatchProviderHelper.lambda$invokeMethodWithInterceptors$0(DispatchProviderHelper.java:81)
          	at com.atlassian.plugins.rest.common.interceptor.impl.DispatchProviderHelper$$Lambda$4100/0x0000000803ac3440.intercept(Unknown Source)
          	at com.atlassian.plugins.rest.common.interceptor.impl.DefaultMethodInvocation.invoke(DefaultMethodInvocation.java:53)
          	at com.atlassian.plugins.rest.common.expand.interceptor.ExpandInterceptor.intercept(ExpandInterceptor.java:42)
          	at com.atlassian.plugins.rest.common.interceptor.impl.DefaultMethodInvocation.invoke(DefaultMethodInvocation.java:53)
          	at com.atlassian.plugins.rest.common.interceptor.impl.DispatchProviderHelper.invokeMethodWithInterceptors(DispatchProviderHelper.java:106)
          	at com.atlassian.plugins.rest.common.interceptor.impl.DispatchProviderHelper$ResponseOutInvoker._dispatch(DispatchProviderHelper.java:180)
          	at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
          	at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:302)
          	at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
          	at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
          	at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
          	at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
          	at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1542)
          	at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1473)
          	at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1419)
          	at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1409)
          	at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:409)
          	at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:558)
        • "http-nio-18080-exec-11 url: /rest/insight/1.0/object/navlist/iql; user: <user>" #58 daemon prio=5 os_prio=0 cpu=174186.24ms elapsed=245419.88s tid=0x00007f790e88b800 nid=0x160cd7 runnable  [0x00007f782cff6000]
             java.lang.Thread.State: RUNNABLE
          	at java.util.ArrayList.indexOfRange(java.base@11.0.17/ArrayList.java:330)
          	at java.util.ArrayList.indexOf(java.base@11.0.17/ArrayList.java:318)
          	at java.util.ArrayList.contains(java.base@11.0.17/ArrayList.java:307)
          	at com.riadalabs.jira.plugins.insight.services.predicate.attribute.UserPredicate.compareObjectAttributeValues(UserPredicate.java:155)
          	at com.riadalabs.jira.plugins.insight.services.predicate.attribute.AttributeValuePredicateBase.testObject(AttributeValuePredicateBase.java:171)
          	at com.riadalabs.jira.plugins.insight.services.predicate.attribute.AttributeValuePredicateBase.testObjectBean(AttributeValuePredicateBase.java:82)
          	at com.riadalabs.jira.plugins.insight.services.predicate.ObjectBeanPredicateBase.test(ObjectBeanPredicateBase.java:20)
          	at com.riadalabs.jira.plugins.insight.services.predicate.ObjectBeanPredicateBase.test(ObjectBeanPredicateBase.java:10)
          	at java.util.function.Predicate.lambda$or$2(java.base@11.0.17/Predicate.java:101)
          	at java.util.function.Predicate$$Lambda$1795/0x0000000802251c40.test(java.base@11.0.17/Unknown Source)
          	at java.util.function.Predicate.lambda$and$0(java.base@11.0.17/Predicate.java:69)
          	at java.util.function.Predicate$$Lambda$3102/0x0000000803697440.test(java.base@11.0.17/Unknown Source)
          	at java.util.function.Predicate.lambda$and$0(java.base@11.0.17/Predicate.java:69)
          	at java.util.function.Predicate$$Lambda$3102/0x0000000803697440.test(java.base@11.0.17/Unknown Source)
          	at com.riadalabs.jira.plugins.insight.services.predicate.ObjectTypeBucketPredicate.test(ObjectTypeBucketPredicate.java:33)
          	at com.riadalabs.jira.plugins.insight.services.predicate.ObjectTypeBucketPredicate.test(ObjectTypeBucketPredicate.java:9)
          	at com.riadalabs.jira.plugins.insight.services.core.ObjectFilterManagerImpl.filterObjectBeansInThread(ObjectFilterManagerImpl.kt:125)
          	at com.riadalabs.jira.plugins.insight.services.core.ObjectFilterManagerImpl.findObjectsBasedOnFilter(ObjectFilterManagerImpl.kt:84)
          	at com.riadalabs.jira.plugins.insight.services.core.ObjectFilterManagerImpl.findObjectsByFilter(ObjectFilterManagerImpl.kt:62)
          	at com.riadalabs.jira.plugins.insight.services.core.ObjectFilterManagerImpl.findObjectsByFilter(ObjectFilterManagerImpl.kt:53)
          	at com.riadalabs.jira.plugins.insight.services.core.iql.impl.IQLManagerImpl.findObjects(IQLManagerImpl.java:228)
          	at com.riadalabs.jira.plugins.insight.services.core.ObjectServiceImpl.loadObjectResultWithoutPermissionCheckOnAttributes(ObjectServiceImpl.java:1060)
          	at com.riadalabs.jira.plugins.insight.services.core.ObjectServiceImpl.loadObjectResult(ObjectServiceImpl.java:1046)
          	at com.riadalabs.jira.plugins.insight.channel.web.api.rest.services.object.ObjectResource.findObjectsByIQL(ObjectResource.java:621)
          	at com.riadalabs.jira.plugins.insight.channel.web.api.rest.services.object.ObjectResource.findObject(ObjectResource.java:563)
          	at com.riadalabs.jira.plugins.insight.channel.web.api.rest.services.object.ObjectResource.findObjectIql(ObjectResource.java:556)
          	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(java.base@11.0.17/Native Method)
          	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(java.base@11.0.17/NativeMethodAccessorImpl.java:62)
          	at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(java.base@11.0.17/DelegatingMethodAccessorImpl.java:43)
          	at java.lang.reflect.Method.invoke(java.base@11.0.17/Method.java:566)
          	at com.atlassian.plugins.rest.common.interceptor.impl.DispatchProviderHelper$ResponseOutInvoker.lambda$_dispatch$0(DispatchProviderHelper.java:181)
          	at com.atlassian.plugins.rest.common.interceptor.impl.DispatchProviderHelper$ResponseOutInvoker$$Lambda$4099/0x0000000803ac3040.invoke(Unknown Source)
          	at com.atlassian.plugins.rest.common.interceptor.impl.DispatchProviderHelper.lambda$invokeMethodWithInterceptors$0(DispatchProviderHelper.java:81)
          	at com.atlassian.plugins.rest.common.interceptor.impl.DispatchProviderHelper$$Lambda$4100/0x0000000803ac3440.intercept(Unknown Source)
          	at com.atlassian.plugins.rest.common.interceptor.impl.DefaultMethodInvocation.invoke(DefaultMethodInvocation.java:53)
          	at com.atlassian.plugins.rest.common.expand.interceptor.ExpandInterceptor.intercept(ExpandInterceptor.java:42)
          	at com.atlassian.plugins.rest.common.interceptor.impl.DefaultMethodInvocation.invoke(DefaultMethodInvocation.java:53)
          	at com.atlassian.plugins.rest.common.interceptor.impl.DispatchProviderHelper.invokeMethodWithInterceptors(DispatchProviderHelper.java:106)
          	at com.atlassian.plugins.rest.common.interceptor.impl.DispatchProviderHelper$ResponseOutInvoker._dispatch(DispatchProviderHelper.java:180)
          	at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
          	at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:302)
          	at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
          	at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
          	at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
          	at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
          	at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1542)
          	at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1473)
          	at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1419)
          	at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1409)
          	at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:409)
          	at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:558)

          Workaround

      Currently, there is no known workaround for this behavior. A workaround will be added here when available

              Assignee:
              Benjamin Suess
              Reporter:
              Nikhil Janardhanan
              Votes:
              1 Vote for this issue
              Watchers:
              8 Start watching this issue

                Created:
                Updated:
                Resolved: