SnmpInterfaceRrdMigratorOnline fails with: java.lang.NumberFormatException: For input string: "UNKN"
Description
Environment
Acceptance / Success Criteria
Attachments
Lucidchart Diagrams
Activity

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 ?
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