RRDtool 1.6 doesn't like vames called ds

Description

For some unknown reason this doesn't affect Horizon 18, but Meridian 16 using RRDtool 1.6.0 complains when naming a vname "ds".

For example:

[root@onms-meridian rrd]# /usr/bin/rrdtool graph /opt/opennms/data/tmp/opennms.rrdtool.3343676518579722860.png --start=1475085900 --end=1475172300 DEF:ds="snmp/4/Se3_0_201/ifOutOctets.rrd":ifOutOctets:AVERAGE PRINT:ds:MIN:"%le" PRINT:ds:AVERAGE:"%le" PRINT:ds:MAX:"%le" ERROR: undefined vname ds

But, if I rename it to something else like "ds1":

[root@onms-meridian rrd]# /usr/bin/rrdtool graph /opt/opennms/data/tmp/opennms.rrdtool.3343676518579722860.png --start=1475085900 --end=1475172300 DEF:ds1="snmp/4/Se3_0_201/ifOutOctets.rrd":ifOutOctets:AVERAGE PRINT:ds1:MIN:"%le" PRINT:ds1:AVERAGE:"%le" PRINT:ds1:MAX:"%le" 0x0 6.625783e+01 6.669313e+01 6.719437e+01

Because of this error, the summary report obtained through an URL like the following is not working on Meridian (but works on Horizon):

curl -u admin:admin "http://localhost:8980/opennms/summary/results.htm?filterRule=ipaddr%3D%2712.0.0.2%27&startTime=1475085900&endTime=1475172300&attributeSieve=if(In|Out)Octets"

The command is generated inside the DefaultRrdDao.java (to be more precise, the method named getPrintValues):

Caused by: org.opennms.netmgt.rrd.RrdException: Can't execute command /usr/bin/rrdtool graph /opt/opennms/data/tmp/opennms.rrdtool.8634894254809112395.png --start=1475085900 --end=1475172300 DEF:ds="snmp/4/Se3_0_201/ifOutOctets.rrd":ifOutOctets:AVERAGE PRINT:ds:MIN:"%le" PRINT:ds:AVERAGE:"%le" PRINT:ds:MAX:"%le" at org.opennms.netmgt.rrd.rrdtool.AbstractJniRrdStrategy.createGraphReturnDetails(AbstractJniRrdStrategy.java:195) ~[opennms-rrdtool-api-2016.1.3.jar:?] at org.opennms.netmgt.rrd.QueuingRrdStrategy.createGraphReturnDetails(QueuingRrdStrategy.java:1298) ~[opennms-rrd-api-2016.1.3.jar:?] at org.opennms.netmgt.dao.support.DefaultRrdDao.getPrintValues(DefaultRrdDao.java:110) ~[opennms-dao-2016.1.3.jar:?] at org.opennms.web.svclayer.rrd.support.DefaultRrdSummaryService$1.getValues(DefaultRrdSummaryService.java:390) ~[opennms-webapp-2016.1.3.jar:?] at org.opennms.web.svclayer.rrd.support.DefaultRrdSummaryService$1.addAttributes(DefaultRrdSummaryService.java:376) ~[opennms-webapp-2016.1.3.jar:?] at org.opennms.web.svclayer.rrd.support.DefaultRrdSummaryService$1.addResource(DefaultRrdSummaryService.java:365) ~[opennms-webapp-2016.1.3.jar:?] at org.opennms.web.svclayer.rrd.support.DefaultRrdSummaryService$1.addResource(DefaultRrdSummaryService.java:358) ~[opennms-webapp-2016.1.3.jar:?] at org.opennms.web.svclayer.rrd.support.DefaultRrdSummaryService$1.visitNode(DefaultRrdSummaryService.java:313) ~[opennms-webapp-2016.1.3.jar:?] at org.opennms.netmgt.dao.support.FilterWalker.walk(FilterWalker.java:61) ~[opennms-dao-2016.1.3.jar:?] at org.opennms.web.svclayer.rrd.support.DefaultRrdSummaryService.getSummary(DefaultRrdSummaryService.java:397) ~[opennms-webapp-2016.1.3.jar:?] at org.opennms.web.svclayer.rrd.support.DefaultRrdSummaryService.getSummary(DefaultRrdSummaryService.java:462) ~[opennms-webapp-2016.1.3.jar:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_92] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_92] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_92] at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_92] at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317) ~[org.apache.servicemix.bundles.spring-aop-4.0.5.RELEASE_1.jar:?] at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190) ~[org.apache.servicemix.bundles.spring-aop-4.0.5.RELEASE_1.jar:?] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) ~[org.apache.servicemix.bundles.spring-aop-4.0.5.RELEASE_1.jar:?] ... Caused by: org.opennms.netmgt.rrd.RrdException: ERROR: undefined vname ds at org.opennms.netmgt.rrd.rrdtool.AbstractJniRrdStrategy.createGraphAsByteArray(AbstractJniRrdStrategy.java:95) ~[opennms-rrdtool-api-2016.1.3.jar:?] at org.opennms.netmgt.rrd.rrdtool.AbstractJniRrdStrategy.createGraph(AbstractJniRrdStrategy.java:68) ~[opennms-rrdtool-api-2016.1.3.jar:?] at org.opennms.netmgt.rrd.rrdtool.AbstractJniRrdStrategy.createGraphReturnDetails(AbstractJniRrdStrategy.java:165) ~[opennms-rrdtool-api-2016.1.3.jar:?] at org.opennms.netmgt.rrd.QueuingRrdStrategy.createGraphReturnDetails(QueuingRrdStrategy.java:1298) ~[opennms-rrd-api-2016.1.3.jar:?] at org.opennms.netmgt.dao.support.DefaultRrdDao.getPrintValues(DefaultRrdDao.java:110) ~[opennms-dao-2016.1.3.jar:?]

