[BGPCEP-315] Lithium BGP project fails to deploy in 3 nodes cluster environment Created: 25/Nov/15 Updated: 03/Mar/19 Resolved: 11/Mar/16 |
|
| Status: | Resolved |
| Project: | bgpcep |
| Component/s: | BGP |
| Affects Version/s: | Bugzilla Migration |
| Fix Version/s: | Bugzilla Migration |
| Type: | Bug | ||
| Reporter: | Luis Gomez | Assignee: | Unassigned |
| 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: | 4676 |
| Description |
|
When we deploy BGP (and all compatible features) in a 3 nodes cluster environment we see this exception: 2015-11-24 07:07:08,755 | INFO | config-pusher | ConfigPusherImpl | 157 - org.opendaylight.controller.config-persister-impl - 0.3.3.Lithium-SR3 | Pushing configuration snapshot 30-programming.xml(odl-bgpcep-pcep-all,odl-bgpcep-pcep-all) 2015-11-24 07:07:08,872 | ERROR | config-pusher | ConfigTransactionControllerImpl | 139 - org.opendaylight.controller.config-manager - 0.3.3.Lithium-SR3 | Commit failed on ModuleIdentifier {factoryName='instruction-scheduler-impl', instanceName='global-instruction-scheduler'} in transaction TransactionIdentifier{name='ConfigTransaction-201-203'}java.lang.IllegalStateException: Conflicting instruction queue found at com.google.common.base.Preconditions.checkState(Preconditions.java:173) at org.opendaylight.bgpcep.programming.impl.ProgrammingServiceImpl.<init>(ProgrammingServiceImpl.java:123) at org.opendaylight.controller.config.yang.programming.impl.InstructionSchedulerImplModule.createInstance(InstructionSchedulerImplModule.java:57) at org.opendaylight.controller.config.spi.AbstractModule.getInstance(AbstractModule.java:73) at sun.reflect.GeneratedMethodAccessor27.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.7.0_85] at java.lang.reflect.Method.invoke(Method.java:606)[:1.7.0_85] 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.$Proxy35.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.GeneratedMethodAccessor223.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.7.0_85] at java.lang.reflect.Method.invoke(Method.java:606)[:1.7.0_85] at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:75)[:1.7.0_85] at sun.reflect.GeneratedMethodAccessor28.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.7.0_85] at java.lang.reflect.Method.invoke(Method.java:606)[:1.7.0_85] at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:279)[:1.7.0_85] at com.sun.jmx.mbeanserver.ConvertingMethod.invokeWithOpenReturn(ConvertingMethod.java:193)[:1.7.0_85] at com.sun.jmx.mbeanserver.ConvertingMethod.invokeWithOpenReturn(ConvertingMethod.java:175)[:1.7.0_85] at com.sun.jmx.mbeanserver.MXBeanIntrospector.invokeM2(MXBeanIntrospector.java:117)[:1.7.0_85] at com.sun.jmx.mbeanserver.MXBeanIntrospector.invokeM2(MXBeanIntrospector.java:54)[:1.7.0_85] at com.sun.jmx.mbeanserver.MBeanIntrospector.invokeM(MBeanIntrospector.java:237)[:1.7.0_85] at com.sun.jmx.mbeanserver.PerInterface.invoke(PerInterface.java:138)[:1.7.0_85] at com.sun.jmx.mbeanserver.MBeanSupport.invoke(MBeanSupport.java:252)[:1.7.0_85] at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)[:1.7.0_85] at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)[:1.7.0_85] at com.sun.jmx.mbeanserver.MXBeanProxy$InvokeHandler.invoke(MXBeanProxy.java:150)[:1.7.0_85] at com.sun.jmx.mbeanserver.MXBeanProxy.invoke(MXBeanProxy.java:167)[:1.7.0_85] at javax.management.MBeanServerInvocationHandler.invoke(MBeanServerInvocationHandler.java:258)[:1.7.0_85] at com.sun.proxy.$Proxy16.commitConfig(Unknown Source)[120:org.opendaylight.controller.config-api:0.3.3.Lithium-SR3] at org.opendaylight.controller.config.util.ConfigRegistryJMXClient.commitConfig(ConfigRegistryJMXClient.java:102)[134:org.opendaylight.controller.config-util:0.3.3.Lithium-SR3] at org.opendaylight.controller.netconf.confignetconfconnector.transactions.TransactionProvider.commitTransaction(TransactionProvider.java:138)[154:org.opendaylight.controller.config-netconf-connector:0.3.3.Lithium-SR3] at org.opendaylight.controller.netconf.confignetconfconnector.operations.Commit.handleWithNoSubsequentOperations(Commit.java:54)[154:org.opendaylight.controller.config-netconf-connector:0.3.3.Lithium-SR3] at org.opendaylight.controller.netconf.util.mapping.AbstractLastNetconfOperation.handle(AbstractLastNetconfOperation.java:33)[152:org.opendaylight.controller.netconf-util:0.3.3.Lithium-SR3] at org.opendaylight.controller.netconf.util.mapping.AbstractNetconfOperation.handle(AbstractNetconfOperation.java:100)[152:org.opendaylight.controller.netconf-util:0.3.3.Lithium-SR3] at org.opendaylight.controller.netconf.persist.impl.ConfigPusherImpl.sendRequestGetResponseCheckIsOK(ConfigPusherImpl.java:354)[157:org.opendaylight.controller.config-persister-impl:0.3.3.Lithium-SR3] at org.opendaylight.controller.netconf.persist.impl.ConfigPusherImpl.pushConfig(ConfigPusherImpl.java:308)[157:org.opendaylight.controller.config-persister-impl:0.3.3.Lithium-SR3] at org.opendaylight.controller.netconf.persist.impl.ConfigPusherImpl.pushConfigWithConflictingVersionRetries(ConfigPusherImpl.java:147)[157:org.opendaylight.controller.config-persister-impl:0.3.3.Lithium-SR3] at org.opendaylight.controller.netconf.persist.impl.ConfigPusherImpl.internalPushConfigs(ConfigPusherImpl.java:106)[157:org.opendaylight.controller.config-persister-impl:0.3.3.Lithium-SR3] at org.opendaylight.controller.netconf.persist.impl.ConfigPusherImpl.process(ConfigPusherImpl.java:77)[157:org.opendaylight.controller.config-persister-impl:0.3.3.Lithium-SR3] at org.opendaylight.controller.netconf.persist.impl.osgi.ConfigPersisterActivator$InnerCustomizer$1.run(ConfigPersisterActivator.java:181)[157:org.opendaylight.controller.config-persister-impl:0.3.3.Lithium-SR3] at java.lang.Thread.run(Thread.java:745)[:1.7.0_85] 2015-11-24 07:07:08,882 | ERROR | config-pusher | ConfigRegistryImpl | 139 - org.opendaylight.controller.config-manager - 0.3.3.Lithium-SR3 | Configuration Transaction failed on 2PC, server is unhealthy java.lang.IllegalStateException: Error - getInstance() failed for ModuleIdentifier{factoryName='instruction-scheduler-impl', instanceName='global-instruction-scheduler'} in transaction TransactionIdentifier {name='ConfigTransaction-201-203'}at org.opendaylight.controller.config.manager.impl.ConfigTransactionControllerImpl.secondPhaseCommit(ConfigTransactionControllerImpl.java:405) 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.GeneratedMethodAccessor223.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.7.0_85] at java.lang.reflect.Method.invoke(Method.java:606)[:1.7.0_85] at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:75)[:1.7.0_85] at sun.reflect.GeneratedMethodAccessor28.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.7.0_85] at java.lang.reflect.Method.invoke(Method.java:606)[:1.7.0_85] at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:279)[:1.7.0_85] at com.sun.jmx.mbeanserver.ConvertingMethod.invokeWithOpenReturn(ConvertingMethod.java:193)[:1.7.0_85] at com.sun.jmx.mbeanserver.ConvertingMethod.invokeWithOpenReturn(ConvertingMethod.java:175)[:1.7.0_85] at com.sun.jmx.mbeanserver.MXBeanIntrospector.invokeM2(MXBeanIntrospector.java:117)[:1.7.0_85] at com.sun.jmx.mbeanserver.MXBeanIntrospector.invokeM2(MXBeanIntrospector.java:54)[:1.7.0_85] at com.sun.jmx.mbeanserver.MBeanIntrospector.invokeM(MBeanIntrospector.java:237)[:1.7.0_85] at com.sun.jmx.mbeanserver.PerInterface.invoke(PerInterface.java:138)[:1.7.0_85] at com.sun.jmx.mbeanserver.MBeanSupport.invoke(MBeanSupport.java:252)[:1.7.0_85] at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)[:1.7.0_85] at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)[:1.7.0_85] at com.sun.jmx.mbeanserver.MXBeanProxy$InvokeHandler.invoke(MXBeanProxy.java:150)[:1.7.0_85] at com.sun.jmx.mbeanserver.MXBeanProxy.invoke(MXBeanProxy.java:167)[:1.7.0_85] at javax.management.MBeanServerInvocationHandler.invoke(MBeanServerInvocationHandler.java:258)[:1.7.0_85] at com.sun.proxy.$Proxy16.commitConfig(Unknown Source)[120:org.opendaylight.controller.config-api:0.3.3.Lithium-SR3] at org.opendaylight.controller.config.util.ConfigRegistryJMXClient.commitConfig(ConfigRegistryJMXClient.java:102)[134:org.opendaylight.controller.config-util:0.3.3.Lithium-SR3] at org.opendaylight.controller.netconf.confignetconfconnector.transactions.TransactionProvider.commitTransaction(TransactionProvider.java:138)[154:org.opendaylight.controller.config-netconf-connector:0.3.3.Lithium-SR3] at org.opendaylight.controller.netconf.confignetconfconnector.operations.Commit.handleWithNoSubsequentOperations(Commit.java:54)[154:org.opendaylight.controller.config-netconf-connector:0.3.3.Lithium-SR3] at org.opendaylight.controller.netconf.util.mapping.AbstractLastNetconfOperation.handle(AbstractLastNetconfOperation.java:33)[152:org.opendaylight.controller.netconf-util:0.3.3.Lithium-SR3] at org.opendaylight.controller.netconf.util.mapping.AbstractNetconfOperation.handle(AbstractNetconfOperation.java:100)[152:org.opendaylight.controller.netconf-util:0.3.3.Lithium-SR3] at org.opendaylight.controller.netconf.persist.impl.ConfigPusherImpl.sendRequestGetResponseCheckIsOK(ConfigPusherImpl.java:354)[157:org.opendaylight.controller.config-persister-impl:0.3.3.Lithium-SR3] at org.opendaylight.controller.netconf.persist.impl.ConfigPusherImpl.pushConfig(ConfigPusherImpl.java:308)[157:org.opendaylight.controller.config-persister-impl:0.3.3.Lithium-SR3] at org.opendaylight.controller.netconf.persist.impl.ConfigPusherImpl.pushConfigWithConflictingVersionRetries(ConfigPusherImpl.java:147)[157:org.opendaylight.controller.config-persister-impl:0.3.3.Lithium-SR3] at org.opendaylight.controller.netconf.persist.impl.ConfigPusherImpl.internalPushConfigs(ConfigPusherImpl.java:106)[157:org.opendaylight.controller.config-persister-impl:0.3.3.Lithium-SR3] at org.opendaylight.controller.netconf.persist.impl.ConfigPusherImpl.process(ConfigPusherImpl.java:77)[157:org.opendaylight.controller.config-persister-impl:0.3.3.Lithium-SR3] at org.opendaylight.controller.netconf.persist.impl.osgi.ConfigPersisterActivator$InnerCustomizer$1.run(ConfigPersisterActivator.java:181)[157:org.opendaylight.controller.config-persister-impl:0.3.3.Lithium-SR3] at java.lang.Thread.run(Thread.java:745)[:1.7.0_85] Caused by: java.lang.IllegalStateException: Conflicting instruction queue found at com.google.common.base.Preconditions.checkState(Preconditions.java:173) at org.opendaylight.bgpcep.programming.impl.ProgrammingServiceImpl.<init>(ProgrammingServiceImpl.java:123) at org.opendaylight.controller.config.yang.programming.impl.InstructionSchedulerImplModule.createInstance(InstructionSchedulerImplModule.java:57) at org.opendaylight.controller.config.spi.AbstractModule.getInstance(AbstractModule.java:73) at sun.reflect.GeneratedMethodAccessor27.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.7.0_85] at java.lang.reflect.Method.invoke(Method.java:606)[:1.7.0_85] 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.$Proxy35.getInstance(Unknown Source) at org.opendaylight.controller.config.manager.impl.ConfigTransactionControllerImpl.secondPhaseCommit(ConfigTransactionControllerImpl.java:399) ... 35 more 2015-11-24 07:07:08,889 | ERROR | config-pusher | ConfigPusherImpl | 157 - org.opendaylight.controller.config-persister-impl - 0.3.3.Lithium-SR3 | Failed to apply configuration snapshot: 30-programming.xml(odl-bgpcep-pcep-all,odl-bgpcep-pcep-all) java.lang.IllegalStateException: Error - getInstance() failed for ModuleIdentifier{factoryName='instruction-scheduler-impl', instanceName='global-instruction-scheduler'} in transaction TransactionIdentifier{name='ConfigTransaction-201-203'} at org.opendaylight.controller.config.manager.impl.ConfigTransactionControllerImpl.secondPhaseCommit(ConfigTransactionControllerImpl.java:405) |
| Comments |
| Comment by Robert Varga [ 22/Jan/16 ] |
|
BGP nor PCEP support supporting starting on multiple nodes at the same time, which was clearly documented in Lithium and has not changed in Beryllium. Furthermore the distributed data store does not have enough knowledge to efficiently replicate data stored by BGP, hence we do not recommend deployment into a replicated shard. |
| Comment by Luis Gomez [ 22/Jan/16 ] |
|
Fair enough, you can close this bug or leave it open for your track. |
| Comment by Vratko Polak [ 12/Feb/16 ] |
|
Minimal changes to Bgpcep default configuration files to allow booting up without risking "server is unhealthy" are documented in This Bug may stay open as a Boron feature request to make cluster deployment more user-friendly and performant. |
| Comment by Milos Fabian [ 11/Mar/16 ] |
|
BGP/PCEP/BMP SB plugins are configurable to run several instances at the same, hence plugins are capable to deploy in 3-node cluster environment even with enabled replication (however not recommended for BGP RIBs due to a limited scalability). |