Uploaded image for project: 'Bamboo Data Center'
  1. Bamboo Data Center
  2. BAM-17726

Avoid logging stack trace at INFO level for 'Old plugin interface detected' developer hint

    XMLWordPrintable

Details

    • Suggestion
    • Resolution: Fixed
    • 6.0.0
    • None
    • None
    • Our product teams collect and evaluate feedback from a number of different sources. To learn more about how we use customer feedback in the planning process, check out our new feature policy.

    Description

      Problem

      Bamboo 5.10 introduced a new interface method RuntimeTaskDataProvider#createRuntimeTaskData(). This is supposed to be backwards compatible, thus optional regarding an implementing class:

      Server side pre-build action that may be implemented by task. [...]

      However, the respective calling code in com.atlassian.bamboo.chains.ChainPluginSupportHelper looks like this:

      try
      {
          taskDefinition.setRuntimeData(runtimeConfigurator.createRuntimeTaskData(taskDefinition, commonContext));
      }
      catch (IncompatibleClassChangeError e)
      {
          log.info("Old plugin interface detected: ", e);
      }
      

      This results in something like the following being written to the Bamboo server log every time a task using a pre 5.10 RuntimeTaskDataProvider gets executed:

      2016-07-01 15:56:27,686 INFO [6-DelayedChangeDetectionThread:pool-12-thread-4] [ChainPluginSupportHelper] Old plugin interface detected: 
      java.lang.AbstractMethodError: net.utoolity.atlassian.bamboo.taws.AWSRuntimeTaskDataProvider.createRuntimeTaskData(Lcom/atlassian/bamboo/task/runtime/RuntimeTaskDefinition;Lcom/atlassian/bamboo/v2/build/CommonContext;)Ljava/util/Map;
      	at com.atlassian.bamboo.chains.ChainPluginSupportHelper.prepareRuntimeTaskData(ChainPluginSupportHelper.java:43)
      	at com.atlassian.bamboo.chains.ChainPluginSupportImpl$10.run(ChainPluginSupportImpl.java:289)
      	at com.atlassian.bamboo.variable.CustomVariableContextImpl.withVariableSubstitutor(CustomVariableContextImpl.java:200)
      	at com.atlassian.bamboo.variable.CustomVariableContextRunnerImpl.execute(CustomVariableContextRunnerImpl.java:32)
      	at com.atlassian.bamboo.chains.ChainPluginSupportImpl.buildStarted(ChainPluginSupportImpl.java:276)
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      	at java.lang.reflect.Method.invoke(Method.java:498)
      	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
      	at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)
      	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
      	at org.springframework.orm.hibernate3.HibernateInterceptor.invoke(HibernateInterceptor.java:119)
      	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
      	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
      	at com.sun.proxy.$Proxy154.buildStarted(Unknown Source)
      	at com.atlassian.bamboo.chains.ChainExecutionManagerImpl.dispatchBuildsInCurrentStage(ChainExecutionManagerImpl.java:1060)
      	at com.atlassian.bamboo.chains.ChainExecutionManagerImpl.access$2100(ChainExecutionManagerImpl.java:121)
      	at com.atlassian.bamboo.chains.ChainExecutionManagerImpl$5.run(ChainExecutionManagerImpl.java:755)
      	at com.atlassian.util.concurrent.ManagedLocks$ManagedLockImpl.withLock(ManagedLocks.java:321)
      	at com.atlassian.bamboo.chains.ChainExecutionManagerImpl.execute(ChainExecutionManagerImpl.java:704)
      	at com.atlassian.bamboo.chains.ChainExecutionManagerImpl.tryStartChainState(ChainExecutionManagerImpl.java:371)
      	at com.atlassian.bamboo.chains.ChainExecutionManagerImpl.delayedStart(ChainExecutionManagerImpl.java:239)
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      	at java.lang.reflect.Method.invoke(Method.java:498)
      	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
      	at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)
      	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
      	at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
      	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
      	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
      	at com.sun.proxy.$Proxy156.delayedStart(Unknown Source)
      	at com.atlassian.bamboo.plan.PlanExecutionManagerImpl$2$1$1.lambda$call$86(PlanExecutionManagerImpl.java:426)
      	at com.atlassian.bamboo.util.CacheAwareness$3.call(CacheAwareness.java:134)
      	at com.atlassian.bamboo.util.CacheAwareness$3.call(CacheAwareness.java:130)
      	at com.atlassian.bamboo.util.CacheAwareness.withValuesOlderThanTimestampReloaded(CacheAwareness.java:163)
      	at com.atlassian.bamboo.util.CacheAwareness.withValuesOlderThanTimestampReloaded(CacheAwareness.java:129)
      	at com.atlassian.bamboo.util.CacheAwareness.withValuesOlderThanTimestampReloaded(CacheAwareness.java:194)
      	at com.atlassian.bamboo.plan.PlanExecutionManagerImpl$2$1$1.call(PlanExecutionManagerImpl.java:425)
      	at com.atlassian.bamboo.plan.PlanExecutionManagerImpl$2$1$1.call(PlanExecutionManagerImpl.java:416)
      	at com.atlassian.util.concurrent.ManagedLocks$ManagedLockImpl.withLock(ManagedLocks.java:312)
      	at com.atlassian.bamboo.plan.PlanExecutionLockServiceImpl.lock(PlanExecutionLockServiceImpl.java:85)
      	at com.atlassian.bamboo.plan.PlanExecutionManagerImpl.doWithProcessLock(PlanExecutionManagerImpl.java:796)
      	at com.atlassian.bamboo.plan.PlanExecutionManagerImpl.access$400(PlanExecutionManagerImpl.java:128)
      	at com.atlassian.bamboo.plan.PlanExecutionManagerImpl$2$1.run(PlanExecutionManagerImpl.java:410)
      	at com.atlassian.bamboo.utils.BambooRunnables$1.run(BambooRunnables.java:49)
      	at com.atlassian.bamboo.security.ImpersonationHelper.runWith(ImpersonationHelper.java:31)
      	at com.atlassian.bamboo.security.ImpersonationHelper.runWithSystemAuthority(ImpersonationHelper.java:20)
      	at com.atlassian.bamboo.security.ImpersonationHelper$1.run(ImpersonationHelper.java:52)
      	at java.lang.Thread.run(Thread.java:745)
      

      Impact

      While these log entries could be safely ignored (as indicated by the INFO level), they usually aren't - We had several support requests and bug reports filed against our add-ons due to this log pollution already, where totally unrelated problems got attributed to our code at first, as those repetitive stack traces stand out and hinder the search for the actual cause.

      Proposed Fix

      Adjust the log.info("Old plugin interface detected: ", e); call to exclude the exception and use a respectively enhanced log message for the intended developer hint instead.

      Attachments

        Issue Links

          Activity

            People

              mgardias Marcin Gardias
              847fe7f23dab Henrik Opel [Utoolity]
              Votes:
              2 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: