<< Back to previous view

[QB-3237] Unable to find plugin - Custom plugin installed to plugin/site folder
Created: 20/Aug/18  Updated: 04/Sep/18

Status: Closed
Project: QuickBuild
Component/s: None
Affects Version/s: 8.0.16
Fix Version/s: None

Type: Bug Priority: Minor
Reporter: QC Games Assigned To: Robin Shen
Resolution: Fixed Votes: 0
Remaining Estimate: Unknown Time Spent: Unknown
Original Estimate: Unknown
Environment: CentOS 7.5

File Attachments: Zip Archive com.qcgd.quickbuild.nugetplugin.zip    

 Description   
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.

plugins/site/com.qcgd.quickbuild.nugetplugin_1.0.0.jar

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.

Thanks

 Comments   
Comment by QC Games [ 20/Aug/18 07:21 PM ]
https://wiki.pmease.com/display/QB80/Plugin+Management
"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?
Comment by 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?
Comment by 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?

Thanks
Comment by 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?
Comment by 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).
Comment by 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
Comment by 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?
Comment by 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.
Comment by 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
Comment by Robin Shen [ 01/Sep/18 11:55 PM ]
Before sending db, please create a test configuration and run below script:

groovy:
import com.pmease.quickbuild.grid.AgentManager;

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

for (agent in AgentManager.instance.getUserAgents()) {
  try {
    agent.getNodeService().pluginSettingChanged("com.qcgd.quickbuild.nugetplugin2");
  } 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.
Comment by 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).
Comment by Robin Shen [ 04/Sep/18 10:40 PM ]
Closing it, just open the new issue if the problem persists.
Generated at Thu Apr 25 22:04:14 UTC 2024 using JIRA 189.