[CONTROLLER-889] DataStore failure in StatisticsManager Created: 23/Sep/14  Updated: 19/Oct/17  Resolved: 05/May/15

Status: Resolved
Project: controller
Component/s: adsal
Affects Version/s: Helium
Fix Version/s: None

Type: Bug
Reporter: Thomas Bachman Assignee: Unassigned
Resolution: Done Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified
Environment:

Operating System: All
Platform: All


Attachments: Text File tbachman-karaf-3-bug2019.log    
Issue Links:
Duplicate
is duplicated by CONTROLLER-902 When L2 switch installed, its flows ... Resolved
External issue ID: 2049
Priority: Normal

 Description   

I see the following exception in the karaf log:

2014-09-23 04:59:58,150 | WARN | ds-oper-thread-0 | StatisticsManagerImpl | 218 - org.opendaylight.controller.md.statistics-manager - 1.1.0.SNAPSHOT | Stat DataStore Operation executor fail!
java.lang.IllegalArgumentException: value already present: Uri [_value=5|8|9|8|64999|Match [_ethernetMatch=EthernetMatch [_ethernetType=EthernetType [_type=EtherType [_value=2048], augmentation=[]], augmentation=[]], _ipMatch=IpMatch [_ipProtocol=1, augmentation=[]], augmentation=[GeneralAugMatchNodesNodeTableFlow [_extensionList=[ExtensionList [_extension=Extension [augmentation=[NxAugMatchNodesNodeTableFlow [_nxmNxReg=NxmNxReg [_reg=class org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg0, _value=5, augmentation=[]]]]], _extensionKey=class org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxReg0Key, _key=ExtensionListKey [_extensionKey=class org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxReg0Key], augmentation=[]], ExtensionList [_extension=Extension [augmentation=[NxAugMatchNodesNodeTableFlow [_nxmNxReg=NxmNxReg [_reg=class org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg1, _value=8, augmentation=[]]]]], _extensionKey=class org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxReg1Key, _key=ExtensionListKey [_extensionKey=class org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxReg1Key], augmentation=[]], ExtensionList [_extension=Extension [augmentation=[NxAugMatchNodesNodeTableFlow [_nxmNxReg=NxmNxReg [_reg=class org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg2, _value=9, augmentation=[]]]]], _extensionKey=class org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxReg2Key, _key=ExtensionListKey [_extensionKey=class org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxReg2Key], augmentation=[]], ExtensionList [_extension=Extension [augmentation=[NxAugMatchNodesNodeTableFlow [_nxmNxReg=NxmNxReg [_reg=class org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg3, _value=8, augmentation=[]]]]], _extensionKey=class org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxReg3Key, _key=ExtensionListKey [_extensionKey=class org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxReg3Key], augmentation=[]]]]]]]
at com.google.common.collect.HashBiMap.put(HashBiMap.java:241)[78:com.google.guava:14.0.1]
at com.google.common.collect.HashBiMap.put(HashBiMap.java:218)[78:com.google.guava:14.0.1]
at org.opendaylight.controller.md.statistics.manager.impl.StatListenCommitFlow$TableFlowUpdateState.<init>(StatListenCommitFlow.java:305)[218:org.opendaylight.controller.md.statistics-manager:1.1.0.SNAPSHOT]
at org.opendaylight.controller.md.statistics.manager.impl.StatListenCommitFlow$NodeUpdateState.<init>(StatListenCommitFlow.java:269)[218:org.opendaylight.controller.md.statistics-manager:1.1.0.SNAPSHOT]
at org.opendaylight.controller.md.statistics.manager.impl.StatListenCommitFlow.statsFlowCommitAll(StatListenCommitFlow.java:219)[218:org.opendaylight.controller.md.statistics-manager:1.1.0.SNAPSHOT]
at org.opendaylight.controller.md.statistics.manager.impl.StatListenCommitFlow.access$100(StatListenCommitFlow.java:82)[218:org.opendaylight.controller.md.statistics-manager:1.1.0.SNAPSHOT]
at org.opendaylight.controller.md.statistics.manager.impl.StatListenCommitFlow$2.applyOperation(StatListenCommitFlow.java:194)[218:org.opendaylight.controller.md.statistics-manager:1.1.0.SNAPSHOT]
at org.opendaylight.controller.md.statistics.manager.impl.StatisticsManagerImpl.run(StatisticsManagerImpl.java:196)[218:org.opendaylight.controller.md.statistics-manager:1.1.0.SNAPSHOT]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)[:1.7.0_65]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)[:1.7.0_65]
at java.lang.Thread.run(Thread.java:745)[:1.7.0_65]

