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;
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) {
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();