History | Log In     View a printable version of the current page.  
Issue Details (XML | Word | Printable)

Key: QB-3237
Type: Bug Bug
Status: Closed Closed
Resolution: Fixed
Priority: Minor Minor
Assignee: Robin Shen
Reporter: QC Games
Votes: 0
Watchers: 0

If you were logged in you would be able to see more operations.

Unable to find plugin - Custom plugin installed to plugin/site folder

Created: 20/Aug/18 07:21 PM   Updated: 04/Sep/18 10:40 PM
Component/s: None
Affects Version/s: 8.0.16
Fix Version/s: None

Original Estimate: Unknown Remaining Estimate: Unknown Time Spent: Unknown
File Attachments: 1. Zip Archive com.qcgd.quickbuild.nugetplugin.zip (39 kb)

Environment: CentOS 7.5

 Description  « Hide
Going into Admin, Plugins, we are able to configure our custom plugin, but clicking "save" causes an error (even though the changes are saved).

There is a problem
Unable to find plugin with id 'com.qcgd.quickbuild.nugetplugin'
Root cause:
com.pmease.quickbuild.RemoteException: Unable to find plugin with id 'com.qcgd.quickbuild.nugetplugin'

The file is present nn the QB server and agents.


The fact that the plugin is listed in the Admin area and I'm able to configure it means that QB "sees" it, so I'm confused as to why we are getting this error.


 All   Comments   Work Log   Change History      Sort Order:
QC Games [20/Aug/18 07:21 PM]
"New plugins can be installed by dropping the plugin file into the plugins folder, followed by restart of the QuickBuild server."

Are custom plugins supposed to be in plugins/site or not?

Robin Shen [21/Aug/18 01:17 PM]
plugins/site is a valid plugin directory, and is intended to be used for custom plugins. I tested with a simple plugin and the plugin setting editing works without any issues. Is it possible that you send your plugin source code so that I can check what might be the issue here?

QC Games [30/Aug/18 05:46 PM]
Please find the source attached.

