-
Bug
-
Resolution: Fixed
-
Low
-
7.0.0, 7.2.15, 7.13.0, 7.6.9
-
7
-
1
-
Severity 2 - Major
-
1
-
-
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
- relates to
-
JRASERVER-62252 500 error when accessing issues - org.eclipse.gemini.blueprint.service.ServiceUnavailableException
- Closed
-
GRD-830 Loading...
- mentioned in
-
Page Loading...