Thereafter, I see the following repeat over and over in the logs:

2014-09-23 05:00:28,123 | WARN | ds-oper-thread-0 | StatisticsManagerImpl | 218 - org.opendaylight.controller.md.statistics-manager - 1.1.0.SNAPSHOT | Stat DataStoreOperation unexpected State!
java.lang.IllegalStateException: Previous transaction DOM-OPER-621 is not ready yet
at com.google.common.base.Preconditions.checkState(Preconditions.java:176)[78:com.google.guava:14.0.1]
at org.opendaylight.controller.md.sal.dom.store.impl.InMemoryDOMDataStore$DOMStoreTransactionChainImpl.getSnapshot(InMemoryDOMDataStore.java:244)[166:org.opendaylight.controller.sal-inmemory-datastore:1.1.0.SNAPSHOT]
at org.opendaylight.controller.md.sal.dom.store.impl.InMemoryDOMDataStore$DOMStoreTransactionChainImpl.newReadWriteTransaction(InMemoryDOMDataStore.java:266)[166:org.opendaylight.controller.sal-inmemory-datastore:1.1.0.SNAPSHOT]
at org.opendaylight.controller.md.sal.dom.broker.impl.AbstractDOMForwardedTransactionFactory.newReadWriteTransaction(AbstractDOMForwardedTransactionFactory.java:183)[160:org.opendaylight.controller.sal-broker-impl:1.1.0.SNAPSHOT]
at org.opendaylight.controller.md.sal.binding.impl.BindingTranslatedTransactionChain.newReadWriteTransaction(BindingTranslatedTransactionChain.java:63)[163:org.opendaylight.controller.sal-binding-broker-impl:1.1.0.SNAPSHOT]
at org.opendaylight.controller.md.statistics.manager.impl.StatisticsManagerImpl.run(StatisticsManagerImpl.java:191)[218:org.opendaylight.controller.md.statistics-manager:1.1.0.SNAPSHOT]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)[:1.7.0_65]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)[:1.7.0_65]
at java.lang.Thread.run(Thread.java:745)[:1.7.0_65]



 Comments   
Comment by Michal Rehak [ 24/Sep/14 ]

https://git.opendaylight.org/gerrit/11539
this is just a draft catching the exception - not fixing the reason.

Processing statistic item where flow hash or flow.if are already in BiMap thows exception. This state might be result of node reconciliation where device sends new set of statistics and those are mistakenly joined with old ones.

Added logging should shed more light on that.

Comment by Tony Tkacik [ 25/Sep/14 ]

Submitted workaround is not fix,
what actually may happened that there was Flow hash collision,
used BiMap has strong requiremed of one to one mapping.

Using try block it is possible to mark flow with colliding hash as alien flow.
This alien flow ID will not make it into mapping, so next time flow will be reported
with different ID and may leave garbage in inventory.

Comment by Thomas Bachman [ 25/Sep/14 ]

It appears that these are now caught. I still see messages in the logs that I'm guessing are the result of catching the exceptions. Since the source of the exception hasn't been addressed, it seems like we should keep the bug open, but this doesn't seem like a blocking issue any more.

Comment by Michal Rehak [ 25/Sep/14 ]

Attachment tbachman-karaf-3-bug2019.log has been added with description: log after catching bimap exception

Comment by Thomas Bachman [ 26/Sep/14 ]

Fixed in:

https://git.opendaylight.org/gerrit/11598

Comment by Carol Sanders [ 05/May/15 ]

This bug is part of the project to Move all ADSAL associated component bugs to ADSAL.

Generated at Wed Feb 07 19:54:08 UTC 2024 using Jira 8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d.