I've tried a bunch of things.
First I thought the error was due to our plugin pointing to JDK 1.6 (while we're using JDK 1.8). Changing that didn't make a difference.
Then I thought maybe it was due to our plugin pointing to

Require-Bundle: com.pmease.quickbuild;bundle-version="6.0.36"

But changing that didn't help.
I've disabled then enabled and that didn't help.
I've removed and then added the plugin, didn't help.

I'm wondering if there's something in the database?


Robin Shen [31/Aug/18 12:54 AM]
Nothing in database records the plugin location. I exported your plugin source to deployable plugin and copy it to "plugins/site" folder and everything works fine when edit the plugin setting. Can you please test with a fresh install of QB 8.0.16 to see if it still exhibits the problem?

QC Games [31/Aug/18 02:07 AM]
It works fine with 8.0.17 on my localhost.
We are running 8.0.4 in production
Can you repro with 8.0.4? If it is an issue with that specific version, then we will (have) to upgrade. but we'd prefer not to (right now).

QC Games [31/Aug/18 07:57 PM]
Full stack

2018-08-31 19:56:51,388 [qtp26335886-41] ERROR com.pmease.quickbuild.web.WicketConfig - Error handling wicket request.
 org.apache.wicket.WicketRuntimeException: Method onFormSubmitted of interface org.apache.wicket.markup.html.form.IFormSubmitListener targeted at [ [Component id = form]] on component [ [Component id = form]] threw an exception
        at org.apache.wicket.RequestListenerInterface.internalInvoke(RequestListenerInterface.java:282)
        at org.apache.wicket.RequestListenerInterface.invoke(RequestListenerInterface.java:220)
        at org.apache.wicket.request.handler.ListenerInterfaceRequestHandler.invokeListener(ListenerInterfaceRequestHandler.java:179)
        at org.apache.wicket.request.handler.ListenerInterfaceRequestHandler.respond(ListenerInterfaceRequestHandler.java:165)
        at org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:719)
        at org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:63)
        at org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:210)
        at org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:253)
        at org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:162)
        at org.apache.wicket.protocol.http.WicketServlet.doPost(WicketServlet.java:159)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
        at com.pmease.quickbuild.web.MainServlet.service(MainServlet.java:135)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
        at org.eclipse.equinox.http.helper.FilterServletAdaptor$FilterChainImpl.doFilter(FilterServletAdaptor.java:56)
        at org.eclipse.jetty.servlets.UserAgentFilter.doFilter(UserAgentFilter.java:83)
        at org.eclipse.jetty.servlets.GzipFilter.doFilter(GzipFilter.java:365)
        at org.eclipse.equinox.http.helper.FilterServletAdaptor.service(FilterServletAdaptor.java:37)
        at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:812)
        at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1669)
        at com.pmease.quickbuild.Quickbuild$DisableTraceFilter.doFilter(Quickbuild.java:1138)
        at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
        at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585)
        at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:221)
        at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127)
        at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)
        at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
        at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061)
        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
        at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:110)
        at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
        at org.eclipse.jetty.server.Server.handle(Server.java:499)
        at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311)
        at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:258)
        at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544)
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)
        at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)
        at java.lang.Thread.run(Thread.java:745)
 Caused by: java.lang.reflect.InvocationTargetException
        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.apache.wicket.RequestListenerInterface.internalInvoke(RequestListenerInterface.java:272)
        ... 36 more
 Caused by: com.pmease.quickbuild.RemotingException: Unable to find plugin with id 'com.qcgd.quickbuild.nugetplugin'.
        at com.pmease.quickbuild.pluginsupport.DefaultPluginManager.getPlugin(DefaultPluginManager.java:124)
        at com.pmease.quickbuild.pluginsupport.DefaultPluginManager.getPlugin(DefaultPluginManager.java:25)
        at com.pmease.quickbuild.grid.NodeServiceImpl.pluginSettingChanged(NodeServiceImpl.java:302)
        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 com.caucho.hessian.server.HessianSkeleton.invoke(HessianSkeleton.java:302)
        at com.caucho.hessian.server.HessianSkeleton.invoke(HessianSkeleton.java:198)
        at com.caucho.hessian.server.HessianServlet.invoke(HessianServlet.java:399)
        at com.caucho.hessian.server.HessianServlet.service(HessianServlet.java:379)
        at com.pmease.quickbuild.grid.GridServlet.service(GridServlet.java:36)
        ... 20 more

Robin Shen [01/Sep/18 12:14 AM]
8.0.4 also works fine at my side. Is it possible that you take a backup of production database and send to [robin AT pmease DOT com] for diagnostics?

Robin Shen [01/Sep/18 12:25 AM]
Looks like that for some reason, some of your build agents are not updated to get your custom plugin. Please restart your prod QB server and wait for all build agents to come back online and test if the problem still exists.

QC Games [01/Sep/18 07:10 PM]
I've restart prod QB many times while swapping versions of the plugin.
All the build agents are up and we still have this problem.
I will mention that we have one unauthorized node. Might that be the one that is causing the problem?

I'll see about getting you the db

Robin Shen [01/Sep/18 11:55 PM]
Before sending db, please create a test configuration and run below script:

import com.pmease.quickbuild.grid.AgentManager;

for (agent in AgentManager.instance.getBuildAgents()) {
  try {
  } catch (Exception e) {
    logger.error("Error notifying plugin setting changed for node " + agent.address, e);

for (agent in AgentManager.instance.getUserAgents()) {
  try {
  } catch (Exception e) {
    logger.error("Error notifying plugin setting changed for node " + agent.address, e);

Then check the build log to see which build agent is having problem locating the plugin.

QC Games [04/Sep/18 01:23 PM]
That script narrowed the issue down to an agent that didn't have the plugin--copying it there and restarting the agent cleared up the issue. Thanks!

We are having an issue with a separate plugin now, but I will open a new ticket for that if we can't resolve it (looks like a different problem).

Robin Shen [04/Sep/18 10:40 PM]
Closing it, just open the new issue if the problem persists.