-
Bug
-
Resolution: Fixed
-
Low
-
7.6.7, 7.7.5, 7.8.5, 7.9.3, 7.11.0, 8.5.4, 8.20.2
-
7.06
-
65
-
Severity 3 - Minor
-
8
-
Summary
NotSerializableException can be seen in log when loading external gadget. Encountering this is considered harmless.
Steps to reproduce
- Setup Jira DC with enables async caches (jira.cache.replication.localq.disabled property set to false as Java property)
- Create new dashboard
- Open "Add gadget" window and go to "Manage gadgets" administration panel
- Under "Gadgets" tab paste link to some external gadget xml (e.g. https://www.komoroske.com/sudoku/sudoku.xml)
- Click "Add gadget" button
- Go back to dashboard and add the external gadget.
- After loading it wait 5 minutes for gadget cache entry to expire.
- Access the dashboard with external gadget.
Expected result
No problems logged
Actual result
Exception is logged
2018-07-26 15:38:17,478 http-nio-8080-exec-4 ERROR admin 929x452x1 u9hvni 62.87.203.114,10.0.0.158 /secure/Dashboard.jspa [c.a.j.c.distribution.localq.LocalQCacheManager] Critical state of local cache replication queue - cannot add: LocalQCacheOp{cacheName='com.atlassian.gadgets.renderer.internal.cache.gadgetSpecs', action=REMOVE, key=com.atlassian.jira.cache.ehcache.customserialization.CustomSerializedValue@f2dd38a0, value=null, creationTimeInMillis=1532619473154} to queue: [queueId=queue_node0_2_6466f056d2e2a8e6eeea9e6bf34735ff, queuePath=/home/ubuntu/jirahome/localq/queue_node0_2_6466f056d2e2a8e6eeea9e6bf34735ff], error: Failed to add entry.
com.squareup.tape.FileException: Failed to add entry.
at com.squareup.tape.FileObjectQueue.add(FileObjectQueue.java:49)
at com.atlassian.jira.cluster.distribution.localq.tape.TapeLocalQCacheOpQueue.add(TapeLocalQCacheOpQueue.java:151)
at com.atlassian.jira.cluster.distribution.localq.LocalQCacheOpQueueWithStats.add(LocalQCacheOpQueueWithStats.java:115)
at com.atlassian.jira.cluster.distribution.localq.LocalQCacheManager.addToQueue(LocalQCacheManager.java:344)
at com.atlassian.jira.cluster.distribution.localq.LocalQCacheManager.addToAllQueues(LocalQCacheManager.java:328)
at com.atlassian.jira.cluster.distribution.localq.LocalQCacheReplicator.replicateToQueue(LocalQCacheReplicator.java:85)
at com.atlassian.jira.cluster.distribution.localq.LocalQCacheReplicator.replicateRemovalNotification(LocalQCacheReplicator.java:71)
at com.atlassian.jira.cluster.cache.ehcache.AbstractJiraCacheReplicator.notifyElementUpdated(AbstractJiraCacheReplicator.java:116)
at net.sf.ehcache.event.RegisteredEventListeners.internalNotifyElementUpdated(RegisteredEventListeners.java:228)
at net.sf.ehcache.event.RegisteredEventListeners.notifyElementUpdated(RegisteredEventListeners.java:206)
at net.sf.ehcache.Cache.notifyPutInternalListeners(Cache.java:1646)
at net.sf.ehcache.Cache.putInternal(Cache.java:1618)
at net.sf.ehcache.Cache.put(Cache.java:1543)
at net.sf.ehcache.Cache.put(Cache.java:1508)
at com.atlassian.cache.ehcache.DelegatingCache.put(DelegatingCache.java:93)
at com.atlassian.jira.cache.DeferredReplicationCache.lambda$put$0(DeferredReplicationCache.java:60)
at com.atlassian.jira.cluster.cache.ehcache.BlockingParallelCacheReplicator.runDeferred(BlockingParallelCacheReplicator.java:172)
at com.atlassian.jira.cache.DeferredReplicationCache.put(DeferredReplicationCache.java:59)
at com.atlassian.gadgets.renderer.internal.cache.AtlassianCache.addElement(AtlassianCache.java:22)
at org.apache.shindig.common.cache.SoftExpiringCache.addElement(SoftExpiringCache.java:89)
at org.apache.shindig.gadgets.DefaultGadgetSpecFactory.fetchObjectAndCache(DefaultGadgetSpecFactory.java:137)
at org.apache.shindig.gadgets.DefaultGadgetSpecFactory.getGadgetSpec(DefaultGadgetSpecFactory.java:91)
at com.atlassian.gadgets.renderer.internal.local.LocalGadgetSpecFactory.getGadgetSpec(LocalGadgetSpecFactory.java:80)
at com.atlassian.gadgets.renderer.internal.local.LocalGadgetSpecFactory.getGadgetSpec(LocalGadgetSpecFactory.java:59)
at com.atlassian.gadgets.renderer.internal.GadgetSpecFactoryImpl.getGadgetSpec(GadgetSpecFactoryImpl.java:128)
at com.atlassian.gadgets.renderer.internal.GadgetSpecFactoryImpl.getGadgetSpec(GadgetSpecFactoryImpl.java:83)
... 2 filtered
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:302)
at org.eclipse.gemini.blueprint.service.importer.support.internal.aop.ServiceInvoker.doInvoke(ServiceInvoker.java:56)
at org.eclipse.gemini.blueprint.service.importer.support.internal.aop.ServiceInvoker.invoke(ServiceInvoker.java:60)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:133)
at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:121)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.eclipse.gemini.blueprint.service.util.internal.aop.ServiceTCCLInterceptor.invokeUnprivileged(ServiceTCCLInterceptor.java:70)
at org.eclipse.gemini.blueprint.service.util.internal.aop.ServiceTCCLInterceptor.invoke(ServiceTCCLInterceptor.java:53)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.eclipse.gemini.blueprint.service.importer.support.LocalBundleContextAdvice.invoke(LocalBundleContextAdvice.java:57)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:133)
at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:121)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208)
at com.sun.proxy.$Proxy1774.getGadgetSpec(Unknown Source)
at com.atlassian.gadgets.embedded.internal.GadgetUrlBuilder.buildUserPrefsParams(GadgetUrlBuilder.java:98)
at com.atlassian.gadgets.embedded.internal.GadgetUrlBuilder.build(GadgetUrlBuilder.java:86)
... 3 filtered
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:302)
at org.eclipse.gemini.blueprint.service.importer.support.internal.aop.ServiceInvoker.doInvoke(ServiceInvoker.java:56)
at org.eclipse.gemini.blueprint.service.importer.support.internal.aop.ServiceInvoker.invoke(ServiceInvoker.java:60)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:133)
at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:121)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.eclipse.gemini.blueprint.service.util.internal.aop.ServiceTCCLInterceptor.invokeUnprivileged(ServiceTCCLInterceptor.java:70)
at org.eclipse.gemini.blueprint.service.util.internal.aop.ServiceTCCLInterceptor.invoke(ServiceTCCLInterceptor.java:53)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.eclipse.gemini.blueprint.service.importer.support.LocalBundleContextAdvice.invoke(LocalBundleContextAdvice.java:57)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:133)
at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:121)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208)
at com.sun.proxy.$Proxy1797.build(Unknown Source)
at com.atlassian.gadgets.dashboard.internal.rest.representations.RenderedGadgetUriProviderImpl.getRenderedGadgetUri(RenderedGadgetUriProviderImpl.java:33)
at com.atlassian.gadgets.dashboard.internal.rest.representations.GadgetUrlContainer.<init>(GadgetUrlContainer.java:36)
at com.atlassian.gadgets.dashboard.internal.rest.representations.RepresentationFactoryImpl.gadgetUrlsForGadget(RepresentationFactoryImpl.java:133)
at com.atlassian.gadgets.dashboard.internal.rest.representations.RepresentationFactoryImpl.createGadgetRepresentation(RepresentationFactoryImpl.java:73)
at com.atlassian.gadgets.dashboard.internal.rest.representations.RepresentationFactoryImpl$1$1.apply(RepresentationFactoryImpl.java:54)
at com.atlassian.gadgets.dashboard.internal.rest.representations.RepresentationFactoryImpl$1$1.apply(RepresentationFactoryImpl.java:51)
at com.google.common.collect.Iterators$8.transform(Iterators.java:799)
at com.google.common.collect.TransformedIterator.next(TransformedIterator.java:48)
at com.google.common.collect.Iterators$7.computeNext(Iterators.java:651)
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.Iterators$7.computeNext(Iterators.java:650)
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$5.hasNext(Iterators.java:547)
at com.google.common.collect.ImmutableList.copyOf(ImmutableList.java:268)
at com.google.common.collect.ImmutableList.copyOf(ImmutableList.java:226)
at com.atlassian.gadgets.dashboard.internal.rest.representations.RepresentationFactoryImpl.createDashboardRepresentation(RepresentationFactoryImpl.java:48)
at com.atlassian.gadgets.dashboard.internal.velocity.DashboardEmbedder.dashboardToJsonObject(DashboardEmbedder.java:47)
at com.atlassian.gadgets.dashboard.internal.velocity.DashboardView.getLayoutsJson(DashboardView.java:158)
at com.atlassian.gadgets.dashboard.internal.velocity.DashboardView.writeTo(DashboardView.java:77)
at com.atlassian.jira.web.action.Dashboard.getDashboardHtml(Dashboard.java:235)
at com.atlassian.jira.web.action.Dashboard.getContextParams(Dashboard.java:616)
... 2 filtered
at java.lang.reflect.Method.invoke(Method.java:498)
... 3 filtered
at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:527)
... 7 filtered
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
... 48 filtered
at com.atlassian.greenhopper.jira.filters.ClassicBoardRouter.doFilter(ClassicBoardRouter.java:62)
... 12 filtered
at com.atlassian.web.servlet.plugin.request.RedirectInterceptingFilter.doFilter(RedirectInterceptingFilter.java:21)
... 70 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)
... 39 filtered
at com.atlassian.jira.servermetrics.CorrelationIdPopulatorFilter.doFilter(CorrelationIdPopulatorFilter.java:30)
... 20 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:748)
Caused by: java.io.NotSerializableException: org.apache.shindig.common.uri.Uri
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
at com.atlassian.jira.cache.ehcache.customserialization.CustomSerializedValue.writeObject(CustomSerializedValue.java:51)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.lang.reflect.Method.invoke(Method.java:498)
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:1028)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1496)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
at com.atlassian.jira.cluster.distribution.localq.tape.TapeLocalQCacheOpConverter.toStream(TapeLocalQCacheOpConverter.java:33)
at com.atlassian.jira.cluster.distribution.localq.tape.TapeLocalQCacheOpConverter.toStream(TapeLocalQCacheOpConverter.java:16)
at com.squareup.tape.FileObjectQueue.add(FileObjectQueue.java:45)
... 362 more
Notes
The exception log entry is a regression introduced in 7.6.7 and 7.11.0, however it didn't change previous functional behaviour. Before same thing could be seen as WARN log enrty:
2018-07-26 13:10:43,118 http-nio-8080-exec-8 WARN admin 790x419x1 img4x3 62.87.203.114,10.0.0.249 /secure/Dashboard.jspa [c.a.j.c.cache.ehcache.AbstractJiraCacheReplicator] Key https://www.komoroske.com/sudoku/sudoku.xml is not Serializable and update cannot be replicated. Cache: com.atlassian.gadgets.renderer.internal.cache.gadgetSpecs
It is important to note that the exception can be ignored as it is meant to be a warning only .
Diagnostic steps
The external gadgets can be identified exist in Jira by checking the
- /plugins/servlet/gadgets/admin page as Jira Administrator
- Query the database for select * from externalgadget;
Deleted external gadgets or those that are available from Application links can cause this as well. To check:
- Query the database for select * from portletconfiguration where gadget_xml like '%http%';
- is caused by
-
JRASERVER-65246 Plugin caches in Data Center throw ClassNotFoundException on invalidation if custom classes are used as keys
-
- Closed
-
- mentioned in
-
Page Loading...
-
Page Loading...
-
Page Loading...
-
Page Loading...
-
Page Loading...
-
Page Loading...
-
Page Loading...
-
Page Loading...
-
Page Loading...
-
Page Loading...
-
Page Loading...
-
Page Loading...
-
Page Loading...
-
Page Loading...
-
Page Loading...
-
Page Loading...
-
Page Loading...
-
Page Loading...
- relates to
-
MNSTR-7400 Loading...