SnmpInterfaceRrdMigratorOnline fails with: java.lang.NumberFormatException: For input string: "UNKN"

Description

Using jrobin, and StoreByGroup.
The RRD migrator fails on many RRD files with this kind of error:

Merging data from /opennms/current/share/rrd/snmp/1395/Fa1_0_21 to /opennms/current/share/rrd/snmp/1395/Fa1_0_21-0016c880ee97
merging JRB /opennms/current/share/rrd/snmp/1395/Fa1_0_21/mib2-interfaces.jrb into /opennms/current/share/rrd/snmp/1395/Fa1_0_21-0016c880ee97/mib2-interfaces.jrb
Error: Can't upgrade Interface[ifName=Fa1/0/21, nodeId=1395, foreignSource=hf_network_switch, foreignId=man-pehfswe1.ocado.com] because Failed to marshal/unmarshal XML file while unmarshalling an object (RRDv1): javax.xml.bind.UnmarshalException: java.lang.NumberFormatException: For input string: "UNKN"

  • with linked exception:
    [com.sun.xml.bind.api.AccessorException: java.lang.NumberFormatException: For input string: "UNKN"]; nested exception is javax.xml.bind.UnmarshalException: java.lang.NumberFormatException: For input string: "UNKN"

  • with linked exception:
    [com.sun.xml.bind.api.AccessorException: java.lang.NumberFormatException: For input string: "UNKN"]: org.opennms.core.xml.MarshallingResourceFailureException: Failed to marshal/unmarshal XML file while unmarshalling an object (RRDv1): javax.xml.bind.UnmarshalException: java.lang.NumberFormatException: For input string: "UNKN"

  • with linked exception:
    [com.sun.xml.bind.api.AccessorException: java.lang.NumberFormatException: For input string: "UNKN"]; nested exception is javax.xml.bind.UnmarshalException: java.lang.NumberFormatException: For input string: "UNKN"

  • with linked exception:
    [com.sun.xml.bind.api.AccessorException: java.lang.NumberFormatException: For input string: "UNKN"]
    at org.opennms.core.xml.MarshallingExceptionTranslator.translate(MarshallingExceptionTranslator.java:81)
    at org.opennms.core.xml.JaxbUtils.unmarshal(JaxbUtils.java:185)
    at org.opennms.core.xml.JaxbUtils.unmarshal(JaxbUtils.java:140)
    at org.opennms.core.xml.JaxbUtils.unmarshal(JaxbUtils.java:133)
    at org.opennms.netmgt.rrd.model.RrdConvertUtils.dumpJrb(RrdConvertUtils.java:70)
    at org.opennms.upgrade.implementations.SnmpInterfaceRrdMigratorOnline.mergeJrb(SnmpInterfaceRrdMigratorOnline.java:334)
    at org.opennms.upgrade.implementations.SnmpInterfaceRrdMigratorOnline.merge(SnmpInterfaceRrdMigratorOnline.java:278)
    at org.opennms.upgrade.implementations.SnmpInterfaceRrdMigratorOnline.execute(SnmpInterfaceRrdMigratorOnline.java:174)
    at org.opennms.upgrade.support.Upgrade.executeUpgrade(Upgrade.java:145)
    at org.opennms.upgrade.support.Upgrade.execute(Upgrade.java:234)
    at org.opennms.upgrade.support.Upgrade.main(Upgrade.java:260)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.opennms.bootstrap.Bootstrap$3.run(Bootstrap.java:362)
    at java.lang.Thread.run(Thread.java:744)
    Caused by: javax.xml.bind.UnmarshalException: java.lang.NumberFormatException: For input string: "UNKN"

  • with linked exception:
    [com.sun.xml.bind.api.AccessorException: java.lang.NumberFormatException: For input string: "UNKN"]
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:662)
    at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:258)
    at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.handleGenericException(Loader.java:245)
    at com.sun.xml.bind.v2.runtime.unmarshaller.LeafPropertyLoader.text(LeafPropertyLoader.java:67)
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.text(UnmarshallingContext.java:514)
    at com.sun.xml.bind.v2.runtime.unmarshaller.SAXConnector.processText(SAXConnector.java:181)
    at com.sun.xml.bind.v2.runtime.unmarshaller.SAXConnector.endElement(SAXConnector.java:154)
    at org.xml.sax.helpers.XMLFilterImpl.endElement(XMLFilterImpl.java:570)
    at org.opennms.core.xml.SimpleNamespaceFilter.endElement(SimpleNamespaceFilter.java:94)
    at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source)
    at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanEndElement(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
    at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
    at org.xml.sax.helpers.XMLFilterImpl.parse(XMLFilterImpl.java:357)
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:218)
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:196)
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:247)
    at org.opennms.core.xml.JaxbUtils.unmarshal(JaxbUtils.java:180)
    ... 15 more
    Caused by: com.sun.xml.bind.api.AccessorException: java.lang.NumberFormatException: For input string: "UNKN"
    at com.sun.xml.bind.v2.runtime.reflect.AdaptedAccessor.set(AdaptedAccessor.java:87)
    at com.sun.xml.bind.v2.runtime.reflect.TransducedAccessor$CompositeTransducedAccessorImpl.parse(TransducedAccessor.java:247)
    at com.sun.xml.bind.v2.runtime.unmarshaller.LeafPropertyLoader.text(LeafPropertyLoader.java:65)
    ... 33 more
    Caused by: java.lang.NumberFormatException: For input string: "UNKN"
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1241)
    at java.lang.Double.valueOf(Double.java:504)
    at java.lang.Double.<init>(Double.java:597)
    at org.opennms.netmgt.rrd.model.DoubleAdapter.unmarshal(DoubleAdapter.java:78)
    at org.opennms.netmgt.rrd.model.DoubleAdapter.unmarshal(DoubleAdapter.java:38)
    at com.sun.xml.bind.v2.runtime.reflect.AdaptedAccessor.set(AdaptedAccessor.java:85)
    ... 35 more
    . Rolling back changes
    Unzipping to /opennms/current/share/rrd/snmp/1395/Fa1_0_21/mib2-interfaces.jrb
    Unzipping to /opennms/current/share/rrd/snmp/1395/Fa1_0_21/mib2-X-interfaces.jrb
    Unzipping to /opennms/current/share/rrd/snmp/1395/Fa1_0_21/mib2-X-interfaces.meta
    Unzipping to /opennms/current/share/rrd/snmp/1395/Fa1_0_21/mib2-X-interfaces-pkts.meta
    Unzipping to /opennms/current/share/rrd/snmp/1395/Fa1_0_21/cisco-router-interface.jrb
    Unzipping to /opennms/current/share/rrd/snmp/1395/Fa1_0_21/cisco-router-interface.meta
    Unzipping to /opennms/current/share/rrd/snmp/1395/Fa1_0_21/mib2-X-interfaces-pkts.jrb
    Unzipping to /opennms/current/share/rrd/snmp/1395/Fa1_0_21/ds.properties
    Unzipping to /opennms/current/share/rrd/snmp/1395/Fa1_0_21/strings.properties
    Unzipping to /opennms/current/share/rrd/snmp/1395/Fa1_0_21/mib2-interfaces.meta
    Unzipping to /opennms/current/share/rrd/snmp/1395/Fa1_0_21-0016c880ee97/mib2-interfaces.jrb
    Unzipping to /opennms/current/share/rrd/snmp/1395/Fa1_0_21-0016c880ee97/mib2-X-interfaces.jrb
    Unzipping to /opennms/current/share/rrd/snmp/1395/Fa1_0_21-0016c880ee97/mib2-X-interfaces.meta
    Unzipping to /opennms/current/share/rrd/snmp/1395/Fa1_0_21-0016c880ee97/mib2-X-interfaces-pkts.meta
    Unzipping to /opennms/current/share/rrd/snmp/1395/Fa1_0_21-0016c880ee97/cisco-router-interface.jrb
    Unzipping to /opennms/current/share/rrd/snmp/1395/Fa1_0_21-0016c880ee97/cisco-router-interface.meta
    Unzipping to /opennms/current/share/rrd/snmp/1395/Fa1_0_21-0016c880ee97/mib2-X-interfaces-pkts.jrb
    Unzipping to /opennms/current/share/rrd/snmp/1395/Fa1_0_21-0016c880ee97/ds.properties
    Unzipping to /opennms/current/share/rrd/snmp/1395/Fa1_0_21-0016c880ee97/strings.properties
    Unzipping to /opennms/current/share/rrd/snmp/1395/Fa1_0_21-0016c880ee97/mib2-interfaces.meta

