diff options
author | Jan Srnicek <jsrnicek@cisco.com> | 2017-11-03 13:33:53 +0100 |
---|---|---|
committer | Marek Gradzki <mgradzki@cisco.com> | 2017-11-03 12:58:01 +0000 |
commit | 9779f4b3ffe24bb2338630c66169da92c880ffbb (patch) | |
tree | fac37c53b70b7bbfcea00f180554b3a0dfddd59c /infra/northbound/bgp/src | |
parent | 054eb07de938df56000a8fc5cb41cb77f84bf2b5 (diff) |
HONEYCOMB-359 - Wildcarded writers
Adds option to specify subtree writer that can handle whole subtree
of nodes without having whole subtree specified. Its checking
if node is children at runtime, rather than having pre-computed tree
Change-Id: Ic46f2bd6de84f0dd14865825399f5a90a1f80859
Signed-off-by: Jan Srnicek <jsrnicek@cisco.com>
Diffstat (limited to 'infra/northbound/bgp/src')
2 files changed, 9 insertions, 46 deletions
diff --git a/infra/northbound/bgp/src/main/java/io/fd/honeycomb/infra/bgp/ApplicationRibWriterFactory.java b/infra/northbound/bgp/src/main/java/io/fd/honeycomb/infra/bgp/ApplicationRibWriterFactory.java index 02f1788f3..00a12e7ac 100644 --- a/infra/northbound/bgp/src/main/java/io/fd/honeycomb/infra/bgp/ApplicationRibWriterFactory.java +++ b/infra/northbound/bgp/src/main/java/io/fd/honeycomb/infra/bgp/ApplicationRibWriterFactory.java @@ -45,14 +45,6 @@ final class ApplicationRibWriterFactory implements WriterFactory { InstanceIdentifier.create(ApplicationRib.class); private static final InstanceIdentifier<Tables> TABLES_IID = AR_IID.child(Tables.class); - - // TODO (HONEYCOMB-359): - // BGP models are huge, we need some kind of wildcarded subtree writer, that works for whole subtree. - // 1) we can either move checking handledTypes to writers (getHandledTypes, isAffected, writer.getHandedTypes, ...) - // but then precondition check in flatWriterRegistry might be slower (we need to check if we have all writers - // in order to avoid unnecessary reverts). - // - // 2) alternative is to compute all child nodes during initialization (might introduce some footprint penalty). @Override public void init(final ModifiableWriterRegistryBuilder registry) { registry.subtreeAdd(ImmutableSet.of(TABLES_IID), new BindingBrokerWriter<>(InstanceIdentifier.create(ApplicationRib.class), dataBroker) diff --git a/infra/northbound/bgp/src/main/java/io/fd/honeycomb/infra/bgp/neighbors/BgpPeerWriterFactory.java b/infra/northbound/bgp/src/main/java/io/fd/honeycomb/infra/bgp/neighbors/BgpPeerWriterFactory.java index 8b7510eb8..848b4d504 100644 --- a/infra/northbound/bgp/src/main/java/io/fd/honeycomb/infra/bgp/neighbors/BgpPeerWriterFactory.java +++ b/infra/northbound/bgp/src/main/java/io/fd/honeycomb/infra/bgp/neighbors/BgpPeerWriterFactory.java @@ -16,21 +16,14 @@ package io.fd.honeycomb.infra.bgp.neighbors; -import com.google.common.collect.Sets; import com.google.inject.Inject; import io.fd.honeycomb.infra.bgp.BgpConfiguration; import io.fd.honeycomb.translate.impl.write.GenericListWriter; import io.fd.honeycomb.translate.write.WriterFactory; import io.fd.honeycomb.translate.write.registry.ModifiableWriterRegistryBuilder; -import javax.annotation.Nonnull; import org.opendaylight.protocol.bgp.openconfig.spi.BGPTableTypeRegistryConsumer; import org.opendaylight.protocol.bgp.rib.impl.spi.BGPPeerRegistry; import org.opendaylight.protocol.bgp.rib.impl.spi.RIB; -import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi.safi.list.AfiSafi; -import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.AfiSafis; -import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.Config; -import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.Timers; -import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.Transport; import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbors.Neighbor; import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.Bgp; import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.bgp.Neighbors; @@ -38,25 +31,24 @@ import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.network.instance.re import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.network.instance.rev151018.network.instance.top.network.instances.NetworkInstance; import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.network.instance.rev151018.network.instance.top.network.instances.network.instance.Protocols; import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.network.instance.rev151018.network.instance.top.network.instances.network.instance.protocols.Protocol; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev160614.AfiSafi1; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev160614.Config1; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev160614.Config2; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev160614.Protocol1; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import javax.annotation.Nonnull; + /** * Initializes writer for Bgp Neighbors ({@link Neighbor} node) and all its parents required by HC infra. */ public final class BgpPeerWriterFactory implements WriterFactory { private static final InstanceIdentifier<NetworkInstance> NETWORK_INSTANCE_ID = - InstanceIdentifier.create(NetworkInstances.class) - .child(NetworkInstance.class); + InstanceIdentifier.create(NetworkInstances.class) + .child(NetworkInstance.class); private static final InstanceIdentifier<Protocol> PROTOCOL_ID = - NETWORK_INSTANCE_ID.child(Protocols.class).child(Protocol.class); + NETWORK_INSTANCE_ID.child(Protocols.class).child(Protocol.class); private static final InstanceIdentifier<Neighbor> NEIGHBOR_ID = - PROTOCOL_ID.augmentation(Protocol1.class).child(Bgp.class).child(Neighbors.class).child(Neighbor.class); + PROTOCOL_ID.augmentation(Protocol1.class).child(Bgp.class).child(Neighbors.class).child(Neighbor.class); @Inject private BgpConfiguration configuration; @@ -72,39 +64,18 @@ public final class BgpPeerWriterFactory implements WriterFactory { // NetworkInstances // NetworkInstance = registry.add(new GenericListWriter<>(NETWORK_INSTANCE_ID, - new NetworkInstanceCustomizer(configuration.bgpNetworkInstanceName))); + new NetworkInstanceCustomizer(configuration.bgpNetworkInstanceName))); // Protocols // Protocol = registry.add( - new GenericListWriter<>(PROTOCOL_ID, new ProtocolCustomizer(configuration.bgpProtocolInstanceName.get()))); + new GenericListWriter<>(PROTOCOL_ID, new ProtocolCustomizer(configuration.bgpProtocolInstanceName.get()))); // Protocol1 augmentation (from bgp-openconfig-extensions) // Bgp // Neighbors // Neighbor= - final InstanceIdentifier<Neighbor> neighbor = InstanceIdentifier.create(Neighbor.class); - registry.subtreeAdd( - // TODO (HONEYCOMB-359): there might be more subnodes that needs to be handled - Sets.newHashSet( - neighbor.child(Config.class), - neighbor.child(Config.class).augmentation(Config2.class), - neighbor.child(AfiSafis.class), - neighbor.child(AfiSafis.class).child(AfiSafi.class), - neighbor.child(AfiSafis.class).child(AfiSafi.class).augmentation(AfiSafi1.class), - neighbor.child(Timers.class), - neighbor.child(Timers.class).child( - org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.timers.Config.class), - neighbor.child(Transport.class), - neighbor.child(Transport.class).child( - org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.transport.Config.class), - neighbor.child(Transport.class).child( - org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.transport.Config.class) - .augmentation(Config1.class) - ), - new GenericListWriter<>( - NEIGHBOR_ID, - new NeighborCustomizer(globalRib, peerRegistry, tableTypeRegistry))); + registry.wildcardedSubtreeAdd(new GenericListWriter<>(NEIGHBOR_ID, new NeighborCustomizer(globalRib, peerRegistry, tableTypeRegistry))); } } |