[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
Platform: All


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,771 | INFO | 9]-nio2-thread-8 | ChannelSession | 28 - org.apache.sshd.core - 0.12.0 | Executing command: bundle:list

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)
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



 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 BGPCEP-388.

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).

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