X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=bgpmanager%2Fbgpmanager-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fbgpmanager%2FFibDSWriter.java;fp=bgpmanager%2Fbgpmanager-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fbgpmanager%2FFibDSWriter.java;h=28d196a093992fe7f1281eff8da85c8119f5885b;hb=af54dae39b3a27d1943996ae9dc75013a79da85c;hp=8cab61572c9553386d0f581f695e8fd4b2fc51b5;hpb=c5e5099f13dd1b3b53c168f2b461b902758f6d4c;p=vpnservice.git diff --git a/bgpmanager/bgpmanager-impl/src/main/java/org/opendaylight/bgpmanager/FibDSWriter.java b/bgpmanager/bgpmanager-impl/src/main/java/org/opendaylight/bgpmanager/FibDSWriter.java index 8cab6157..28d196a0 100644 --- a/bgpmanager/bgpmanager-impl/src/main/java/org/opendaylight/bgpmanager/FibDSWriter.java +++ b/bgpmanager/bgpmanager-impl/src/main/java/org/opendaylight/bgpmanager/FibDSWriter.java @@ -15,6 +15,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.fibmanager.rev15 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.fibmanager.rev150330.fibentries.VrfTables; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.fibmanager.rev150330.fibentries.VrfTablesBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.fibmanager.rev150330.fibentries.VrfTablesKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.fibmanager.rev150330.vrfentries.VrfEntryKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.fibmanager.rev150330.FibEntries; import org.slf4j.Logger; @@ -43,37 +44,19 @@ public class FibDSWriter { VrfEntry vrfEntry = new VrfEntryBuilder().setDestPrefix(prefix). setNextHopAddress(nexthop).setLabel((long)label).build(); + logger.debug("Created vrfEntry for " + prefix + " nexthop " + nexthop + " label " + label); + + List vrfEntryList = new ArrayList(); + vrfEntryList.add(vrfEntry); - logger.info("Created vrfEntry for " + prefix + " nexthop " + nexthop + " label " + label); InstanceIdentifierBuilder idBuilder = InstanceIdentifier.builder(FibEntries.class).child(VrfTables.class, new VrfTablesKey(rd)); - - InstanceIdentifier vrfTableId = idBuilder.build(); - Optional vrfTable = read(LogicalDatastoreType.CONFIGURATION, vrfTableId); - if (vrfTable.isPresent()) { - List vrfEntryListExisting = vrfTable.get().getVrfEntry(); - vrfEntryListExisting.add(vrfEntry); + VrfTables vrfTableNew = new VrfTablesBuilder().setRouteDistinguisher(rd). + setVrfEntry(vrfEntryList).build(); - VrfTables vrfTableUpdate = new VrfTablesBuilder().setRouteDistinguisher(rd). - setVrfEntry(vrfEntryListExisting).build(); - write(LogicalDatastoreType.CONFIGURATION, vrfTableId, vrfTableUpdate); - } - else { - List vrfEntryList = new ArrayList(); - vrfEntryList.add(vrfEntry); - - //add a new vrf table with this vrf entry - VrfTables vrfTableNew = new VrfTablesBuilder().setRouteDistinguisher(rd). - setVrfEntry(vrfEntryList).build(); - - - InstanceIdentifier vrfTableNewId = InstanceIdentifier.builder(FibEntries.class) - .child(VrfTables.class, new VrfTablesKey(rd)).build(); - - write(LogicalDatastoreType.CONFIGURATION, vrfTableNewId, vrfTableNew); - } + write(LogicalDatastoreType.CONFIGURATION, vrfTableId, vrfTableNew); } @@ -81,26 +64,11 @@ public class FibDSWriter { logger.debug("Removing fib entry with destination prefix " + prefix + " from vrf table for rd " + rd); - InstanceIdentifierBuilder idBuilder = - InstanceIdentifier.builder(FibEntries.class).child(VrfTables.class, new VrfTablesKey(rd)); - InstanceIdentifier vrfTableId = idBuilder.build(); - Optional vrfTable = read(LogicalDatastoreType.CONFIGURATION, vrfTableId); - if (vrfTable.isPresent()) { - String searchPfx = prefix; - - List vrfEntryListExisting = vrfTable.get().getVrfEntry(); - for (Iterator it = vrfEntryListExisting.iterator(); it.hasNext(); ) { - VrfEntry elem = it.next(); - if (elem.getDestPrefix().equals(searchPfx)) { - it.remove(); - break; - } - } - - VrfTables vrfTableUpdate = new VrfTablesBuilder().setRouteDistinguisher(rd). - setVrfEntry(vrfEntryListExisting).build(); - write(LogicalDatastoreType.CONFIGURATION, vrfTableId, vrfTableUpdate); - } + InstanceIdentifierBuilder idBuilder = + InstanceIdentifier.builder(FibEntries.class).child(VrfTables.class, new VrfTablesKey(rd)).child(VrfEntry.class, new VrfEntryKey(prefix)); + InstanceIdentifier vrfEntryId = idBuilder.build(); + delete(LogicalDatastoreType.CONFIGURATION, vrfEntryId); + } private Optional read(LogicalDatastoreType datastoreType, @@ -121,7 +89,13 @@ public class FibDSWriter { private void write(LogicalDatastoreType datastoreType, InstanceIdentifier path, T data) { WriteTransaction tx = broker.newWriteOnlyTransaction(); - tx.put(datastoreType, path, data, true); + tx.merge(datastoreType, path, data, true); + tx.submit(); + } + + private void delete(LogicalDatastoreType datastoreType, InstanceIdentifier path) { + WriteTransaction tx = broker.newWriteOnlyTransaction(); + tx.delete(datastoreType, path); tx.submit(); } }