[CONTROLLER-1445] Having empty-containers make NormalizedNodeInputStreamReader go beserk Created: 06/Nov/15 Updated: 17/Nov/15 Resolved: 17/Nov/15 |
|
| Status: | Resolved |
| Project: | controller |
| Component/s: | clustering |
| Affects Version/s: | Beryllium |
| Fix Version/s: | None |
| Type: | Bug | ||
| Reporter: | Shuva Jyoti Kar | Assignee: | Tom Pantelis |
| Resolution: | Cannot Reproduce | Votes: | 0 |
| Labels: | None | ||
| Remaining Estimate: | Not Specified | ||
| Time Spent: | Not Specified | ||
| Original Estimate: | Not Specified | ||
| Environment: |
Operating System: Linux |
||
| External issue ID: | 4590 |
| Priority: | High |
| Description |
|
Version Used : Lithium Stable release. Planning to repeat this on Beryllium master – will update on the same. Test Case (this case is very specific to Openflow inventory model, but this could be a generic issue) Empty-bucket group addition case Operation : PUT Body : Exception seen on the logs during RESTART (where NormalizedNodeInputStreamReader kicks-in) 2015-11-05 04:10:44,317 | DEBUG | ult-dispatcher-7 | NormalizedNodeInputStreamReader | 218 - org.opendaylight.controller.sal-clustering-commons - 1.2.1.SNAPSHOT | Muthu: Reading map entry node MAP_ENTRY_NODE qName (urn:opendaylight:inventory?revision=2013-08-19)node keyValueMap {(urn:opendaylight:inventory?revision=2013-08-19)id=openflow:1}2015-11-05 04:10:44,318 | ERROR | ult-dispatcher-7 | DataTreeCandidatePayload | 226 - org.opendaylight.controller.sal-distributed-datastore - 1.2.1.SNAPSHOT | Muthu : Exception in SUBTREE_MODIFIED case of parseCandidate ModifiedDataTreeCandidateNode {} |
| Comments |
| Comment by Tony Tkacik [ 06/Nov/15 ] |
|
Seems some code / binary change in clustering recovery changed binary format Revision 'urn:opendaylight:inventory'is not in a supported format Points at trying to parse namespace as revision. |
| Comment by Muthukumaran Kothandaraman [ 06/Nov/15 ] |
|
Looks like what Tony says closely resembles debugging observation In NormalizedInputStreamReader.java private String readCodedString() throws IOException { else if(valueType == NormalizedNodeOutputStreamWriter.IS_STRING_VALUE) { String value = input.readUTF().intern(); codedStringMap.put(Integer.valueOf(codedStringMap.size()), value); return value; } return null; THIS METHOD ALWAYS RETURNS NULL - As a consequence, in below case, private QName readQName() throws IOException { String qName; else { qName = reusableStringBuilder.append('(').append(namespace).append(')'). append(localName).toString(); } reusableStringBuilder.delete(0, reusableStringBuilder.length()); Since revision does not contain data, this results in |
| Comment by Tony Tkacik [ 06/Nov/15 ] |
|
Could you attach payload with which you are observing error? Also is this reproducible on Beryllium master and released Lithium (NOT SRs) |
| Comment by Muthukumaran Kothandaraman [ 06/Nov/15 ] |
|
(In reply to Tony Tkacik from comment #3) Payload is following (only group needs to be created - no flows) : Operation : PUT <?xml version="1.0" encoding="UTF-8" standalone="no"?> Tested Release : Lithium Stable One observation is that NormalizedNodeInputStreamReader.java has no changes since Lithium Stable release. So, I suspect that it should be reproducible in Beryllium master too. I will verify and confirm as soon as possible with Beryllium |
| Comment by Tom Pantelis [ 09/Nov/15 ] |
|
I was not able to reproduce this on the latest Li SR3. I didn't install the entire openflowplugin but I copied the relevant yang models to my controller build. I first did PUT to http://localhost:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1 <node xmlns="urn:opendaylight:inventory"> Then I PUT to http://localhost:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/group/1 <group xmlns="urn:opendaylight:flow:inventory"> On restart, the data recovered fine. According to the bug description, my steps look to be equivalent unless I missed something. Can you try to reproduce with Li SR3? |
| Comment by Moiz Raja [ 17/Nov/15 ] |
|
Not an issue |