Uploaded image for project: 'Jira Data Center'
  1. Jira Data Center
  2. JRASERVER-68147

Search via REST API might fail due to ClassCastException

    XMLWordPrintable

Details

    • 7
    • 1
    • Severity 2 - Major
    • 1
    • Hide
      Atlassian Update – 21 December 2018

      Dear Jira users,

      We’re glad to announce that this issue will be addressed in our upcoming 8.0 release.

      You can find more details about our 8.0 beta release here — https://community.developer.atlassian.com/t/beta-for-jira-8-0-is-up-for-grabs/25588

      Looking forward to your feedback!

      Kind regards,
      Syed Masood
      Product Manager, Jira Server and Data Center

      Show
      Atlassian Update – 21 December 2018 Dear Jira users, We’re glad to announce that this issue will be addressed in our upcoming 8.0 release. You can find more details about our 8.0 beta release here — https://community.developer.atlassian.com/t/beta-for-jira-8-0-is-up-for-grabs/25588 Looking forward to your feedback! Kind regards, Syed Masood Product Manager, Jira Server and Data Center

    Description

      Problem experienced

      Search requests via API (/rest/api/2/search) can consistently fail on a DC node with a ClassCastException, under a set of very particular circumstances:

      • Jira DC,
      • full cache flush,
      • some unidentified (but very rare) condition that makes a node load wrong Spring library via OSGI.

      The error stops some caches from working and will result in an intensified number of database queries executed, possibly making the performance of an entire DC cluster a lot worse, and even making it unresponsive.

      Sample stack trace of the related error:

      2018-10-17 09:32:38,523 https-jsse-nio-8443-exec-162 ERROR admin 572x3190277x119 1rlma5r 123.123.123.123 /rest/api/2/search [c.a.c.manager.application.ApplicationServiceGeneric] com.atlassian.cache.CacheException: com.atlassian.cache.CacheException: com.atlassian.crowd.exception.DirectoryInstantiationException: java.lang.ClassCastException: org.springframework.core.convert.support.DefaultConversionService cannot be cast to org.springframework.core.convert.support.GenericConversionService
      com.atlassian.crowd.exception.DirectoryInstantiationException: com.atlassian.cache.CacheException: com.atlassian.cache.CacheException: com.atlassian.crowd.exception.DirectoryInstantiationException: java.lang.ClassCastException: org.springframework.core.convert.support.DefaultConversionService cannot be cast to org.springframework.core.convert.support.GenericConversionService
      	at com.atlassian.crowd.directory.loader.CacheableDirectoryInstanceLoader.getDirectory(CacheableDirectoryInstanceLoader.java:92)
      	at com.atlassian.crowd.manager.directory.DirectoryManagerGeneric.getDirectoryImplementation(DirectoryManagerGeneric.java:300)
      	at com.atlassian.crowd.manager.directory.DirectoryManagerGeneric.findUserByName(DirectoryManagerGeneric.java:317)
      	at com.atlassian.crowd.manager.application.ApplicationServiceGeneric.findUserByName(ApplicationServiceGeneric.java:362)
      	at com.atlassian.crowd.embedded.core.CrowdServiceImpl.getUser(CrowdServiceImpl.java:100)
      	at com.atlassian.jira.user.util.DefaultUserManager.getCrowdUser(DefaultUserManager.java:210)
      	at com.atlassian.jira.user.util.DefaultUserManager.toApplicationUser(DefaultUserManager.java:296)
      	at java.util.Optional.flatMap(Optional.java:241)
      	at com.atlassian.jira.user.util.DefaultUserManager.getUserByKey(DefaultUserManager.java:253)
      	at com.atlassian.jira.issue.statistics.UserStatisticsMapper$UserManagerResolver.apply(UserStatisticsMapper.java:147)
      	at com.atlassian.jira.issue.statistics.UserStatisticsMapper$UserManagerResolver.apply(UserStatisticsMapper.java:131)
      	at com.atlassian.jira.issue.statistics.UserStatisticsMapper.getValueFromLuceneField(UserStatisticsMapper.java:53)
      	at com.atlassian.jira.issue.statistics.UserStatisticsMapper.getValueFromLuceneField(UserStatisticsMapper.java:26)
      	at com.atlassian.jira.issue.DocumentIssueImpl.getSingleValueFromField(DocumentIssueImpl.java:84)
      	at com.atlassian.jira.issue.DocumentIssueImpl.getReporter(DocumentIssueImpl.java:193)
      	at com.atlassian.jira.issue.fields.ReporterSystemField.getJsonFromIssue(ReporterSystemField.java:345)
      	at com.atlassian.jira.rest.v2.issue.IssueBeanBuilder2.getRepresentationForFields(IssueBeanBuilder2.java:249)
      	at com.atlassian.jira.rest.v2.issue.IssueBeanBuilder2.access$400(IssueBeanBuilder2.java:67)
      	at com.atlassian.jira.rest.v2.issue.IssueBeanBuilder2$8.apply(IssueBeanBuilder2.java:235)
      	at com.atlassian.jira.rest.v2.issue.IssueBeanBuilder2$8.apply(IssueBeanBuilder2.java:230)
      	at com.atlassian.fugue.Iterables$CollectingIterable$Iter.computeNext(Iterables.java:713)
      	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
      	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
      	at com.google.common.collect.TransformedIterator.hasNext(TransformedIterator.java:43)
      	at com.google.common.collect.Iterators.addAll(Iterators.java:361)
      	at com.google.common.collect.Sets.newHashSet(Sets.java:238)
      	at com.google.common.collect.Sets.newHashSet(Sets.java:218)
      	at com.atlassian.jira.rest.v2.issue.IssueBeanBuilder2.createFieldsData(IssueBeanBuilder2.java:204)
      	at com.atlassian.jira.rest.v2.issue.IssueBeanBuilder2.build(IssueBeanBuilder2.java:149)
      	at com.atlassian.jira.rest.v2.search.SearchResource$IssueToIssueBean.apply(SearchResource.java:291)
      	at com.atlassian.jira.rest.v2.search.SearchResource$IssueToIssueBean.apply(SearchResource.java:275)
      	at com.google.common.collect.Lists$TransformingRandomAccessList$1.transform(Lists.java:617)
      	at com.google.common.collect.TransformedIterator.next(TransformedIterator.java:48)
      	at java.util.AbstractCollection.toArray(AbstractCollection.java:141)
      	at java.util.ArrayList.<init>(ArrayList.java:177)
      	at com.google.common.collect.Lists.newArrayList(Lists.java:144)
      	at com.atlassian.jira.rest.v2.search.SearchResource.asResultsBean(SearchResource.java:217)
      	at com.atlassian.jira.rest.v2.search.SearchResource.search(SearchResource.java:179)
      	... 2 filtered
      	at java.lang.reflect.Method.invoke(Method.java:498)
      	... 5 filtered
      	at com.atlassian.jira.rest.exception.ExceptionInterceptor.intercept(ExceptionInterceptor.java:55)
      	... 1 filtered
      	at com.atlassian.jira.rest.v2.issue.scope.RequestScopeInterceptor.intercept(RequestScopeInterceptor.java:39)
      	... 14 filtered
      	at com.atlassian.plugins.rest.module.RestDelegatingServletFilter$JerseyOsgiServletContainer.doFilter(RestDelegatingServletFilter.java:154)
      	... 1 filtered
      	at com.atlassian.plugins.rest.module.RestDelegatingServletFilter.doFilter(RestDelegatingServletFilter.java:68)
      	... 41 filtered
      	at com.atlassian.web.servlet.plugin.request.RedirectInterceptingFilter.doFilter(RedirectInterceptingFilter.java:21)
      	... 53 filtered
      	at com.atlassian.jira.security.JiraSecurityFilter.lambda$doFilter$0(JiraSecurityFilter.java:66)
      	... 1 filtered
      	at com.atlassian.jira.security.JiraSecurityFilter.doFilter(JiraSecurityFilter.java:64)
      	... 16 filtered
      	at com.atlassian.plugins.rest.module.servlet.RestSeraphFilter.doFilter(RestSeraphFilter.java:37)
      	... 19 filtered
      	at com.atlassian.jira.servermetrics.CorrelationIdPopulatorFilter.doFilter(CorrelationIdPopulatorFilter.java:30)
      	... 5 filtered
      	at com.valiantys.jira.plugins.sql.service.servicedesk.ContextListenerServletFilter.doFilter(ContextListenerServletFilter.java:24)
      	... 8 filtered
      	at com.atlassian.web.servlet.plugin.request.RedirectInterceptingFilter.doFilter(RedirectInterceptingFilter.java:21)
      	... 4 filtered
      	at com.atlassian.web.servlet.plugin.LocationCleanerFilter.doFilter(LocationCleanerFilter.java:36)
      	... 26 filtered
      	at com.atlassian.jira.servermetrics.MetricsCollectorFilter.doFilter(MetricsCollectorFilter.java:25)
      	... 23 filtered
      	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
      	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
      	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
      	at java.lang.Thread.run(Thread.java:745)
      Caused by: com.atlassian.cache.CacheException: com.atlassian.cache.CacheException: com.atlassian.crowd.exception.DirectoryInstantiationException: java.lang.ClassCastException: org.springframework.core.convert.support.DefaultConversionService cannot be cast to org.springframework.core.convert.support.GenericConversionService
      	at com.atlassian.cache.ehcache.DelegatingCache.get(DelegatingCache.java:133)
      	at com.atlassian.jira.cache.DeferredReplicationCache.get(DeferredReplicationCache.java:54)
      	at com.atlassian.crowd.directory.loader.CacheableDirectoryInstanceLoader.getDirectory(CacheableDirectoryInstanceLoader.java:73)
      	... 274 more
      Caused by: com.atlassian.cache.CacheException: com.atlassian.crowd.exception.DirectoryInstantiationException: java.lang.ClassCastException: org.springframework.core.convert.support.DefaultConversionService cannot be cast to org.springframework.core.convert.support.GenericConversionService
      	at com.atlassian.crowd.directory.loader.CacheableDirectoryInstanceLoader$1.get(CacheableDirectoryInstanceLoader.java:74)
      	at com.atlassian.cache.ehcache.ReferenceCacheLoader.load(ReferenceCacheLoader.java:31)
      	at com.atlassian.cache.ehcache.wrapper.ValueProcessorEhcacheLoaderDecorator.load(ValueProcessorEhcacheLoaderDecorator.java:30)
      	at net.sf.ehcache.Cache.loadValueUsingLoader(Cache.java:3373)
      	at net.sf.ehcache.Cache.getWithLoader(Cache.java:1859)
      	at com.atlassian.cache.ehcache.DelegatingCache.get(DelegatingCache.java:128)
      	... 276 more
      Caused by: com.atlassian.crowd.exception.DirectoryInstantiationException: java.lang.ClassCastException: org.springframework.core.convert.support.DefaultConversionService cannot be cast to org.springframework.core.convert.support.GenericConversionService
      	at com.atlassian.crowd.directory.loader.RemoteDirectoryInstanceFactoryUtil.newRemoteDirectory(RemoteDirectoryInstanceFactoryUtil.java:52)
      	at com.atlassian.crowd.directory.loader.RemoteDirectoryInstanceFactoryUtil.newRemoteDirectory(RemoteDirectoryInstanceFactoryUtil.java:69)
      	at com.atlassian.crowd.directory.loader.LDAPDirectoryInstanceLoaderImpl.getRawDirectory(LDAPDirectoryInstanceLoaderImpl.java:33)
      	at com.atlassian.crowd.directory.loader.DelegatingDirectoryInstanceLoaderImpl.getRawDirectory(DelegatingDirectoryInstanceLoaderImpl.java:86)
      	at com.atlassian.crowd.directory.loader.DbCachingRemoteDirectoryInstanceLoader.getRawDirectory(DbCachingRemoteDirectoryInstanceLoader.java:152)
      	at com.atlassian.crowd.directory.loader.DelegatingDirectoryInstanceLoaderImpl.getDirectory(DelegatingDirectoryInstanceLoaderImpl.java:73)
      	at com.atlassian.crowd.directory.loader.CacheableDirectoryInstanceLoader$1.get(CacheableDirectoryInstanceLoader.java:80)
      	... 282 more
      Caused by: java.lang.ClassCastException: org.springframework.core.convert.support.DefaultConversionService cannot be cast to org.springframework.core.convert.support.GenericConversionService
      	at org.springframework.ldap.odm.typeconversion.impl.ConversionServiceConverterManager.<init>(ConversionServiceConverterManager.java:45)
      	at org.springframework.ldap.odm.core.impl.DefaultObjectDirectoryMapper.createDefaultConverterManager(DefaultObjectDirectoryMapper.java:81)
      	at org.springframework.ldap.odm.core.impl.DefaultObjectDirectoryMapper.<init>(DefaultObjectDirectoryMapper.java:72)
      	at org.springframework.ldap.core.LdapTemplate.<init>(LdapTemplate.java:93)
      	at com.atlassian.crowd.directory.SpringLDAPConnector.setAttributes(SpringLDAPConnector.java:196)
      	... 289 more
      

      "Workaround"

      Restarting the problematic note should resolve the issue. In one known case, the problem fixed on its own after a few hours.

      Notes

      The full cache flush is not done by the Jira itself, but by plugins

      Attachments

        Issue Links

          Activity

            People

              drauf Daniel Rauf
              drauf Daniel Rauf
              Votes:
              2 Vote for this issue
              Watchers:
              6 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: