[L2SWITCH-48] config-pusher fails in arp-handler module when loading l2switch after openflowplugin Created: 18/Jun/15 Updated: 19/Oct/17 Resolved: 19/Jun/15 |
|
| Status: | Resolved |
| Project: | l2switch |
| Component/s: | General |
| Affects Version/s: | unspecified |
| Fix Version/s: | None |
| Type: | Bug | ||
| Reporter: | Jamo Luhrsen | Assignee: | Amit Mandke |
| Resolution: | Done | Votes: | 0 |
| Labels: | None | ||
| Remaining Estimate: | Not Specified | ||
| Time Spent: | Not Specified | ||
| Original Estimate: | Not Specified | ||
| Environment: |
Operating System: All |
||
| Issue Links: |
|
||||||||
| External issue ID: | 3811 | ||||||||
| Description |
|
l2switch is not working if the feature set is loaded after loading the openflowplugin-flow-services-ui feature. not working means, pingall is not working with mininet. steps to reproduce: install odl-openflowplugin-flow-services-ui after a few moments an Exception (below) is seen for config-pusher for the Exception: Exception in thread "config-pusher" java.lang.IllegalStateException: Error - getInstance() failed for ModuleIdentifier {factoryName='arp-handler-impl', instanceName='arp-handler-impl'}in transaction TransactionIdentifier {name='ConfigTransaction-91-93'} at org.opendaylight.controller.config.manager.impl.ConfigTransactionControllerImpl.secondPhaseCommit(ConfigTransactionControllerImpl.java:405) |
| Comments |
| Comment by Jamo Luhrsen [ 18/Jun/15 ] |
|
This was seen with Lithium RC1 as well as latest stable/lithium from nexus: |
| Comment by Luis Gomez [ 18/Jun/15 ] |
|
In addition when I test other projects features with l2switch I also see similar time to time: 2015-06-18 13:53:50,385 | ERROR | config-pusher | ConfigTransactionControllerImpl | 91 - org.opendaylight.controller.config-manager - 0.4.0.SNAPSHOT | Commit failed on ModuleIdentifier {factoryName='arp-handler-impl', instanceName='arp-handler-impl'} in transaction TransactionIdentifier{name='ConfigTransaction-189-191'}org.opendaylight.yangtools.binding.data.codec.impl.IncorrectNestingException: Class interface org.opendaylight.yang.gen.v1.urn.opendaylight.l2switch.loopremover.rev140714.StpStatusAwareNodeConnector is not valid child of interface org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector at org.opendaylight.yangtools.binding.data.codec.impl.IncorrectNestingException.create(IncorrectNestingException.java:28) at org.opendaylight.yangtools.binding.data.codec.impl.DataContainerCodecContext.childNonNull(DataContainerCodecContext.java:178) at org.opendaylight.yangtools.binding.data.codec.impl.DataObjectCodecContext.bindingPathArgumentChild(DataObjectCodecContext.java:178) at org.opendaylight.yangtools.binding.data.codec.impl.BindingCodecContext.getCodecContextNode(BindingCodecContext.java:127) at org.opendaylight.yangtools.binding.data.codec.impl.InstanceIdentifierCodec.serialize(InstanceIdentifierCodec.java:29) at org.opendaylight.yangtools.binding.data.codec.impl.InstanceIdentifierCodec.serialize(InstanceIdentifierCodec.java:19) at org.opendaylight.yangtools.binding.data.codec.impl.BindingNormalizedNodeCodecRegistry.toYangInstanceIdentifier(BindingNormalizedNodeCodecRegistry.java:87) at org.opendaylight.controller.md.sal.binding.impl.BindingToNormalizedNodeCodec.toYangInstanceIdentifierBlocking(BindingToNormalizedNodeCodec.java:99) at org.opendaylight.controller.md.sal.binding.impl.AbstractForwardedDataBroker.registerDataChangeListener(AbstractForwardedDataBroker.java:68) at org.opendaylight.l2switch.arphandler.core.ProactiveFloodFlowWriter.registerAsDataChangeListener(ProactiveFloodFlowWriter.java:173) at org.opendaylight.yang.gen.v1.urn.opendaylight.packet.arp.handler.impl.rev140528.ArpHandlerModule.createInstance(ArpHandlerModule.java:51) at org.opendaylight.controller.config.spi.AbstractModule.getInstance(AbstractModule.java:73) at sun.reflect.GeneratedMethodAccessor28.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.7.0_71] at java.lang.reflect.Method.invoke(Method.java:606)[:1.7.0_71] at org.opendaylight.controller.config.manager.impl.dependencyresolver.DependencyResolverManager$ModuleInvocationHandler.handleInvocation(DependencyResolverManager.java:150) at com.google.common.reflect.AbstractInvocationHandler.invoke(AbstractInvocationHandler.java:87) at com.sun.proxy.$Proxy84.getInstance(Unknown Source) at org.opendaylight.controller.config.manager.impl.ConfigTransactionControllerImpl.secondPhaseCommit(ConfigTransactionControllerImpl.java:399) at org.opendaylight.controller.config.manager.impl.ConfigRegistryImpl.secondPhaseCommit(ConfigRegistryImpl.java:280) at org.opendaylight.controller.config.manager.impl.ConfigRegistryImpl.commitConfig(ConfigRegistryImpl.java:227) at sun.reflect.GeneratedMethodAccessor189.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.7.0_71] at java.lang.reflect.Method.invoke(Method.java:606)[:1.7.0_71] at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:75)[:1.7.0_71] at sun.reflect.GeneratedMethodAccessor33.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.7.0_71] at java.lang.reflect.Method.invoke(Method.java:606)[:1.7.0_71] at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:279)[:1.7.0_71] at com.sun.jmx.mbeanserver.ConvertingMethod.invokeWithOpenReturn(ConvertingMethod.java:193)[:1.7.0_71] at com.sun.jmx.mbeanserver.ConvertingMethod.invokeWithOpenReturn(ConvertingMethod.java:175)[:1.7.0_71] at com.sun.jmx.mbeanserver.MXBeanIntrospector.invokeM2(MXBeanIntrospector.java:117)[:1.7.0_71] at com.sun.jmx.mbeanserver.MXBeanIntrospector.invokeM2(MXBeanIntrospector.java:54)[:1.7.0_71] at com.sun.jmx.mbeanserver.MBeanIntrospector.invokeM(MBeanIntrospector.java:237)[:1.7.0_71] at com.sun.jmx.mbeanserver.PerInterface.invoke(PerInterface.java:138)[:1.7.0_71] at com.sun.jmx.mbeanserver.MBeanSupport.invoke(MBeanSupport.java:252)[:1.7.0_71] at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)[:1.7.0_71] at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)[:1.7.0_71] at com.sun.jmx.mbeanserver.MXBeanProxy$InvokeHandler.invoke(MXBeanProxy.java:150)[:1.7.0_71] at com.sun.jmx.mbeanserver.MXBeanProxy.invoke(MXBeanProxy.java:167)[:1.7.0_71] at javax.management.MBeanServerInvocationHandler.invoke(MBeanServerInvocationHandler.java:252)[:1.7.0_71] at com.sun.proxy.$Proxy15.commitConfig(Unknown Source)[85:org.opendaylight.controller.config-api:0.4.0.SNAPSHOT] at org.opendaylight.controller.config.util.ConfigRegistryJMXClient.commitConfig(ConfigRegistryJMXClient.java:102)[86:org.opendaylight.controller.config-util:0.4.0.SNAPSHOT] at org.opendaylight.controller.netconf.confignetconfconnector.transactions.TransactionProvider.commitTransaction(TransactionProvider.java:138)[106:org.opendaylight.controller.config-netconf-connector:0.4.0.SNAPSHOT] at org.opendaylight.controller.netconf.confignetconfconnector.operations.Commit.handleWithNoSubsequentOperations(Commit.java:54)[106:org.opendaylight.controller.config-netconf-connector:0.4.0.SNAPSHOT] at org.opendaylight.controller.netconf.util.mapping.AbstractLastNetconfOperation.handle(AbstractLastNetconfOperation.java:33)[104:org.opendaylight.controller.netconf-util:0.4.0.SNAPSHOT] at org.opendaylight.controller.netconf.util.mapping.AbstractNetconfOperation.handle(AbstractNetconfOperation.java:100)[104:org.opendaylight.controller.netconf-util:0.4.0.SNAPSHOT] at org.opendaylight.controller.netconf.persist.impl.ConfigPusherImpl.sendRequestGetResponseCheckIsOK(ConfigPusherImpl.java:342)[109:org.opendaylight.controller.config-persister-impl:0.4.0.SNAPSHOT] at org.opendaylight.controller.netconf.persist.impl.ConfigPusherImpl.pushConfig(ConfigPusherImpl.java:296)[109:org.opendaylight.controller.config-persister-impl:0.4.0.SNAPSHOT] at org.opendaylight.controller.netconf.persist.impl.ConfigPusherImpl.pushConfigWithConflictingVersionRetries(ConfigPusherImpl.java:135)[109:org.opendaylight.controller.config-persister-impl:0.4.0.SNAPSHOT] at org.opendaylight.controller.netconf.persist.impl.ConfigPusherImpl.internalPushConfigs(ConfigPusherImpl.java:103)[109:org.opendaylight.controller.config-persister-impl:0.4.0.SNAPSHOT] at org.opendaylight.controller.netconf.persist.impl.ConfigPusherImpl.process(ConfigPusherImpl.java:76)[109:org.opendaylight.controller.config-persister-impl:0.4.0.SNAPSHOT] at org.opendaylight.controller.netconf.persist.impl.osgi.ConfigPersisterActivator$InnerCustomizer$1.run(ConfigPersisterActivator.java:181)[109:org.opendaylight.controller.config-persister-impl:0.4.0.SNAPSHOT] at java.lang.Thread.run(Thread.java:745)[:1.7.0_71] 2015-06-18 13:53:50,398 | ERROR | config-pusher | ConfigRegistryImpl | 91 - org.opendaylight.controller.config-manager - 0.4.0.SNAPSHOT | Configuration Transaction failed on 2PC, server is unhealthy java.lang.IllegalStateException: Error - getInstance() failed for ModuleIdentifier{factoryName='arp-handler-impl', instanceName='arp-handler-impl'} in transaction TransactionIdentifier {name='ConfigTransaction-189-191'} at org.opendaylight.controller.config.manager.impl.ConfigTransactionControllerImpl.secondPhaseCommit(ConfigTransactionControllerImpl.java:405) |
| Comment by Evan Zeller [ 18/Jun/15 ] |
|
Looks like something similar in GBP from May 11: https://gist.github.com/yapengwu/1fe63eba3a50d53f643a maybe they can provide insight |
| Comment by Amit Mandke [ 18/Jun/15 ] |
|
Given steps is not a valid / supported scenario. So this cant be called as a bug. L2switch feature needs to be installed before mininet is connected to controller. Did this sequence ever worked before, according to me this would never work. So cant call this a bug. |
| Comment by Luis Gomez [ 18/Jun/15 ] |
|
Jamo will comment in the sequence I still see the config-pusher issue sporadically when testing with other ODL features. We can close this bug but we will need to write a Release Note warning users to use l2switch stand-alone with no other apps in ODL. BR/Luis |
| Comment by Jamo Luhrsen [ 19/Jun/15 ] |
|
A couple of points to make: 1. Having mininet running before starting the controller or any of it's features This is not a realistic requirement for a production controller. 2. Luis can see this same issue in other scenarios, but maybe not with such and 3. I'm fine if this is not a blocker, as the workaround is just not to install I actually have not tried this in Helium, but I can later. It's completely possible |
| Comment by Luis Gomez [ 19/Jun/15 ] |
|
News on this, it seems this issue could be similar to: https://bugs.opendaylight.org/show_bug.cgi?id=3767 They also show (from lacp bug): ERROR | config-pusher | ConfigTransactionControllerImpl | 113 - org.opendaylight.controller.config-manager - 0.3.0.SNAPSHOT | Commit failed on ModuleIdentifier {factoryName='lacp-main', instanceName='lacp-main'}in transaction TransactionIdentifier {name='ConfigTransaction-79-81'}org.opendaylight.yangtools.binding.data.codec.impl.IncorrectNestingException: Class interface org.opendaylight.yang.gen.v1.urn.opendaylight.lacp.node.rev150131.LacpNode is not valid child of interface Tony and Ed are already working in this as it seems to be a race condition issue in MD-SAL. BR/Luis |
| Comment by Tony Tkacik [ 19/Jun/15 ] |
|
https://git.opendaylight.org/gerrit/#/c/22986/ should fix it. |
| Comment by Jamo Luhrsen [ 19/Jun/15 ] |
|
The exception goes away after https://git.opendaylight.org/gerrit/#/c/22986/. However, l2switch functionality is not working. links, hosts are not learned and host connectivity is not there (e.g. pingall in mininet). again, to reiterate this is with these steps: 1 install openflowplugin-flow-services-ui if the steps are like below, it works: 1 start mininet |
| Comment by Jamo Luhrsen [ 19/Jun/15 ] |
|
Marking this fixed as restarting network will allow l2switch functionality to work. and the config-pusher issue is resolved. |