XL Release plugin can cause startup performance issues

Article ID:360028500731
1 minute readKnowledge base

Issue

This plugin performs a user lookup on construction. Which can be expensive. This expense can be increased if the lookup is on a controller that gets its credentials from CJOC.

For example:

2019-05-12 03:20:19.444+0000 [id=89]    WARNING h.ExtensionFinder$GuiceFinder$FaultTolerantScope$1#error: Failed to instantiate Key[type=com.xebialabs.xlrelease.ci.XLReleaseNotifier$XLReleaseDescriptor, annotation=[none]]; skipping this component
com.google.inject.ProvisionException: Unable to provision, see the following errors:

1) Tried proxying com.xebialabs.xlrelease.ci.XLReleaseNotifier$XLReleaseDescriptor to support a circular dependency, but it is not an interface.

1 error
    at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:52)
    at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:145)
    at hudson.ExtensionFinder$GuiceFinder$FaultTolerantScope$1.get(ExtensionFinder.java:424)
    at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41)
    at com.google.inject.internal.InjectorImpl$2$1.call(InjectorImpl.java:1016)
    at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1103)
    at com.google.inject.internal.InjectorImpl$2.get(InjectorImpl.java:1012)
    at hudson.ExtensionFinder$GuiceFinder._find(ExtensionFinder.java:386)
    at hudson.ExtensionFinder$GuiceFinder.find(ExtensionFinder.java:377)
    at hudson.ClassicPluginStrategy.findComponents(ClassicPluginStrategy.java:477)
    at hudson.ExtensionList.load(ExtensionList.java:365)
    at hudson.ExtensionList.ensureLoaded(ExtensionList.java:303)
    at hudson.ExtensionList.iterator(ExtensionList.java:157)
    at jenkins.model.Jenkins.getDescriptorByType(Jenkins.java:1544)
    at com.cloudbees.opscenter.client.plugin.OperationsCenterRootAction.descriptor(OperationsCenterRootAction.java:181)
    at com.cloudbees.opscenter.client.plugin.OperationsCenterCredentialsProvider.getCredentials(OperationsCenterCredentialsProvider.java:74)
    at com.cloudbees.plugins.credentials.CredentialsProvider.lookupCredentials(CredentialsProvider.java:414)
    at com.cloudbees.plugins.credentials.CredentialsProvider.lookupCredentials(CredentialsProvider.java:371)
    at com.xebialabs.xlrelease.ci.Credential.lookupSystemCredentials(Credential.java:179)
    at com.xebialabs.xlrelease.ci.server.XLReleaseServerFactory.newInstance(XLReleaseServerFactory.java:53)
    at com.xebialabs.xlrelease.ci.server.XLReleaseServerConnectorFactory.getXLReleaseServerConnector(XLReleaseServerConnectorFactory.java:46)
    at com.xebialabs.xlrelease.ci.server.XLReleaseServerConnectorFactory.initMap(XLReleaseServerConnectorFactory.java:36)
    at com.xebialabs.xlrelease.ci.server.XLReleaseServerConnectorFactory.load(XLReleaseServerConnectorFactory.java:31)
    at com.xebialabs.xlrelease.ci.XLReleaseNotifier$XLReleaseDescriptor.load(XLReleaseNotifier.java:225)
    at com.xebialabs.xlrelease.ci.XLReleaseNotifier$XLReleaseDescriptor.<init>(XLReleaseNotifier.java:185)
    at com.xebialabs.xlrelease.ci.XLReleaseNotifier$XLReleaseDescriptor$$FastClassByGuice$$586ea5f2.newInstance(<generated>)
...

In the above example we see a new instance of the XL Release plugin is being created as part of the injection process:

    at com.xebialabs.xlrelease.ci.server.XLReleaseServerFactory.newInstance(XLReleaseServerFactory.java:53)

We see the user lookup here:

    at com.cloudbees.plugins.credentials.CredentialsProvider.lookupCredentials(CredentialsProvider.java:371)
    at com.xebialabs.xlrelease.ci.Credential.lookupSystemCredentials(Credential.java:179)

It can also cause a deadlock which can prevent Jenkins from completing startup.

Resolution

Uninstalling xlrelease-plugin will work around the issue. See https://www.jenkins.io/doc/book/managing/plugins/#uninstalling-a-plugin.

This article is part of our Knowledge Base and is provided for guidance-based purposes only. The solutions or workarounds described here are not officially supported by CloudBees and may not be applicable in all environments. Use at your own discretion, and test changes in a safe environment before applying them to production systems.