|
It works for JSON, but hangs for XML, so I do not think that this issue is OpenFlowPlugin related at all. Maybe it is restconf related?
|
|
We need karaf.log and probably a thread dump.
Also, what does 'controller hangs' mean?
|
|
I just tried this, the REST request hangs and I can perform other REST requests but the controller goes crazy in CPU even when I cancel the original request.
There is nothing out of normal in karaf log and I attach the thread dump.
|
|
Attachment thread_dump.txt has been added with description: Thread dump
|
|
"qtp181445460-221" #221 prio=5 os_prio=0 tid=0x00007f18241d3000 nid=0x175c runnable [0x00007f17b1ee6000]
java.lang.Thread.State: RUNNABLE
at java.lang.String.intern(Native Method)
at com.sun.org.apache.xerces.internal.util.SymbolTable$Entry.<init>(SymbolTable.java:448)
at com.sun.org.apache.xerces.internal.util.SymbolTable.addSymbol0(SymbolTable.java:195)
at com.sun.org.apache.xerces.internal.util.SymbolTable.addSymbol(SymbolTable.java:176)
at com.sun.xml.internal.stream.writers.XMLStreamWriterImpl$NamespaceContextImpl.getNamespaceURI(XMLStreamWriterImpl.java:2051)
at org.opendaylight.yangtools.yang.data.codec.xml.RandomPrefix.alreadyUsedPrefix(RandomPrefix.java:66)
at org.opendaylight.yangtools.yang.data.codec.xml.RandomPrefix.encodePrefix(RandomPrefix.java:55)
at org.opendaylight.yangtools.yang.data.codec.xml.RandomPrefixInstanceIdentifierSerializer.prefixForNamespace(RandomPrefixInstanceIdentifierSerializer.java:34)
at org.opendaylight.yangtools.yang.data.util.AbstractNamespaceCodec.appendQName(AbstractNamespaceCodec.java:45)
at org.opendaylight.yangtools.yang.data.util.AbstractStringInstanceIdentifierCodec.serialize(AbstractStringInstanceIdentifierCodec.java:51)
at org.opendaylight.yangtools.yang.data.codec.xml.SchemaAwareXMLStreamWriterUtils.writeInstanceIdentifier(SchemaAwareXMLStreamWriterUtils.java:41)
at org.opendaylight.yangtools.yang.data.codec.xml.XMLStreamWriterUtils.write(XMLStreamWriterUtils.java:149)
at org.opendaylight.yangtools.yang.data.codec.xml.XMLStreamWriterUtils.writeValue(XMLStreamWriterUtils.java:103)
at org.opendaylight.yangtools.yang.data.codec.xml.XMLStreamWriterUtils.writeValue(XMLStreamWriterUtils.java:79)
at org.opendaylight.yangtools.yang.data.codec.xml.SchemaAwareXMLStreamNormalizedNodeStreamWriter.writeValue(SchemaAwareXMLStreamNormalizedNodeStreamWriter.java:51)
at org.opendaylight.yangtools.yang.data.codec.xml.SchemaAwareXMLStreamNormalizedNodeStreamWriter.writeValue(SchemaAwareXMLStreamNormalizedNodeStreamWriter.java:32)
at org.opendaylight.yangtools.yang.data.codec.xml.XMLStreamNormalizedNodeStreamWriter.writeElement(XMLStreamNormalizedNodeStreamWriter.java:179)
at org.opendaylight.yangtools.yang.data.codec.xml.SchemaAwareXMLStreamNormalizedNodeStreamWriter.leafNode(SchemaAwareXMLStreamNormalizedNodeStreamWriter.java:90)
at org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter.wasProcessAsSimpleNode(NormalizedNodeWriter.java:145)
at org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter.write(NormalizedNodeWriter.java:101)
at org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter.writeChildren(NormalizedNodeWriter.java:169)
at org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter.wasProcessedAsCompositeNode(NormalizedNodeWriter.java:223)
at org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter.write(NormalizedNodeWriter.java:97)
at org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter.writeChildren(NormalizedNodeWriter.java:169)
at org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter$OrderedNormalizedNodeWriter.writeMapEntryNode(NormalizedNodeWriter.java:283)
at org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter.wasProcessedAsCompositeNode(NormalizedNodeWriter.java:208)
at org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter.write(NormalizedNodeWriter.java:97)
at org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter.writeChildren(NormalizedNodeWriter.java:169)
at org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter.wasProcessedAsCompositeNode(NormalizedNodeWriter.java:238)
at org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter.write(NormalizedNodeWriter.java:97)
at org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter.writeChildren(NormalizedNodeWriter.java:169)
at org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter$OrderedNormalizedNodeWriter.writeMapEntryNode(NormalizedNodeWriter.java:283)
at org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter.wasProcessedAsCompositeNode(NormalizedNodeWriter.java:208)
at org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter.write(NormalizedNodeWriter.java:97)
at org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter.writeChildren(NormalizedNodeWriter.java:169)
at org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter.wasProcessedAsCompositeNode(NormalizedNodeWriter.java:238)
at org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter.write(NormalizedNodeWriter.java:97)
at org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter.writeChildren(NormalizedNodeWriter.java:169)
at org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter.wasProcessedAsCompositeNode(NormalizedNodeWriter.java:195)
at org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter.write(NormalizedNodeWriter.java:97)
at org.opendaylight.netconf.sal.rest.impl.RestconfDelegatingNormalizedNodeWriter.write(RestconfDelegatingNormalizedNodeWriter.java:37)
at org.opendaylight.netconf.sal.rest.impl.RestconfDelegatingNormalizedNodeWriter.write(RestconfDelegatingNormalizedNodeWriter.java:19)
at org.opendaylight.netconf.sal.rest.impl.NormalizedNodeXmlBodyWriter.writeNormalizedNode(NormalizedNodeXmlBodyWriter.java:127)
at org.opendaylight.netconf.sal.rest.impl.NormalizedNodeXmlBodyWriter.writeTo(NormalizedNodeXmlBodyWriter.java:104)
at org.opendaylight.netconf.sal.rest.impl.NormalizedNodeXmlBodyWriter.writeTo(NormalizedNodeXmlBodyWriter.java:52)
at com.sun.jersey.spi.container.ContainerResponse.write(ContainerResponse.java:306)
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1479)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1391)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1381)
at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:538)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:716)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
Looks like RandomPrefix incorrectly processes the result of NamespaceContext.getNamespaceURI().
|
|
In case it helps, here is the json output for the request that fais in XML:
{
"network-topology": {
"topology": [
{
"topology-id": "flow:1",
"node": [
{
"node-id": "openflow:1",
"opendaylight-topology-inventory:inventory-node-ref": "/opendaylight-inventory:nodes/opendaylight-inventory:node[opendaylight-inventory:id='openflow:1']",
"termination-point": [
{
"tp-id": "openflow:1:LOCAL",
"opendaylight-topology-inventory:inventory-node-connector-ref": "/opendaylight-inventory:nodes/opendaylight-inventory:node[opendaylight-inventory:id='openflow:1']/opendaylight-inventory:node-connector[opendaylight-inventory:id='openflow:1:LOCAL']"
}
,
{
"tp-id": "openflow:1:1",
"opendaylight-topology-inventory:inventory-node-connector-ref": "/opendaylight-inventory:nodes/opendaylight-inventory:node[opendaylight-inventory:id='openflow:1']/opendaylight-inventory:node-connector[opendaylight-inventory:id='openflow:1:1']"
}
]
}
]
}
]
}
}
|
|
This also may have to do with RESTCONF's use of namespace repairing. It should not be needing that, I think.
Maybe we should be checking the XMLWriter instance configuration?
|
|
after performed investigation I have suspicios that maybe this loop (https://github.com/opendaylight/yangtools/blob/master/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/xml/RandomPrefix.java#L54) runs infinitely, but I am not sure yet...
|
|
master: https://git.opendaylight.org/gerrit/60736
This looks like a bug in JDK, as the return value does not seem to conform to javadoc (which states that for unbound prefixes an empty string should be returned).
|
|
In fact javax.xml.bind.DatatypeConverterImpl in jdk-1.8.0.131 on line 403 says:
uri = nsc.getNamespaceURI(prefix);
// uri can never be null according to javadoc,
// but some users reported that there are implementations that return null.
if (uri == null || uri.length() == 0) // crap. the NamespaceContext interface is broken.
// error: unbound prefix
{
throw new IllegalArgumentException("prefix " + prefix + " is not bound to a namespace");
}
|
Generated at Wed Feb 07 20:54:20 UTC 2024 using Jira 8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d.