Code that calls stuff in FilterDao often ignores thrown Exceptions

Description

For example, if you specify a bogus filter in a threshd package, OpenNMS still starts successfully, but threshd doesn't properly initialize (at least for that package?). Here's an example log message:

011-03-30 18:02:26,003 ERROR [Main] ThreshdConfigFactory: createPackageIpMap: failed to map package: sfdb to an IP List
org.opennms.netmgt.filter.FilterParseException: SQL Exception occurred getting IP List: org.postgresql.util.PSQLException: ERROR: syntax error at end of input
Position: 275
at org.opennms.netmgt.dao.support.JdbcFilterDao.getIPList(JdbcFilterDao.java:297)
at org.opennms.netmgt.config.ThreshdConfigManager.createPackageIpListMap(ThreshdConfigManager.java:167)
at org.opennms.netmgt.config.ThreshdConfigManager.<init>(ThreshdConfigManager.java:112)
at org.opennms.netmgt.config.ThreshdConfigFactory.<init>(ThreshdConfigFactory.java:97)
at org.opennms.netmgt.config.ThreshdConfigFactory.init(ThreshdConfigFactory.java:131)
at org.opennms.netmgt.config.ThreshdConfigFactory.reload(ThreshdConfigFactory.java:154)
at org.opennms.netmgt.threshd.jmx.Threshd.onInit(Threshd.java:61)
at org.opennms.netmgt.daemon.AbstractServiceDaemon.init(AbstractServiceDaemon.java:196)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.jmx.mbeanserver.StandardMBeanIntrospector.invokeM2(StandardMBeanIntrospector.java:93)
at com.sun.jmx.mbeanserver.StandardMBeanIntrospector.invokeM2(StandardMBeanIntrospector.java:27)
at com.sun.jmx.mbeanserver.MBeanIntrospector.invokeM(MBeanIntrospector.java:208)
at com.sun.jmx.mbeanserver.PerInterface.invoke(PerInterface.java:120)
at com.sun.jmx.mbeanserver.MBeanSupport.invoke(MBeanSupport.java:262)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:836)
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:761)
at org.opennms.netmgt.vmmgr.Invoker.invoke(Invoker.java:312)
at org.opennms.netmgt.vmmgr.Invoker.invokeMethods(Invoker.java:235)
at org.opennms.netmgt.vmmgr.Starter.start(Starter.java:258)
at org.opennms.netmgt.vmmgr.Starter.startDaemon(Starter.java:126)
at org.opennms.netmgt.vmmgr.Controller.start(Controller.java:196)
at org.opennms.netmgt.vmmgr.Controller.main(Controller.java:168)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.opennms.bootstrap.Bootstrap$3.run(Bootstrap.java:368)
at java.lang.Thread.run(Thread.java:662)

In this case, ThreshdConfigManager.createPackageIpListMap calls FilterDao.getIPList, but all throwables are caught and logged but nothing else is done with it.

There are similar problems with the createPackageIpListMap methods in these files:

./integrations/opennms-map-provisioning-adapter/src/main/java/org/opennms/netmgt/config/MapsAdapterConfigManager.java
./integrations/opennms-rancid/src/main/java/org/opennms/netmgt/config/RancidAdapterConfigManager.java
./opennms-dao/src/main/java/org/opennms/netmgt/config/CollectdConfig.java
./opennms-services/src/main/java/org/opennms/netmgt/config/PollerConfigManager.java
./opennms-services/src/main/java/org/opennms/netmgt/config/SnmpInterfacePollerConfigManager.java
./opennms-services/src/main/java/org/opennms/netmgt/config/ThreshdConfigManager.java

Ah, duplication, isn't it great?

There are other classes that call FilterDao.getIPList (21 by my probably-not-accurate grep) and some of them have problems, and I'd have to bet that other methods called by FilterDao have similar problems. There are likely other gobbled up Exceptions in other config manager code, too. On top of this, the error message in the exception shown above sucks, too, because it doesn't show the filter that was passed to getIPList, nor the generated SQL that was eventually the problem. Lots of opportunities for improvement.

Acceptance / Success Criteria

None

Lucidchart Diagrams

Activity

Show:

Seth Leger June 28, 2011 at 3:57 PM

I improved the error messages on these log messages so that they will print the filter string that failed. So this should solve part of the "error message in the exception shown above sucks" problem.

Details

Assignee

Reporter

Labels

Components

Affects versions

Priority

PagerDuty

Created March 30, 2011 at 11:37 PM
Updated September 21, 2021 at 6:22 PM