X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=mappingservice%2Fimplementation%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Flispflowmapping%2Fimplementation%2FMappingSystem.java;h=3b3233e26fcda5371ef921d1aa3ab38d31b0923e;hb=2f59fc2aa0459f79de5a441b06850cc2d017ecc8;hp=3f5fd1c8fa88dbd8452d2075874093e67b38306b;hpb=2781325a3c7a6ddfcf41899896cd7e0cd3187556;p=lispflowmapping.git diff --git a/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/MappingSystem.java b/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/MappingSystem.java index 3f5fd1c8f..3b3233e26 100644 --- a/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/MappingSystem.java +++ b/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/MappingSystem.java @@ -13,11 +13,11 @@ import java.util.EnumMap; import java.util.List; import org.opendaylight.lispflowmapping.implementation.config.ConfigIni; -import org.opendaylight.controller.sal.binding.api.BindingAwareBroker; import org.opendaylight.lispflowmapping.implementation.mapcache.FlatMapCache; import org.opendaylight.lispflowmapping.implementation.mapcache.MultiTableMapCache; import org.opendaylight.lispflowmapping.implementation.mapcache.SimpleMapCache; import org.opendaylight.lispflowmapping.implementation.mdsal.DataStoreBackEnd; +import org.opendaylight.lispflowmapping.implementation.util.DSBEInputUtil; import org.opendaylight.lispflowmapping.implementation.util.MappingMergeUtil; import org.opendaylight.lispflowmapping.interfaces.dao.ILispDAO; import org.opendaylight.lispflowmapping.interfaces.mapcache.IMapCache; @@ -30,6 +30,7 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.addres import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.ServicePath; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.explicit.locator.path.explicit.locator.path.Hop; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.SiteId; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.locatorrecords.LocatorRecord; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.locatorrecords.LocatorRecordBuilder; @@ -60,7 +61,6 @@ public class MappingSystem implements IMappingSystem { private IMapCache pmc; private final EnumMap tableMap = new EnumMap<>(MappingOrigin.class); private DataStoreBackEnd dsbe; - private BindingAwareBroker bindingAwareBroker; public MappingSystem(ILispDAO dao, boolean iterateMask, boolean notifications, boolean overwrite) { this.dao = dao; @@ -175,7 +175,7 @@ public class MappingSystem implements IMappingSystem { Object nbMapping = pmc.getMapping(src, dst); if (nbMapping == null) { - return smc.getMapping(src, dst); + return getSbMappingWithExpiration(src, dst); } if (dst.getAddress() instanceof ServicePath) { return updateServicePathMappingRecord((MappingRecord) nbMapping, dst); @@ -195,7 +195,7 @@ public class MappingSystem implements IMappingSystem { if (dst.getAddress() instanceof ServicePath) { return updateServicePathMappingRecord((MappingRecord)nbMapping, dst); } - Object sbMapping = smc.getMapping(src, dst); + Object sbMapping = getSbMappingWithExpiration(src, dst); if (sbMapping == null) { return nbMapping; } @@ -203,6 +203,19 @@ public class MappingSystem implements IMappingSystem { return MappingMergeUtil.computeNbSbIntersection((MappingRecord)nbMapping, (MappingRecord)sbMapping); } + private Object getSbMappingWithExpiration(Eid src, Eid dst) { + Object mappingObject = smc.getMapping(src, dst); + if (mappingObject instanceof MappingRecord) { + MappingRecord mapping = (MappingRecord) mappingObject; + if (MappingMergeUtil.mappingIsExpired(mapping)) { + dsbe.removeMapping(DSBEInputUtil.toMapping(MappingOrigin.Southbound, mapping.getEid(), + new SiteId(mapping.getSiteId()), mapping)); + return null; + } + } + return mappingObject; + } + @Override public Object getMapping(Eid dst) { return getMapping((Eid)null, dst); @@ -210,6 +223,9 @@ public class MappingSystem implements IMappingSystem { @Override public Object getMapping(MappingOrigin origin, Eid key) { + if (origin.equals(MappingOrigin.Southbound)) { + return getSbMappingWithExpiration(null, key); + } return tableMap.get(origin).getMapping(null, key); } @@ -223,7 +239,7 @@ public class MappingSystem implements IMappingSystem { @Override public void addAuthenticationKey(Eid key, MappingAuthkey authKey) { - LOG.debug("Adding authentication key '{}' for {}", authKey.getKeyString(), + LOG.debug("Adding authentication key '{}' with key-ID {} for {}", authKey.getKeyString(), authKey.getKeyType(), LispAddressStringifier.getString(key)); smc.addAuthenticationKey(key, authKey); } @@ -269,9 +285,16 @@ public class MappingSystem implements IMappingSystem { LOG.info("Restoring {} mappings and {} keys from datastore into DAO", mappings.size(), authKeys.size()); + int expiredMappings = 0; for (Mapping mapping : mappings) { + if (MappingMergeUtil.mappingIsExpired(mapping.getMappingRecord())) { + dsbe.removeMapping(mapping); + expiredMappings++; + continue; + } addMapping(mapping.getOrigin(), mapping.getMappingRecord().getEid(), mapping.getMappingRecord()); } + LOG.info("{} mappings were expired and were not restored", expiredMappings); for (AuthenticationKey authKey : authKeys) { addAuthenticationKey(authKey.getEid(), authKey.getMappingAuthkey());