Environment

OS: Linux 3.2.0-0.bpo.1-amd64 (amd64) Java: 1.7.0_51 Oracle Corporation

Acceptance / Success Criteria

None

Attachments

1

Lucidchart Diagrams

Activity

Show:

Alejandro Galue January 31, 2014 at 8:38 AM

jcat, thanks for reporting the issue and for testing the solution.

The fix has been committed on revision bc77ff655a81d2eee4977c4d5e285fd768cd660c for 1.12, and will be available on 1.12.4

jcat January 31, 2014 at 6:30 AM

I compiled a new opennms-rrd-model-1.12.3.jar with the fix and dropped it in to a test system with the problematic RRDs.
It worked like a charm.

Many thanks for your quick response, I really appreciate it!

Can I presume this will make it into 1.12.4 ? I wouldn't be surprised if more people start to come out of the woodwork.

Cheers,
jcat

Alejandro Galue January 30, 2014 at 6:52 PM

I made a test to answer my own questions.

Yes, the last_ds should be considered as Double.
Yes, UNKN can be interpreted as a synonym of NaN.

Here is the fix for the issue for those who want to try it out:

I've created the following JUnit test with the JRB attached to the Jira issue and I was able to reproduce the issue and verify that the above solution works:

Of course, I need to test it with RRDtool

Ron Roskens January 30, 2014 at 4:11 PM

If the last_ds value starts with a 'U', it should be considered a Double.NaN. rrdtool stores the string value for this field as given on the command line.

According to the rrdtool code: the last reading from the data source. this is stored in ASCII to cater for very large counters we might encounter in connection with SNMP.

Alejandro Galue January 30, 2014 at 3:48 PM

jcat: the answers to your question are: yes and yes

ron: interesting ... in this case, I should consider UNKN as a possible value for Double. The question is: what's the numeric representation in Java ? for "NaN" is Double.NaN, what should I use for UNKN ? That's what I though that it was just a flaw instead of a valid thing considering that NaN exist. Another question is: what's the different between NAN and UNKN in terms of a Double Object ?

Fixed

Details

Assignee

Reporter

Components

Fix versions

Affects versions

Priority

PagerDuty

Created January 30, 2014 at 9:42 AM
Updated January 27, 2017 at 4:21 PM
Resolved January 31, 2014 at 8:38 AM