Acceptance / Success Criteria

None

Lucidchart Diagrams

Activity

Alejandro Galue October 11, 2016 at 1:50 PM

I verified that the fix was propagated from foundation-2016 to develop and release-18.0.3 (as well as Meridian's develop)

Jesse White October 2, 2016 at 6:28 PM

I closed this one too fast, I'll keep it open until this is cherry-picked into the proper branches.

Alejandro Galue September 29, 2016 at 3:04 PM

Alejandro Galue September 29, 2016 at 2:56 PM

By just renaming the vname, the problem is gone:

diff --git a/opennms-dao/src/main/java/org/opennms/netmgt/dao/support/DefaultRrdDao.java b/opennms-dao/src/main/java/org/opennms/netmgt/dao/support/DefaultRrdDao.java index 9a597e5..06ddee2 100644 --- a/opennms-dao/src/main/java/org/opennms/netmgt/dao/support/DefaultRrdDao.java +++ b/opennms-dao/src/main/java/org/opennms/netmgt/dao/support/DefaultRrdDao.java @@ -94,12 +94,12 @@ public class DefaultRrdDao implements RrdDao, InitializingBean { "-", "--start=" + (startTimeInMillis / 1000), "--end=" + (endTimeInMillis / 1000), - "DEF:ds=" + RrdFileConstants.escapeForGraphing(rrdAttribute.getRrdRelativePath()) + ":" + attribute.getName() + ":" + rraConsolidationFunction, + "DEF:ds1=" + RrdFileConstants.escapeForGraphing(rrdAttribute.getRrdRelativePath()) + ":" + attribute.getName() + ":" + rraConsolidationFunction, }; String[] printDefs = new String[printFunctions.length]; for (int i = 0; i < printFunctions.length; i++) { - printDefs[i] = "PRINT:ds:" + printFunctions[i] + ":\"%le\""; + printDefs[i] = "PRINT:ds1:" + printFunctions[i] + ":\"%le\""; } String commandString = StringUtils.arrayToDelimitedString(command, " ") + ' ' + StringUtils.arrayToDelimitedString(printDefs, " ");

I tested it on a VM running Meridian 2016.1.3 and it works:

[root@onms-meridian ~]# curl -u admin:admin "http://localhost:8980/opennms/summary/results.htm?filterRule=ipaddr%3D%2712.0.0.2%27&startTime=1475085900&endTime=1475172300&attributeSieve=if(In|Out)Octets" <?xml version="1.0" encoding="UTF-8"?> <summary xmlns="http://xmlns.opennms.org/xsd/attr-summary"> <resource> <name>Valencia</name> <resource> <name>Se3/0.201 (Caracas, 12.0.0.2, 1.544 Mbps)</name> <attribute> <name>ifOutOctets</name> <min>66.25783</min> <average>66.69313</average> <max>67.19437</max> </attribute> <attribute> <name>ifInOctets</name> <min>44.76824</min> <average>45.15052</average> <max>45.80749</max> </attribute> </resource> <resource> <name>Lo0 (192.168.4.4, 8 Gbps)</name> <attribute> <name>ifOutOctets</name> <min>12.88933</min> <average>12.97805</average> <max>13.05602</max> </attribute> <attribute> <name>ifInOctets</name> <min>0.0</min> <average>0.0</average> <max>0.0</max> </attribute> </resource> </resource> </summary>

Alejandro Galue September 29, 2016 at 2:34 PM

Fixing the name doesn't hurt for Horizon, as this is just a placeholder (it can be whatever we want). This is why I've created this error on the OpenNMS project instead of the LTS project.

Fixed

Details

Assignee

Reporter

Labels

Affects versions

Priority

PagerDuty

Created September 29, 2016 at 2:33 PM
Updated October 11, 2016 at 1:50 PM
Resolved October 11, 2016 at 1:50 PM

Flag notifications