Checkstyle: enforce 120 character limit
[lispflowmapping.git] / mappingservice / implementation / src / main / java / org / opendaylight / lispflowmapping / implementation / MappingSystem.java
index 3f5fd1c8fa88dbd8452d2075874093e67b38306b..3b3233e26fcda5371ef921d1aa3ab38d31b0923e 100644 (file)
@@ -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<MappingOrigin, IMapCache> 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());