diff options
author | Marek Gradzki <mgradzki@cisco.com> | 2016-12-23 12:06:31 +0100 |
---|---|---|
committer | Jan Srnicek <jsrnicek@cisco.com> | 2017-01-04 07:26:07 +0000 |
commit | 9debe7fe89600b0e1d136f488119dddeb0c5702d (patch) | |
tree | d61f6e4b71d979ce0760e9de2dd0c3e373384f23 /lisp/lisp2vpp/src/main/java/io/fd/hc2vpp/lisp/translate/write/factory/LocatorSetWriterFactory.java | |
parent | 26bd889c9fde0c56b9c2ef078fbaab8082172906 (diff) |
HONEYCOMB-322: fix hc error after vpp restart if local-mapping was configured
In case of honeycomb restart, mapping context is read first.
Then persisted config is being processed.
Therefore customiers should not reject configuration if metadata they are going to
add is already present in mapping context.
Also includes:
* locator-set and remote-mapping handling update
* fixes write order of locator sets and local-mapping.
Not included:
* initializers for lisp (hc restart without vpp restart might fail)
Change-Id: I82c1ee878d9ce074a6bd8197678653814514e6ca
Signed-off-by: Marek Gradzki <mgradzki@cisco.com>
Diffstat (limited to 'lisp/lisp2vpp/src/main/java/io/fd/hc2vpp/lisp/translate/write/factory/LocatorSetWriterFactory.java')
-rwxr-xr-x | lisp/lisp2vpp/src/main/java/io/fd/hc2vpp/lisp/translate/write/factory/LocatorSetWriterFactory.java | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/lisp/lisp2vpp/src/main/java/io/fd/hc2vpp/lisp/translate/write/factory/LocatorSetWriterFactory.java b/lisp/lisp2vpp/src/main/java/io/fd/hc2vpp/lisp/translate/write/factory/LocatorSetWriterFactory.java index 14b4aace7..037923798 100755 --- a/lisp/lisp2vpp/src/main/java/io/fd/hc2vpp/lisp/translate/write/factory/LocatorSetWriterFactory.java +++ b/lisp/lisp2vpp/src/main/java/io/fd/hc2vpp/lisp/translate/write/factory/LocatorSetWriterFactory.java @@ -16,32 +16,40 @@ package io.fd.hc2vpp.lisp.translate.write.factory; +import static io.fd.hc2vpp.lisp.translate.write.factory.EidTableWriterFactory.BRIDGE_DOMAIN_SUBTABLE_ID; +import static io.fd.hc2vpp.lisp.translate.write.factory.EidTableWriterFactory.VRF_SUBTABLE_ID; + import io.fd.hc2vpp.lisp.translate.AbstractLispInfraFactoryBase; import io.fd.hc2vpp.lisp.translate.write.InterfaceCustomizer; import io.fd.hc2vpp.lisp.translate.write.LocatorSetCustomizer; import io.fd.honeycomb.translate.impl.write.GenericListWriter; import io.fd.honeycomb.translate.write.WriterFactory; import io.fd.honeycomb.translate.write.registry.ModifiableWriterRegistryBuilder; +import java.util.Arrays; import javax.annotation.Nonnull; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev161214.dp.subtable.grouping.LocalMappings; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev161214.dp.subtable.grouping.local.mappings.LocalMapping; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev161214.lisp.feature.data.grouping.LispFeatureData; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev161214.locator.sets.grouping.LocatorSets; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev161214.locator.sets.grouping.locator.sets.LocatorSet; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev161214.locator.sets.grouping.locator.sets.locator.set.Interface; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; - /** * Factory producing writers for {@code LocatorSets} */ public final class LocatorSetWriterFactory extends AbstractLispInfraFactoryBase implements WriterFactory { + static InstanceIdentifier<LocatorSet> LOCATOR_SET_ID = + LISP_CONFIG_IDENTIFIER.child(LispFeatureData.class).child(LocatorSets.class).child(LocatorSet.class); @Override public void init(@Nonnull final ModifiableWriterRegistryBuilder registry) { - InstanceIdentifier<LocatorSet> locatorSetId = - LISP_CONFIG_IDENTIFIER.child(LispFeatureData.class).child(LocatorSets.class).child(LocatorSet.class); + // LocatorSet must be written before eid table entries, because local mappings under eid-table are referencing it + registry.addBefore(new GenericListWriter<>(LOCATOR_SET_ID, new LocatorSetCustomizer(vppApi, locatorSetContext)), + Arrays.asList(VRF_SUBTABLE_ID.child(LocalMappings.class).child(LocalMapping.class), + BRIDGE_DOMAIN_SUBTABLE_ID.child(LocalMappings.class).child(LocalMapping.class))); - registry.add(new GenericListWriter<>(locatorSetId, new LocatorSetCustomizer(vppApi, locatorSetContext))); - registry.add(new GenericListWriter<>(locatorSetId.child(Interface.class), - new InterfaceCustomizer(vppApi, interfaceContext))); + registry.add(new GenericListWriter<>(LOCATOR_SET_ID.child(Interface.class), + new InterfaceCustomizer(vppApi, interfaceContext))); } } |