Bug 4932: Sending SMRs to subscribers after storeing the new record. 68/32468/2
authorvermagan@cisco.com <vermagan@cisco.com>
Wed, 13 Jan 2016 04:04:38 +0000 (20:04 -0800)
committervermagan@cisco.com <vermagan@cisco.com>
Wed, 13 Jan 2016 18:57:25 +0000 (10:57 -0800)
Change-Id: I0605cc8858c32f82e87fb8564d3cca3823c8a268
Signed-off-by: vermagan@cisco.com <vermagan@cisco.com>
mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/lisp/MapServer.java

index 9d0af350ad858416f763510c8988b8843484b597..77d345a45c7e167464be53a9a7e828b499d093ad 100644 (file)
@@ -24,6 +24,7 @@ import org.opendaylight.lispflowmapping.interfaces.dao.SubscriberRLOC;
 import org.opendaylight.lispflowmapping.interfaces.lisp.IMapNotifyHandler;
 import org.opendaylight.lispflowmapping.interfaces.lisp.IMapServerAsync;
 import org.opendaylight.lispflowmapping.interfaces.mappingservice.IMappingService;
+import org.opendaylight.lispflowmapping.lisp.util.LispAddressStringifier;
 import org.opendaylight.lispflowmapping.lisp.util.LispAddressUtil;
 import org.opendaylight.lispflowmapping.lisp.util.MapNotifyBuilderHelper;
 import org.opendaylight.lispflowmapping.lisp.util.MapRequestUtil;
@@ -88,7 +89,11 @@ public class MapServer implements IMapServerAsync, OdlMappingserviceListener {
 
     public void handleMapRegister(MapRegister mapRegister) {
         boolean failed = false;
+        boolean updated = false;
         String password = null;
+        Set<SubscriberRLOC> subscribers = null;
+        MappingRecord oldMapping;
+
         for (MappingRecordItem record : mapRegister.getMappingRecordItem()) {
             MappingRecord mapping = record.getMappingRecord();
             if (authenticate) {
@@ -102,15 +107,22 @@ public class MapServer implements IMapServerAsync, OdlMappingserviceListener {
                     break;
                 }
             }
-            MappingRecord oldMapping = (MappingRecord) mapService.getMapping(MappingOrigin.Southbound,
+            oldMapping = (MappingRecord) mapService.getMapping(MappingOrigin.Southbound,
                     mapping.getEid());
 
             if (subscriptionService && !mapping.equals(oldMapping)) {
-                LOG.debug("Sending SMRs for subscribers of {}", mapping.getEid());
-                Set<SubscriberRLOC> subscribers = getSubscribers(mapping.getEid());
-                sendSmrs(mapping, subscribers);
+                if (LOG.isDebugEnabled()){
+                    LOG.debug("Mapping update occured for {} SMRs will be sent for its subscribers.",  LispAddressStringifier.getString(mapping.getEid()));
+                }
+                subscribers = getSubscribers(mapping.getEid());
+                updated = true;
             }
+            // Must update the record before sending SMRs
             mapService.addMapping(MappingOrigin.Southbound, mapping.getEid(), getSiteId(mapRegister), mapping);
+            if (updated) {
+                updated = false;
+                sendSmrs(mapping, subscribers);
+            }
         }
         if (!failed) {
             MapNotifyBuilder builder = new MapNotifyBuilder();