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

"Failed to add entry" when loading external gadget

XMLWordPrintable

      Summary

      NotSerializableException can be seen in log when loading external gadget. Encountering this is considered harmless.

      Steps to reproduce

      1. Setup Jira DC with enables async caches (jira.cache.replication.localq.disabled property set to false as Java property)
      2. Create new dashboard
      3. Open "Add gadget" window and go to "Manage gadgets" administration panel
      4. Under "Gadgets" tab paste link to some external gadget xml (e.g. https://www.komoroske.com/sudoku/sudoku.xml)
      5. Click "Add gadget" button
      6. Go back to dashboard and add the external gadget.
      7. After loading it wait 5 minutes for gadget cache entry to expire.
      8. 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%';

              aea6bfd9e5b3 Bartosz Radaczyński
              pczuj Przemyslaw Czuj
              Votes:
              22 Vote for this issue
              Watchers:
              29 Start watching this issue

                Created:
                Updated:
                Resolved: