diff options
Diffstat (limited to 'v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/interfacesstate/ip/v4')
4 files changed, 59 insertions, 139 deletions
diff --git a/v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/interfacesstate/ip/v4/Ipv4AddressCustomizer.java b/v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/interfacesstate/ip/v4/Ipv4AddressCustomizer.java index 8b84cfa24..aeaae5bdf 100644 --- a/v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/interfacesstate/ip/v4/Ipv4AddressCustomizer.java +++ b/v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/interfacesstate/ip/v4/Ipv4AddressCustomizer.java @@ -16,28 +16,21 @@ package io.fd.hc2vpp.v3po.interfacesstate.ip.v4; -import static com.google.common.base.Preconditions.checkNotNull; - import com.google.common.base.Optional; import com.google.common.base.Preconditions; -import com.google.common.collect.ImmutableSet; -import io.fd.hc2vpp.common.translate.util.FutureJVppCustomizer; import io.fd.hc2vpp.common.translate.util.NamingContext; import io.fd.hc2vpp.v3po.interfacesstate.InterfaceCustomizer; -import io.fd.hc2vpp.v3po.interfacesstate.ip.IpReader; import io.fd.hc2vpp.v3po.interfacesstate.ip.dump.params.IfaceDumpFilter; +import io.fd.hc2vpp.v3po.interfacesstate.ip.readers.IpAddressReader; import io.fd.honeycomb.translate.read.ReadContext; import io.fd.honeycomb.translate.read.ReadFailedException; import io.fd.honeycomb.translate.spi.read.Initialized; import io.fd.honeycomb.translate.spi.read.InitializingListReaderCustomizer; import io.fd.honeycomb.translate.util.RWUtils; -import io.fd.honeycomb.translate.util.read.cache.DumpCacheManager; -import io.fd.honeycomb.translate.util.read.cache.TypeAwareIdentifierCacheKeyFactory; +import io.fd.honeycomb.translate.util.read.cache.DumpCacheManager.DumpCacheManagerBuilder; import io.fd.vpp.jvpp.core.dto.IpAddressDetails; import io.fd.vpp.jvpp.core.dto.IpAddressDetailsReplyDump; import io.fd.vpp.jvpp.core.future.FutureJVppCore; -import java.util.List; -import javax.annotation.Nonnull; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.Interface1; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.interfaces._interface.Ipv4; @@ -53,28 +46,24 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.annotation.Nonnull; +import java.util.List; + /** * Read customizer for interface Ipv4 addresses. */ -public class Ipv4AddressCustomizer extends FutureJVppCustomizer - implements InitializingListReaderCustomizer<Address, AddressKey, AddressBuilder>, IpReader { +public class Ipv4AddressCustomizer extends IpAddressReader + implements InitializingListReaderCustomizer<Address, AddressKey, AddressBuilder> { private static final Logger LOG = LoggerFactory.getLogger(Ipv4AddressCustomizer.class); - private final NamingContext interfaceContext; - private final DumpCacheManager<IpAddressDetailsReplyDump, IfaceDumpFilter> dumpManager; - public Ipv4AddressCustomizer(@Nonnull final FutureJVppCore futureJVppCore, @Nonnull final NamingContext interfaceContext) { - super(futureJVppCore); - this.interfaceContext = checkNotNull(interfaceContext, "interfaceContext should not be null"); - this.dumpManager = - new DumpCacheManager.DumpCacheManagerBuilder<IpAddressDetailsReplyDump, IfaceDumpFilter>() - .withExecutor(createAddressDumpExecutor(futureJVppCore)) - // Key needs to contain interface ID to distinguish dumps between interfaces - .withCacheKeyFactory(new TypeAwareIdentifierCacheKeyFactory(IpAddressDetailsReplyDump.class, - ImmutableSet.of(Interface.class))) - .build(); + super(interfaceContext, false, new DumpCacheManagerBuilder<IpAddressDetailsReplyDump, IfaceDumpFilter>() + .withExecutor(createAddressDumpExecutor(futureJVppCore)) + // Key needs to contain interface ID to distinguish dumps between interfaces + .withCacheKeyFactory(interfaceScopedCacheKeyFactory(IpAddressDetailsReplyDump.class)) + .build()); } @Override @@ -85,20 +74,14 @@ public class Ipv4AddressCustomizer extends FutureJVppCustomizer @Override public void readCurrentAttributes(@Nonnull InstanceIdentifier<Address> id, @Nonnull AddressBuilder builder, - @Nonnull ReadContext ctx) - throws ReadFailedException { + @Nonnull ReadContext ctx) throws ReadFailedException { LOG.debug("Reading attributes for interface address: {}", id); - - final String interfaceName = id.firstKeyOf(Interface.class).getName(); - final int interfaceIndex = interfaceContext.getIndex(interfaceName, ctx.getMappingContext()); - final Optional<IpAddressDetailsReplyDump> dumpOptional = - dumpManager.getDump(id, ctx.getModificationCache(), new IfaceDumpFilter(interfaceIndex, false)); + final Optional<IpAddressDetailsReplyDump> dumpOptional = interfaceAddressDumpSupplier(id, ctx); if (!dumpOptional.isPresent() || dumpOptional.get().ipAddressDetails.isEmpty()) { return; } - final Optional<IpAddressDetails> ipAddressDetails = - findIpv4AddressDetailsByIp(dumpOptional, id.firstKeyOf(Address.class).getIp()); + final Optional<IpAddressDetails> ipAddressDetails = findIpv4AddressDetailsByIp(dumpOptional, id.firstKeyOf(Address.class).getIp()); if (ipAddressDetails.isPresent()) { final IpAddressDetails detail = ipAddressDetails.get(); @@ -106,6 +89,8 @@ public class Ipv4AddressCustomizer extends FutureJVppCustomizer .setSubnet(new PrefixLengthBuilder().setPrefixLength(Short.valueOf(detail.prefixLength)).build()); if (LOG.isDebugEnabled()) { + final String interfaceName = id.firstKeyOf(Interface.class).getName(); + final int interfaceIndex = getInterfaceContext().getIndex(interfaceName, ctx.getMappingContext()); LOG.debug("Attributes for {} interface (id={}) address {} successfully read: {}", interfaceName, interfaceIndex, id, builder.build()); } @@ -116,13 +101,7 @@ public class Ipv4AddressCustomizer extends FutureJVppCustomizer public List<AddressKey> getAllIds(@Nonnull InstanceIdentifier<Address> id, @Nonnull ReadContext ctx) throws ReadFailedException { LOG.debug("Reading list of keys for interface addresses: {}", id); - - final String interfaceName = id.firstKeyOf(Interface.class).getName(); - final int interfaceIndex = interfaceContext.getIndex(interfaceName, ctx.getMappingContext()); - final Optional<IpAddressDetailsReplyDump> dumpOptional = - dumpManager.getDump(id, ctx.getModificationCache(), new IfaceDumpFilter(interfaceIndex, false)); - - return getAllIpv4AddressIds(dumpOptional, AddressKey::new); + return getAllIpv4AddressIds(interfaceAddressDumpSupplier(id, ctx), AddressKey::new); } @Override @@ -151,8 +130,8 @@ public class Ipv4AddressCustomizer extends FutureJVppCustomizer return new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.interfaces._interface.ipv4.address.subnet.PrefixLengthBuilder() .setPrefixLength( - ((org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.interfaces.state._interface.ipv4.address.subnet.PrefixLength) subnet) - .getPrefixLength()).build(); + ((org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.interfaces.state._interface.ipv4.address.subnet.PrefixLength) subnet) + .getPrefixLength()).build(); } static InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.interfaces._interface.ipv4.Address> getCfgId( diff --git a/v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/interfacesstate/ip/v4/Ipv4NeighbourCustomizer.java b/v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/interfacesstate/ip/v4/Ipv4NeighbourCustomizer.java index 0e5fb310f..c4eb7fd30 100644 --- a/v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/interfacesstate/ip/v4/Ipv4NeighbourCustomizer.java +++ b/v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/interfacesstate/ip/v4/Ipv4NeighbourCustomizer.java @@ -16,30 +16,18 @@ package io.fd.hc2vpp.v3po.interfacesstate.ip.v4; -import static org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.NeighborOrigin.Dynamic; -import static org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.NeighborOrigin.Static; - import com.google.common.base.Optional; -import com.google.common.collect.ImmutableSet; -import io.fd.hc2vpp.common.translate.util.FutureJVppCustomizer; import io.fd.hc2vpp.common.translate.util.NamingContext; -import io.fd.hc2vpp.v3po.interfacesstate.ip.IpReader; import io.fd.hc2vpp.v3po.interfacesstate.ip.dump.params.IfaceDumpFilter; +import io.fd.hc2vpp.v3po.interfacesstate.ip.readers.IpNeighbourReader; import io.fd.honeycomb.translate.read.ReadContext; import io.fd.honeycomb.translate.read.ReadFailedException; import io.fd.honeycomb.translate.spi.read.ListReaderCustomizer; -import io.fd.honeycomb.translate.util.read.cache.DumpCacheManager; import io.fd.honeycomb.translate.util.read.cache.DumpCacheManager.DumpCacheManagerBuilder; -import io.fd.honeycomb.translate.util.read.cache.DumpSupplier; -import io.fd.honeycomb.translate.util.read.cache.TypeAwareIdentifierCacheKeyFactory; import io.fd.vpp.jvpp.core.dto.IpNeighborDetails; import io.fd.vpp.jvpp.core.dto.IpNeighborDetailsReplyDump; import io.fd.vpp.jvpp.core.future.FutureJVppCore; -import java.util.List; -import java.util.function.Function; -import javax.annotation.Nonnull; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4AddressNoZone; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.interfaces.state._interface.Ipv4Builder; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.interfaces.state._interface.ipv4.Neighbor; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.interfaces.state._interface.ipv4.NeighborBuilder; @@ -48,26 +36,27 @@ import org.opendaylight.yangtools.concepts.Builder; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import javax.annotation.Nonnull; +import java.util.List; +import java.util.function.Function; + +import static org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.NeighborOrigin.Dynamic; +import static org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.NeighborOrigin.Static; + /** * Operational data read operation customizer for {@link Neighbor}<br> * Currently not supported in jvpp, so this is only dummy implementation<br> */ -public class Ipv4NeighbourCustomizer extends FutureJVppCustomizer - implements ListReaderCustomizer<Neighbor, NeighborKey, NeighborBuilder>, IpReader { - - private final DumpCacheManager<IpNeighborDetailsReplyDump, IfaceDumpFilter> dumpManager; - private final NamingContext interfaceContext; +public class Ipv4NeighbourCustomizer extends IpNeighbourReader + implements ListReaderCustomizer<Neighbor, NeighborKey, NeighborBuilder> { public Ipv4NeighbourCustomizer(@Nonnull final FutureJVppCore futureJVppCore, @Nonnull final NamingContext interfaceContext) { - super(futureJVppCore); - dumpManager = new DumpCacheManagerBuilder<IpNeighborDetailsReplyDump, IfaceDumpFilter>() + super(interfaceContext, false, new DumpCacheManagerBuilder<IpNeighborDetailsReplyDump, IfaceDumpFilter>() .withExecutor(createNeighbourDumpExecutor(futureJVppCore)) // cached with parent interface scope - .withCacheKeyFactory(new TypeAwareIdentifierCacheKeyFactory(IpNeighborDetailsReplyDump.class, - ImmutableSet.of(Interface.class))) - .build(); - this.interfaceContext = interfaceContext; + .withCacheKeyFactory(interfaceScopedCacheKeyFactory(IpNeighborDetailsReplyDump.class)) + .build()); } @Override @@ -81,7 +70,7 @@ public class Ipv4NeighbourCustomizer extends FutureJVppCustomizer final Ipv4AddressNoZone ip = id.firstKeyOf(Neighbor.class).getIp(); - final Optional<IpNeighborDetailsReplyDump> dumpOpt = dumpSupplier(id, ctx).get(); + final Optional<IpNeighborDetailsReplyDump> dumpOpt = interfaceNeighboursDump(id, ctx); if (dumpOpt.isPresent()) { dumpOpt.get().ipNeighborDetails @@ -100,7 +89,7 @@ public class Ipv4NeighbourCustomizer extends FutureJVppCustomizer @Override public List<NeighborKey> getAllIds(InstanceIdentifier<Neighbor> id, ReadContext context) throws ReadFailedException { - return getNeighborKeys(dumpSupplier(id, context), keyMapper()); + return getNeighborKeys(interfaceNeighboursDump(id, context), keyMapper()); } @Override @@ -111,13 +100,4 @@ public class Ipv4NeighbourCustomizer extends FutureJVppCustomizer private Function<IpNeighborDetails, NeighborKey> keyMapper() { return ipNeighborDetails -> new NeighborKey(arrayToIpv4AddressNoZone(ipNeighborDetails.ipAddress)); } - - private DumpSupplier<Optional<IpNeighborDetailsReplyDump>> dumpSupplier(final InstanceIdentifier<Neighbor> id, - final ReadContext context) { - return () -> dumpManager - .getDump(id, context.getModificationCache(), new IfaceDumpFilter(interfaceContext - .getIndex(id.firstKeyOf(Interface.class).getName(), context.getMappingContext()), - false)); - } - }
\ No newline at end of file diff --git a/v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/interfacesstate/ip/v4/subinterface/SubInterfaceIpv4AddressCustomizer.java b/v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/interfacesstate/ip/v4/subinterface/SubInterfaceIpv4AddressCustomizer.java index f27229acd..55fd6ca3a 100644 --- a/v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/interfacesstate/ip/v4/subinterface/SubInterfaceIpv4AddressCustomizer.java +++ b/v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/interfacesstate/ip/v4/subinterface/SubInterfaceIpv4AddressCustomizer.java @@ -16,15 +16,11 @@ package io.fd.hc2vpp.v3po.interfacesstate.ip.v4.subinterface; -import static com.google.common.base.Preconditions.checkNotNull; - import com.google.common.base.Optional; -import com.google.common.collect.ImmutableSet; -import io.fd.hc2vpp.common.translate.util.FutureJVppCustomizer; import io.fd.hc2vpp.common.translate.util.NamingContext; import io.fd.hc2vpp.v3po.interfacesstate.SubInterfaceCustomizer; -import io.fd.hc2vpp.v3po.interfacesstate.ip.IpReader; import io.fd.hc2vpp.v3po.interfacesstate.ip.dump.params.IfaceDumpFilter; +import io.fd.hc2vpp.v3po.interfacesstate.ip.readers.IpAddressReader; import io.fd.hc2vpp.v3po.util.SubInterfaceUtils; import io.fd.honeycomb.translate.read.ReadContext; import io.fd.honeycomb.translate.read.ReadFailedException; @@ -32,12 +28,9 @@ import io.fd.honeycomb.translate.spi.read.Initialized; import io.fd.honeycomb.translate.spi.read.InitializingListReaderCustomizer; import io.fd.honeycomb.translate.util.RWUtils; import io.fd.honeycomb.translate.util.read.cache.DumpCacheManager; -import io.fd.honeycomb.translate.util.read.cache.TypeAwareIdentifierCacheKeyFactory; import io.fd.vpp.jvpp.core.dto.IpAddressDetails; import io.fd.vpp.jvpp.core.dto.IpAddressDetailsReplyDump; import io.fd.vpp.jvpp.core.future.FutureJVppCore; -import java.util.List; -import javax.annotation.Nonnull; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.vlan.rev161214.interfaces.state._interface.sub.interfaces.SubInterface; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.vlan.rev161214.sub._interface.ip4.attributes.Ipv4; @@ -52,27 +45,24 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.annotation.Nonnull; +import java.util.List; + /** * Read customizer for sub-interface Ipv4 addresses. */ -public class SubInterfaceIpv4AddressCustomizer extends FutureJVppCustomizer - implements InitializingListReaderCustomizer<Address, AddressKey, AddressBuilder>, IpReader { +public class SubInterfaceIpv4AddressCustomizer extends IpAddressReader + implements InitializingListReaderCustomizer<Address, AddressKey, AddressBuilder> { private static final Logger LOG = LoggerFactory.getLogger(SubInterfaceIpv4AddressCustomizer.class); - private final NamingContext interfaceContext; - private final DumpCacheManager<IpAddressDetailsReplyDump, IfaceDumpFilter> dumpManager; - public SubInterfaceIpv4AddressCustomizer(@Nonnull final FutureJVppCore futureJVppCore, @Nonnull final NamingContext interfaceContext) { - super(futureJVppCore); - this.interfaceContext = checkNotNull(interfaceContext, "interfaceContext should not be null"); - this.dumpManager = new DumpCacheManager.DumpCacheManagerBuilder<IpAddressDetailsReplyDump, IfaceDumpFilter>() + super(interfaceContext, false, new DumpCacheManager.DumpCacheManagerBuilder<IpAddressDetailsReplyDump, IfaceDumpFilter>() .withExecutor(createAddressDumpExecutor(futureJVppCore)) //same as with ipv4 addresses for interfaces, these must have cache scope of their parent sub-interface - .withCacheKeyFactory(new TypeAwareIdentifierCacheKeyFactory(IpAddressDetailsReplyDump.class, - ImmutableSet.of(SubInterface.class))) - .build(); + .withCacheKeyFactory(subInterfaceScopedCacheKeyFactory(IpAddressDetailsReplyDump.class)) + .build()); } private static String getSubInterfaceName(@Nonnull final InstanceIdentifier<Address> id) { @@ -92,13 +82,8 @@ public class SubInterfaceIpv4AddressCustomizer extends FutureJVppCustomizer throws ReadFailedException { LOG.debug("Reading attributes for sub-interface address: {}", id); - final String subInterfaceName = getSubInterfaceName(id); - final int subInterfaceIndex = interfaceContext.getIndex(subInterfaceName, ctx.getMappingContext()); - final Optional<IpAddressDetailsReplyDump> dumpOptional = dumpManager - .getDump(id, ctx.getModificationCache(), new IfaceDumpFilter(subInterfaceIndex, false)); - final Optional<IpAddressDetails> ipAddressDetails = - findIpv4AddressDetailsByIp(dumpOptional, id.firstKeyOf(Address.class).getIp()); + findIpv4AddressDetailsByIp(subInterfaceAddressDumpSupplier(id, ctx), id.firstKeyOf(Address.class).getIp()); if (ipAddressDetails.isPresent()) { final IpAddressDetails detail = ipAddressDetails.get(); @@ -106,6 +91,8 @@ public class SubInterfaceIpv4AddressCustomizer extends FutureJVppCustomizer builder.setSubnet(new PrefixLengthBuilder().setPrefixLength((short) detail.prefixLength).build()); if (LOG.isDebugEnabled()) { + final String subInterfaceName = getSubInterfaceName(id); + final int subInterfaceIndex = getInterfaceContext().getIndex(subInterfaceName, ctx.getMappingContext()); LOG.debug("Attributes for {} sub-interface (id={}) address {} successfully read: {}", subInterfaceName, subInterfaceIndex, id, builder.build()); } @@ -117,13 +104,7 @@ public class SubInterfaceIpv4AddressCustomizer extends FutureJVppCustomizer public List<AddressKey> getAllIds(@Nonnull InstanceIdentifier<Address> id, @Nonnull ReadContext ctx) throws ReadFailedException { LOG.debug("Reading list of keys for sub-interface addresses: {}", id); - - final String subInterfaceName = getSubInterfaceName(id); - final int subInterfaceIndex = interfaceContext.getIndex(subInterfaceName, ctx.getMappingContext()); - final Optional<IpAddressDetailsReplyDump> dumpOptional = dumpManager - .getDump(id, ctx.getModificationCache(), new IfaceDumpFilter(subInterfaceIndex, false)); - - return getAllIpv4AddressIds(dumpOptional, AddressKey::new); + return getAllIpv4AddressIds(subInterfaceAddressDumpSupplier(id, ctx), AddressKey::new); } @Override diff --git a/v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/interfacesstate/ip/v4/subinterface/SubInterfaceIpv4NeighbourCustomizer.java b/v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/interfacesstate/ip/v4/subinterface/SubInterfaceIpv4NeighbourCustomizer.java index 71833db0d..aaedabd9f 100644 --- a/v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/interfacesstate/ip/v4/subinterface/SubInterfaceIpv4NeighbourCustomizer.java +++ b/v3po/v3po2vpp/src/main/java/io/fd/hc2vpp/v3po/interfacesstate/ip/v4/subinterface/SubInterfaceIpv4NeighbourCustomizer.java @@ -17,26 +17,17 @@ package io.fd.hc2vpp.v3po.interfacesstate.ip.v4.subinterface; import com.google.common.base.Optional; -import com.google.common.collect.ImmutableSet; -import io.fd.hc2vpp.common.translate.util.FutureJVppCustomizer; import io.fd.hc2vpp.common.translate.util.NamingContext; -import io.fd.hc2vpp.v3po.interfacesstate.ip.IpReader; import io.fd.hc2vpp.v3po.interfacesstate.ip.dump.params.IfaceDumpFilter; +import io.fd.hc2vpp.v3po.interfacesstate.ip.readers.IpNeighbourReader; import io.fd.honeycomb.translate.read.ReadContext; import io.fd.honeycomb.translate.read.ReadFailedException; import io.fd.honeycomb.translate.spi.read.ListReaderCustomizer; -import io.fd.honeycomb.translate.util.read.cache.DumpCacheManager; import io.fd.honeycomb.translate.util.read.cache.DumpCacheManager.DumpCacheManagerBuilder; -import io.fd.honeycomb.translate.util.read.cache.DumpSupplier; -import io.fd.honeycomb.translate.util.read.cache.TypeAwareIdentifierCacheKeyFactory; import io.fd.vpp.jvpp.core.dto.IpNeighborDetails; import io.fd.vpp.jvpp.core.dto.IpNeighborDetailsReplyDump; import io.fd.vpp.jvpp.core.future.FutureJVppCore; -import java.util.List; -import java.util.function.Function; -import javax.annotation.Nonnull; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4AddressNoZone; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.vlan.rev161214.sub._interface.ip4.attributes.Ipv4Builder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.vlan.rev161214.sub._interface.ip4.attributes.ipv4.Neighbor; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.vlan.rev161214.sub._interface.ip4.attributes.ipv4.NeighborBuilder; @@ -45,22 +36,20 @@ import org.opendaylight.yangtools.concepts.Builder; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -public class SubInterfaceIpv4NeighbourCustomizer extends FutureJVppCustomizer - implements ListReaderCustomizer<Neighbor, NeighborKey, NeighborBuilder>, IpReader { +import javax.annotation.Nonnull; +import java.util.List; +import java.util.function.Function; - private final DumpCacheManager<IpNeighborDetailsReplyDump, IfaceDumpFilter> dumpManager; - private final NamingContext interfaceContext; +public class SubInterfaceIpv4NeighbourCustomizer extends IpNeighbourReader + implements ListReaderCustomizer<Neighbor, NeighborKey, NeighborBuilder> { public SubInterfaceIpv4NeighbourCustomizer(@Nonnull final FutureJVppCore futureJVppCore, @Nonnull final NamingContext interfaceContext) { - super(futureJVppCore); - dumpManager = new DumpCacheManagerBuilder<IpNeighborDetailsReplyDump, IfaceDumpFilter>() + super(interfaceContext, false, new DumpCacheManagerBuilder<IpNeighborDetailsReplyDump, IfaceDumpFilter>() .withExecutor(createNeighbourDumpExecutor(futureJVppCore)) // cached with parent interface scope - .withCacheKeyFactory(new TypeAwareIdentifierCacheKeyFactory(IpNeighborDetailsReplyDump.class, - ImmutableSet.of(Interface.class))) - .build(); - this.interfaceContext = interfaceContext; + .withCacheKeyFactory(subInterfaceScopedCacheKeyFactory(IpNeighborDetailsReplyDump.class)) + .build()); } @Override @@ -74,7 +63,7 @@ public class SubInterfaceIpv4NeighbourCustomizer extends FutureJVppCustomizer final Ipv4AddressNoZone ip = id.firstKeyOf(Neighbor.class).getIp(); - final Optional<IpNeighborDetailsReplyDump> dumpOpt = dumpSupplier(id, ctx).get(); + final Optional<IpNeighborDetailsReplyDump> dumpOpt = subInterfaceNeighboursDump(id, ctx); if (dumpOpt.isPresent()) { dumpOpt.get().ipNeighborDetails @@ -90,7 +79,7 @@ public class SubInterfaceIpv4NeighbourCustomizer extends FutureJVppCustomizer @Override public List<NeighborKey> getAllIds(InstanceIdentifier<Neighbor> id, ReadContext context) throws ReadFailedException { - return getNeighborKeys(dumpSupplier(id, context), keyMapper()); + return getNeighborKeys(subInterfaceNeighboursDump(id, context), keyMapper()); } @Override @@ -101,13 +90,4 @@ public class SubInterfaceIpv4NeighbourCustomizer extends FutureJVppCustomizer private Function<IpNeighborDetails, NeighborKey> keyMapper() { return ipNeighborDetails -> new NeighborKey(arrayToIpv4AddressNoZone(ipNeighborDetails.ipAddress)); } - - private DumpSupplier<Optional<IpNeighborDetailsReplyDump>> dumpSupplier(final InstanceIdentifier<Neighbor> id, - final ReadContext context) { - return () -> dumpManager - .getDump(id, context.getModificationCache(), new IfaceDumpFilter(interfaceContext - .getIndex(id.firstKeyOf(Interface.class).getName(), context.getMappingContext()), - false)); - } - }
\ No newline at end of file |