Add initializer for FIB tables 11/13311/3
authorMarek Gradzki <[email protected]>
Mon, 2 Jul 2018 05:09:14 +0000 (07:09 +0200)
committerMarek Gradzki <[email protected]>
Mon, 2 Jul 2018 07:18:07 +0000 (09:18 +0200)
Default FIB tables (ID=0) are created in VPP during startup
for both ipv4 and ipv6.
In order to prevent oper and cfg mismatch,
HC needs to update its cfg during startup.

This patch adds initializer for FIB tables which handles that task.

Change-Id: Iadae8d545985a07fdb32000d3ca498cf3f9b40ed
Signed-off-by: Marek Gradzki <[email protected]>
fib-management/fib-management-impl/src/main/java/io/fd/hc2vpp/fib/management/read/FibManagementReaderFactory.java
fib-management/fib-management-impl/src/main/java/io/fd/hc2vpp/fib/management/read/FibTableCustomizer.java
fib-management/fib-management-impl/src/test/java/io/fd/hc2vpp/fib/management/read/FibTableCustomizerTest.java

index d3adc91..4c1de90 100644 (file)
@@ -19,7 +19,7 @@ package io.fd.hc2vpp.fib.management.read;
 import com.google.inject.Inject;
 import io.fd.hc2vpp.common.translate.util.JvppReplyConsumer;
 import io.fd.hc2vpp.fib.management.FibManagementIIds;
-import io.fd.honeycomb.translate.impl.read.GenericListReader;
+import io.fd.honeycomb.translate.impl.read.GenericInitListReader;
 import io.fd.honeycomb.translate.read.ReaderFactory;
 import io.fd.honeycomb.translate.read.registry.ModifiableReaderRegistryBuilder;
 import io.fd.honeycomb.translate.util.read.cache.DumpCacheManager;
@@ -47,7 +47,7 @@ public final class FibManagementReaderFactory implements ReaderFactory, JvppRepl
 
         registry.addStructuralReader(FibManagementIIds.FIB_MNGMNT, FibTableManagementBuilder.class);
         registry.addStructuralReader(FibManagementIIds.FM_FIB_TABLES, FibTablesBuilder.class);
-        registry.add(new GenericListReader<>(FibManagementIIds.FM_FTBLS_TABLE,
+        registry.add(new GenericInitListReader<>(FibManagementIIds.FM_FTBLS_TABLE,
                 new FibTableCustomizer(ipv4DumpManager, ipv6DumpManager)));
     }
 
index 0151a15..08c8328 100644 (file)
@@ -20,7 +20,8 @@ package io.fd.hc2vpp.fib.management.read;
 import io.fd.hc2vpp.common.translate.util.ByteDataTranslator;
 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.spi.read.Initialized;
+import io.fd.honeycomb.translate.spi.read.InitializingListReaderCustomizer;
 import io.fd.honeycomb.translate.util.read.cache.DumpCacheManager;
 import io.fd.vpp.jvpp.core.dto.Ip6FibDetailsReplyDump;
 import io.fd.vpp.jvpp.core.dto.IpFibDetailsReplyDump;
@@ -40,7 +41,7 @@ import org.opendaylight.yangtools.concepts.Builder;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 
-class FibTableCustomizer implements ListReaderCustomizer<Table, TableKey, TableBuilder>, ByteDataTranslator {
+class FibTableCustomizer implements InitializingListReaderCustomizer<Table, TableKey, TableBuilder>, ByteDataTranslator {
     private final DumpCacheManager<IpFibDetailsReplyDump, Void> ipv4DumpManager;
     private final DumpCacheManager<Ip6FibDetailsReplyDump, Void> ipv6DumpManager;
 
@@ -116,4 +117,12 @@ class FibTableCustomizer implements ListReaderCustomizer<Table, TableKey, TableB
             builder.setName(toString(tableName));
         }
     }
+
+    @Nonnull
+    @Override
+    public Initialized<Table> init(@Nonnull final InstanceIdentifier<Table> id,
+                                   @Nonnull final Table readValue,
+                                   @Nonnull final ReadContext ctx) {
+        return Initialized.create(id, readValue);
+    }
 }
index 6b2d8c4..081553e 100644 (file)
@@ -22,7 +22,7 @@ import static org.junit.Assert.assertThat;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.when;
 
-import io.fd.hc2vpp.common.test.read.ListReaderCustomizerTest;
+import io.fd.hc2vpp.common.test.read.InitializingListReaderCustomizerTest;
 import io.fd.hc2vpp.common.translate.util.AddressTranslator;
 import io.fd.hc2vpp.fib.management.FibManagementIIds;
 import io.fd.honeycomb.translate.ModificationCache;
@@ -52,8 +52,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.fib.
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.fib.table.management.rev180521.vpp.fib.table.management.fib.tables.TableKey;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 
-public class FibTableCustomizerTest extends ListReaderCustomizerTest<Table, TableKey, TableBuilder> implements
-        AddressTranslator {
+public class FibTableCustomizerTest extends InitializingListReaderCustomizerTest<Table, TableKey, TableBuilder>
+    implements AddressTranslator {
 
     private static final String IPV4_VRF_1 = "IPV4_VRF_1";
     private static final IpAddress NEXT_HOP_1 = new IpAddress(new Ipv6Address("a::1"));
@@ -165,6 +165,12 @@ public class FibTableCustomizerTest extends ListReaderCustomizerTest<Table, Tabl
         Assert.assertEquals(IPV4_VRF_1, builder.getName());
     }
 
+    @Test
+    public void testInit() {
+        final Table data = new TableBuilder().build();
+        invokeInitTest(TABLE_V4_ID, data, TABLE_V4_ID, data);
+    }
+
     @Override
     protected ReaderCustomizer<Table, TableBuilder> initCustomizer() {
         return new FibTableCustomizer(manager_v4, manager_v6);