Uploaded image for project: 'FishEye'
  1. FishEye
  2. FE-6639

Uninstalling enabled plugin may break Fisheye&Crucible instance

    XMLWordPrintable

Details

    Description

      HTR

      1. Go to FeCru source code, bundled plugin (e.g. branch reviews)
      2. start it with amps
      3. go to UPM page and uninstall branch review plugin (make sure it's enabled)

      Actual Result

      PluginDisabledEvent is fired after transaction from com.atlassian.upm.core.install.DefaultPluginInstallationService#uninstallInternal is committed. There are event listeners which cleans some config/data after receiving this event. This leads to two types of errors (but result depends on race condition of some sort)

      1. ActiveObjects fail to clean up and actually nothing really bad happens, apart from that application throws exception in the logs when user tries to access UPM page (doesn't block execution)
        2016-08-10 09:29:55,198 ERROR [qtp261650860-135 ] com.atlassian.event.internal.AsynchronousAbleEventDispatcher AsynchronousAbleEventDispatcher$1$1-run - There was an exception thrown trying to dispatch
        event [com.atlassian.plugin.event.events.PluginDisabledEvent for com.atlassian.crucible.plugins.crucible-branch-review-plugin] from the invoker [SingleParameterMethodListenerInvoker{method=public void c
        om.atlassian.activeobjects.osgi.ActiveObjectsServiceFactory.onPluginDisabledEvent(com.atlassian.plugin.event.events.PluginDisabledEvent), listener=com.atlassian.activeobjects.osgi.ActiveObjectsServiceFa
        ctory@23b750a7}]
        java.lang.RuntimeException: This operation must occur before the plugin 'com.atlassian.crucible.plugins.crucible-branch-review-plugin' is uninstalled
                at com.atlassian.event.internal.SingleParameterMethodListenerInvoker.invoke(SingleParameterMethodListenerInvoker.java:41) [atlassian-event-3.1.1.jar:?]
                at com.atlassian.event.internal.AsynchronousAbleEventDispatcher$1$1.run(AsynchronousAbleEventDispatcher.java:38) [atlassian-event-3.1.1.jar:?]
                at com.google.common.util.concurrent.MoreExecutors$DirectExecutorService.execute(MoreExecutors.java:299) [guava-18.0.jar:?]
                at com.atlassian.event.internal.AsynchronousAbleEventDispatcher.dispatch(AsynchronousAbleEventDispatcher.java:88) [atlassian-event-3.1.1.jar:?]
                at com.atlassian.event.internal.LockFreeEventPublisher$Publisher.dispatch(LockFreeEventPublisher.java:222) [atlassian-event-3.1.1.jar:?]
                at com.atlassian.event.internal.LockFreeEventPublisher.publish(LockFreeEventPublisher.java:95) [atlassian-event-3.1.1.jar:?]
                at com.atlassian.fisheye.event.FisheyeEventPublisher$EventPublication.publish(FisheyeEventPublisher.java:63) [fisheye.jar:?]
        
      2. Some bundles are not cleaned out properly and application can't render any page
        2016-08-10 09:45:22,630 WARN  [qtp261650860-199 ] org.eclipse.jetty.servlet.ServletHandler ServletHandler-doHandle - /fecru/plugins/servlet/dev-toolbar
        com.atlassian.templaterenderer.RenderingException: org.apache.velocity.exception.MethodInvocationException: Invocation of method 'getDisplayableLabel' in  class com.atlassian.plugin.web.model.DefaultWebLabel threw exception com.atlassian.plugin.IllegalPluginStateException: This operation must occur before the plugin 'com.atlassian.crucible.plugins.crucible-branch-review-plugin' is uninstalled at /templates/toolbar.vm[line 96, column 161]
                at com.atlassian.templaterenderer.velocity.one.six.internal.VelocityTemplateRendererImpl.render(VelocityTemplateRendererImpl.java:109) [?:?]
                at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [?:1.8.0_102]
                at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) [?:1.8.0_102]
                at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [?:1.8.0_102]
                at java.lang.reflect.Method.invoke(Method.java:498) [?:1.8.0_102]
                at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:302) [spring-aop-4.0.9.RELEASE.jar:4.0.9.RELEASE]
                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) [spring-aop-4.0.9.RELEASE.jar:4.0.9.RELEASE]
                at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:133) [spring-aop-4.0.9.RELEASE.jar:4.0.9.RELEASE]
                at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:121) [spring-aop-4.0.9.RELEASE.jar:4.0.9.RELEASE]
                at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) [spring-aop-4.0.9.RELEASE.jar:4.0.9.RELEASE]
                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) [spring-aop-4.0.9.RELEASE.jar:4.0.9.RELEASE]
                at org.eclipse.gemini.blueprint.service.importer.support.LocalBundleContextAdvice.invoke(LocalBundleContextAdvice.java:57) [?:?]
                at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) [spring-aop-4.0.9.RELEASE.jar:4.0.9.RELEASE]
                at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:133) [spring-aop-4.0.9.RELEASE.jar:4.0.9.RELEASE]
                at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:121) [spring-aop-4.0.9.RELEASE.jar:4.0.9.RELEASE]
                at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) [spring-aop-4.0.9.RELEASE.jar:4.0.9.RELEASE]
                at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208) [spring-aop-4.0.9.RELEASE.jar:4.0.9.RELEASE]
                at com.sun.proxy.$Proxy387.render(Unknown Source) [?:?]
                at com.atlassian.devrel.servlet.ToolbarServlet.doGet(ToolbarServlet.java:51) [?:?]
                at javax.servlet.http.HttpServlet.service(HttpServlet.java:668) [javax.servlet-api-3.0.1.jar:3.0.1]
                at javax.servlet.http.HttpServlet.service(HttpServlet.java:770) [javax.servlet-api-3.0.1.jar:3.0.1]
                at com.atlassian.plugin.servlet.DelegatingPluginServlet.service(DelegatingPluginServlet.java:37) [atlassian-plugins-servlet-4.4.0.jar:?]
                at javax.servlet.http.HttpServlet.service(HttpServlet.java:770) [javax.servlet-api-3.0.1.jar:3.0.1]
                at com.atlassian.fisheye.plugin.servlet.FisheyeServletModuleContainerServlet.service(FisheyeServletModuleContainerServlet.java:103) [fisheye.jar:?]
                at javax.servlet.http.HttpServlet.service(HttpServlet.java:770) [javax.servlet-api-3.0.1.jar:3.0.1]
                at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:669) [jetty-servlet-8.1.10.v20130312.jar:8.1.10.v20130312]
                at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1526) [jetty-servlet-8.1.10.v20130312.jar:8.1.10.v20130312]
                at com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:39) [atlassian-plugins-servlet-4.4.0.jar:?]
                at com.atlassian.plugin.servlet.filter.DelegatingPluginFilter$1.doFilter(DelegatingPluginFilter.java:58) [atlassian-plugins-servlet-4.4.0.jar:?]
                at com.atlassian.applinks.core.rest.context.ContextFilter.doFilter(ContextFilter.java:24) [?:?]
                at com.atlassian.plugin.servlet.filter.DelegatingPluginFilter.doFilter(DelegatingPluginFilter.java:64) [atlassian-plugins-servlet-4.4.0.jar:?]
                at com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:37) [atlassian-plugins-servlet-4.4.0.jar:?]
                at com.atlassian.plugin.servlet.filter.DelegatingPluginFilter$1.doFilter(DelegatingPluginFilter.java:58) [atlassian-plugins-servlet-4.4.0.jar:?]
                at com.atlassian.applinks.core.rest.context.ContextFilter.doFilter(ContextFilter.java:24) [?:?]
                at com.atlassian.plugin.servlet.filter.DelegatingPluginFilter.doFilter(DelegatingPluginFilter.java:64) [atlassian-plugins-servlet-4.4.0.jar:?]
                at com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:37) [atlassian-plugins-servlet-4.4.0.jar:?]
                at com.atlassian.plugin.servlet.filter.DelegatingPluginFilter$1.doFilter(DelegatingPluginFilter.java:58) [atlassian-plugins-servlet-4.4.0.jar:?]
                at com.atlassian.applinks.core.rest.context.ContextFilter.doFilter(ContextFilter.java:24) [?:?]
                at com.atlassian.plugin.servlet.filter.DelegatingPluginFilter.doFilter(DelegatingPluginFilter.java:64) [atlassian-plugins-servlet-4.4.0.jar:?]
                at com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:37) [atlassian-plugins-servlet-4.4.0.jar:?]
                at com.atlassian.plugin.servlet.filter.DelegatingPluginFilter$1.doFilter(DelegatingPluginFilter.java:58) [atlassian-plugins-servlet-4.4.0.jar:?]
                at com.atlassian.applinks.core.rest.context.ContextFilter.doFilter(ContextFilter.java:24) [?:?]
                at com.atlassian.plugin.servlet.filter.DelegatingPluginFilter.doFilter(DelegatingPluginFilter.java:64) [atlassian-plugins-servlet-4.4.0.jar:?]
                at com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:37) [atlassian-plugins-servlet-4.4.0.jar:?]
                at com.atlassian.plugin.servlet.filter.DelegatingPluginFilter$1.doFilter(DelegatingPluginFilter.java:58) [atlassian-plugins-servlet-4.4.0.jar:?]
                at com.atlassian.applinks.core.rest.context.ContextFilter.doFilter(ContextFilter.java:24) [?:?]
                at com.atlassian.plugin.servlet.filter.DelegatingPluginFilter.doFilter(DelegatingPluginFilter.java:64) [atlassian-plugins-servlet-4.4.0.jar:?]
                at com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:37) [atlassian-plugins-servlet-4.4.0.jar:?]
                at com.atlassian.plugin.servlet.filter.DelegatingPluginFilter$1.doFilter(DelegatingPluginFilter.java:58) [atlassian-plugins-servlet-4.4.0.jar:?]
                at com.atlassian.prettyurls.filter.PrettyUrlsSiteMeshFixupFilter.doFilter(PrettyUrlsSiteMeshFixupFilter.java:32) [?:?]
                at com.atlassian.plugin.servlet.filter.DelegatingPluginFilter.doFilter(DelegatingPluginFilter.java:64) [atlassian-plugins-servlet-4.4.0.jar:?]
                at com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:37) [atlassian-plugins-servlet-4.4.0.jar:?]
                at com.atlassian.plugin.servlet.filter.DelegatingPluginFilter$1.doFilter(DelegatingPluginFilter.java:58) [atlassian-plugins-servlet-4.4.0.jar:?]
                at com.atlassian.prettyurls.filter.PrettyUrlsDispatcherFilter.doFilter(PrettyUrlsDispatcherFilter.java:55) [?:?]
                at com.atlassian.plugin.servlet.filter.DelegatingPluginFilter.doFilter(DelegatingPluginFilter.java:64) [atlassian-plugins-servlet-4.4.0.jar:?]
                at com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:37) [atlassian-plugins-servlet-4.4.0.jar:?]
        ...
        Caused by: org.apache.velocity.exception.MethodInvocationException: Invocation of method 'getDisplayableLabel' in  class com.atlassian.plugin.web.model.DefaultWebLabel threw exception com.atlassian.plugin.IllegalPluginStateException: This operation must occur before the plugin 'com.atlassian.crucible.plugins.crucible-branch-review-plugin' is uninstalled at /templates/toolbar.vm[line 96, column 161]
                at org.apache.velocity.runtime.parser.node.ASTMethod.handleInvocationException(ASTMethod.java:337) [velocity-1.6.1-atlassian-2.jar:?]
                at org.apache.velocity.runtime.parser.node.ASTMethod.execute(ASTMethod.java:284) [velocity-1.6.1-atlassian-2.jar:?]
                at org.apache.velocity.runtime.parser.node.ASTReference.execute(ASTReference.java:252) [velocity-1.6.1-atlassian-2.jar:?]
                at org.apache.velocity.runtime.parser.node.ASTReference.render(ASTReference.java:332) [velocity-1.6.1-atlassian-2.jar:?]
                at org.apache.velocity.runtime.parser.node.ASTBlock.render(ASTBlock.java:72) [velocity-1.6.1-atlassian-2.jar:?]
                at org.apache.velocity.runtime.directive.Foreach.performIteration(Foreach.java:375) [velocity-1.6.1-atlassian-2.jar:?]
                at org.apache.velocity.runtime.directive.Foreach.render(Foreach.java:315) [velocity-1.6.1-atlassian-2.jar:?]
                at org.apache.velocity.runtime.parser.node.ASTDirective.render(ASTDirective.java:175) [velocity-1.6.1-atlassian-2.jar:?]
                at org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:336) [velocity-1.6.1-atlassian-2.jar:?]
                at org.apache.velocity.Template.merge(Template.java:328) [velocity-1.6.1-atlassian-2.jar:?]
                at org.apache.velocity.Template.merge(Template.java:235) [velocity-1.6.1-atlassian-2.jar:?]
                at com.atlassian.templaterenderer.velocity.one.six.internal.VelocityTemplateRendererImpl.render(VelocityTemplateRendererImpl.java:100) [?:?]
                ... 160 more
        Caused by: com.atlassian.plugin.IllegalPluginStateException: This operation must occur before the plugin 'com.atlassian.crucible.plugins.crucible-branch-review-plugin' is uninstalled
                at com.atlassian.plugin.osgi.factory.OsgiPluginNotInstalledHelperBase.getClassLoader(OsgiPluginNotInstalledHelperBase.java:43) [atlassian-plugins-osgi-4.4.0.jar:?]
                at com.atlassian.plugin.osgi.factory.OsgiPlugin.getClassLoader(OsgiPlugin.java:233) [atlassian-plugins-osgi-4.4.0.jar:?]
                at com.atlassian.sal.fisheye.message.FishEyeI18nResolver.getBundle(FishEyeI18nResolver.java:148) [?:?]
                at com.atlassian.sal.fisheye.message.FishEyeI18nResolver.getRawText(FishEyeI18nResolver.java:59) [?:?]
                at com.atlassian.sal.fisheye.message.FishEyeI18nResolver.resolveText(FishEyeI18nResolver.java:45) [?:?]
                at com.atlassian.sal.fisheye.message.FishEyeI18nResolver.resolveText(FishEyeI18nResolver.java:40) [?:?]
                at com.atlassian.sal.core.message.AbstractI18nResolver.getText(AbstractI18nResolver.java:31) [?:?]
                at com.atlassian.fisheye.plugin.web.FisheyeWebFragmentHelper.getI18nValue(FisheyeWebFragmentHelper.java:81) [fisheye.jar:?]
                at com.atlassian.plugin.web.model.DefaultWebLabel.getDisplayableLabel(DefaultWebLabel.java:60) [atlassian-plugins-webfragment-4.0.0.jar:?]
                at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [?:1.8.0_102]
                at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) [?:1.8.0_102]
                at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [?:1.8.0_102]
                at java.lang.reflect.Method.invoke(Method.java:498) [?:1.8.0_102]
                at org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.doInvoke(UberspectImpl.java:389) [velocity-1.6.1-atlassian-2.jar:?]
                at org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.invoke(UberspectImpl.java:378) [velocity-1.6.1-atlassian-2.jar:?]
                at com.atlassian.velocity.htmlsafe.introspection.UnboxingMethod.invoke(UnboxingMethod.java:30) [?:?]
                at org.apache.velocity.runtime.parser.node.ASTMethod.execute(ASTMethod.java:270) [velocity-1.6.1-atlassian-2.jar:?]
                ... 170 more
        

      Expected Result

      The plugin is deleted and there are none leftovers in the system from deleted plugin. Fisheye&Crucible works like a charm

      Workaround

      Disable plugin first before uninstalling it.

      Affected versions

      Affected version 4.1.1 which uses UPM 2.20.5

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              glewandowski Grzegorz Lewandowski
              Votes:
              3 Vote for this issue
              Watchers:
              7 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: