Cannot increase Medium priority core pool size in System Settings
-
In system_settings.shtm on core 2.7.4, I cannot increase the "Medium priority core pool size." This was also happening under core 2.7.2, and is one of the main reasons I upgraded. Unfortunately, I understand it my pool setting in overrides/env.properties is now ignored.
The error appears after I click on the "Save" button in the thread pool box: a pop-up on the webpage displays "Error" and the text below is added to ma.log.
2016-02-24 12:45:41,200 ERROR (com.serotonin.m2m2.web.dwr.util.ExceptionDetectionFilter.doFilter:38) - DWR invocation exception java.lang.NoSuchMethodError: com.serotonin.m2m2.rt.maint.BackgroundProcessing.setMediumPriorityServiceMaximumPoolSize(I)V at com.serotonin.m2m2.web.dwr.SystemSettingsDwr.saveThreadPoolSettings(SystemSettingsDwr.java:381) 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:497) at org.directwebremoting.impl.ExecuteAjaxFilter.doFilter(ExecuteAjaxFilter.java:34) at org.directwebremoting.impl.DefaultRemoter$1.doFilter(DefaultRemoter.java:428) at com.serotonin.m2m2.web.dwr.util.TranslationsFilter.doFilter(TranslationsFilter.java:37) at org.directwebremoting.impl.DefaultRemoter$1.doFilter(DefaultRemoter.java:428) at com.serotonin.m2m2.web.dwr.util.ExceptionDetectionFilter.doFilter(ExceptionDetectionFilter.java:26) at org.directwebremoting.impl.DefaultRemoter$1.doFilter(DefaultRemoter.java:428) at com.serotonin.m2m2.web.dwr.util.DwrPermissionFilter.doFilter(DwrPermissionFilter.java:45) at org.directwebremoting.impl.DefaultRemoter$1.doFilter(DefaultRemoter.java:428) at org.directwebremoting.impl.DefaultRemoter.execute(DefaultRemoter.java:431) at org.directwebremoting.impl.DefaultRemoter.execute(DefaultRemoter.java:283) at org.directwebremoting.servlet.PlainCallHandler.handle(PlainCallHandler.java:52) at org.directwebremoting.servlet.UrlProcessor.handle(UrlProcessor.java:101) at org.directwebremoting.servlet.DwrServlet.doPost(DwrServlet.java:146) at javax.servlet.http.HttpServlet.service(HttpServlet.java:707) at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:808) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1669) at org.eclipse.jetty.servlets.UserAgentFilter.doFilter(UserAgentFilter.java:83) at org.eclipse.jetty.servlets.GzipFilter.doFilter(GzipFilter.java:300) 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.handler.ScopedHandler.handle(ScopedHandler.java:143) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:577) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223) 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.ContextHandlerCollection.handle(ContextHandlerCollection.java:215) 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:310) at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257) at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540) 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)
-
Note that under core 2.7.2 I tried increasing the pool size with the datasources running. In core 2.7.4, I started in SAFE mode, and tried to increase the pool size before enabling the datasources. The high priority pool size seemed to change without any error messages, so I assume that one worked.
-
So, it seems that the JSON file export of "System settings" shows:
"mediumPriorityThreadMaximumPoolSize":300,
which is what I set the pool size to from /system_settings.shtm. However, the /system_settings.shtm still shows 3, even after I clear the browser cache. Which should I believe? I can't view /internal/workItems.shtm because that generates an error.Would a restart read the JSON and use the new pool size? After the upgrade, I had to start in SAFE mode for the startup to complete, so I'd like to avoid a restart due to the downtime and the risk of the additional overhead of having to start in SAFE mode again.
-
That is just referring to the database. The BackgroundProcessing class needs to actually have that number set to have it be used. It can't get set if the method that sets it is missing.
This is the sort of thing that compilers catch, though, and we wouldn't have been able to compile it were that method not there in the proper version of the BackgroundProcessing class.
-
I realize that NoSuchMethodError is pretty fatal, but could it be that it is a matter of scope, where perhaps import or startup can access setMediumPriorityServiceMaximumPoolSize even though the web interface cannot?
-
Nope. I can't replicate your issue on my 2.7.4 Mangoes.
Here is the class in question,
https://github.com/infiniteautomation/ma-core-public/blob/257f7b974d73254fa2e8aa650734b53a76b6ac48/Core/src/com/serotonin/m2m2/rt/maint/BackgroundProcessing.java
the method is clearly defined as public on line 166 -
Thanks. In that case, let's hope that next time I restart, deleting the __MACOSX/ directory fixed things.