-
Suggestion
-
Resolution: Fixed
-
None
-
None
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.
- mentioned in
-
Page Loading...