X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=mappingservice%2Fimplementation%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Flispflowmapping%2Fimplementation%2Fmdsal%2FMappingDataListener.java;h=e2a0afdb1e4bf216fb1ca23a83ecc2bc8eb80498;hb=e6633a31621315c04c9e344ba54dca96236ad892;hp=45f3c631d244c4a7d839cf591bd3912e45ec2e9b;hpb=9919fa654c9218cbda89876d7ab2099d2925c913;p=lispflowmapping.git diff --git a/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/mdsal/MappingDataListener.java b/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/mdsal/MappingDataListener.java index 45f3c631d..e2a0afdb1 100644 --- a/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/mdsal/MappingDataListener.java +++ b/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/mdsal/MappingDataListener.java @@ -8,22 +8,20 @@ package org.opendaylight.lispflowmapping.implementation.mdsal; import java.util.ArrayList; -import java.util.Collection; import java.util.List; - -import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.controller.md.sal.binding.api.DataObjectModification; -import org.opendaylight.controller.md.sal.binding.api.DataObjectModification.ModificationType; -import org.opendaylight.controller.md.sal.binding.api.DataTreeModification; -import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService; -import org.opendaylight.lispflowmapping.implementation.util.MSNotificationInputUtil; import org.opendaylight.lispflowmapping.interfaces.mapcache.IMappingSystem; +import org.opendaylight.lispflowmapping.lisp.type.MappingData; import org.opendaylight.lispflowmapping.lisp.util.LispAddressUtil; +import org.opendaylight.mdsal.binding.api.DataBroker; +import org.opendaylight.mdsal.binding.api.DataObjectModification; +import org.opendaylight.mdsal.binding.api.DataObjectModification.ModificationType; +import org.opendaylight.mdsal.binding.api.DataTreeModification; +import org.opendaylight.mdsal.binding.api.NotificationPublishService; +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; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.container.MappingRecord; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.container.MappingRecordBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.MappingChange; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping._record.container.MappingRecord; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping._record.container.MappingRecordBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.MappingDatabase; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.MappingOrigin; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.db.instance.Mapping; @@ -44,6 +42,7 @@ public class MappingDataListener extends AbstractDataListener { private static final Logger LOG = LoggerFactory.getLogger(MappingDataListener.class); private IMappingSystem mapSystem; private NotificationPublishService notificationPublishService; + private final boolean isMaster = false; public MappingDataListener(DataBroker broker, IMappingSystem msmr, NotificationPublishService nps) { setBroker(broker); @@ -64,72 +63,58 @@ public class MappingDataListener extends AbstractDataListener { } @Override - public void onDataTreeChanged(Collection> changes) { + public void onDataTreeChanged(List> changes) { for (DataTreeModification change : changes) { final DataObjectModification mod = change.getRootNode(); - if (ModificationType.DELETE == mod.getModificationType()) { + if (ModificationType.DELETE == mod.modificationType()) { // Process deleted mappings - final Mapping mapping = mod.getDataBefore(); + final Mapping mapping = mod.dataBefore(); // Only treat mapping changes caused by Northbound, since Southbound changes are already handled - // before being persisted. - if (mapping.getOrigin() == MappingOrigin.Southbound) { + // before being persisted, except for cluster slaves + if (mapping.getOrigin() == MappingOrigin.Southbound && mapSystem.isMaster()) { continue; } LOG.trace("Received deleted data"); - LOG.trace("Key: {}", change.getRootPath().getRootIdentifier()); + LOG.trace("Key: {}", change.getRootPath().path()); LOG.trace("Value: {}", mapping); final Mapping convertedMapping = convertToBinaryIfNecessary(mapping); mapSystem.removeMapping(convertedMapping.getOrigin(), convertedMapping.getMappingRecord().getEid()); - try { - notificationPublishService.putNotification(MSNotificationInputUtil.toMappingChanged( - convertedMapping, MappingChange.Removed)); - } catch (InterruptedException e) { - LOG.warn("Notification publication interrupted!"); - } - } else if (ModificationType.SUBTREE_MODIFIED == mod.getModificationType() || ModificationType.WRITE == mod - .getModificationType()) { - final Mapping mapping = mod.getDataAfter(); + } else if (ModificationType.SUBTREE_MODIFIED == mod.modificationType() + || ModificationType.WRITE == mod.modificationType()) { + final Mapping mapping = mod.dataAfter(); // Only treat mapping changes caused by Northbound, since Southbound changes are already handled - // before being persisted. XXX separate NB and SB to avoid ignoring SB notifications - if (mapping.getOrigin() == MappingOrigin.Southbound) { + // before being persisted, except for cluster slaves XXX separate NB and SB to avoid ignoring + // SB notifications + if (mapping.getOrigin() == MappingOrigin.Southbound && mapSystem.isMaster()) { continue; } - MappingChange mappingChange; + final Mapping convertedMapping = convertToBinaryIfNecessary(mapping); + Eid convertedEid = convertedMapping.getMappingRecord().getEid(); - if (ModificationType.SUBTREE_MODIFIED == mod.getModificationType()) { + if (ModificationType.SUBTREE_MODIFIED == mod.modificationType()) { LOG.trace("Received update data"); - mappingChange = MappingChange.Updated; + LOG.trace("Key: {}", change.getRootPath().path()); + LOG.trace("Value: {}", mapping); + mapSystem.updateMapping(convertedMapping.getOrigin(), convertedEid, + new MappingData(convertedMapping.getMappingRecord())); } else { LOG.trace("Received write data"); - mappingChange = MappingChange.Created; + LOG.trace("Key: {}", change.getRootPath().path()); + LOG.trace("Value: {}", mapping); + mapSystem.addMapping(convertedMapping.getOrigin(), convertedEid, + new MappingData(convertedMapping.getMappingRecord())); } - LOG.trace("Key: {}", change.getRootPath().getRootIdentifier()); - LOG.trace("Value: {}", mapping); - - final Mapping convertedMapping = convertToBinaryIfNecessary(mapping); - - mapSystem.addMapping(convertedMapping.getOrigin(), convertedMapping.getMappingRecord().getEid(), - convertedMapping.getMappingRecord(), false); - - try { - // The notifications are used for sending SMR. - notificationPublishService.putNotification(MSNotificationInputUtil.toMappingChanged( - convertedMapping, mappingChange)); - } catch (InterruptedException e) { - LOG.warn("Notification publication interrupted!"); - } - } else { - LOG.warn("Ignoring unhandled modification type {}", mod.getModificationType()); + LOG.warn("Ignoring unhandled modification type {}", mod.modificationType()); } } } @@ -144,8 +129,8 @@ public class MappingDataListener extends AbstractDataListener { convertedLocators = convertToBinaryIfNecessary(originalLocators); } - if (LispAddressUtil.addressNeedsConversionToBinary(originalRecord.getEid().getAddress()) || - (originalLocators != null && convertedLocators != null)) { + if (LispAddressUtil.addressNeedsConversionToBinary(originalRecord.getEid().getAddress()) + || originalLocators != null && convertedLocators != null) { MappingRecordBuilder mrb = new MappingRecordBuilder(originalRecord); mrb.setEid(LispAddressUtil.convertToBinary(originalRecord.getEid())); if (convertedLocators != null) { @@ -156,18 +141,21 @@ public class MappingDataListener extends AbstractDataListener { return mapping; } - private static List convertToBinaryIfNecessary(List locators) { + private static List convertToBinaryIfNecessary(List originalLocators) { List convertedLocators = null; - for (LocatorRecord record : locators) { + for (LocatorRecord record : originalLocators) { if (LispAddressUtil.addressNeedsConversionToBinary(record.getRloc().getAddress())) { LocatorRecordBuilder lrb = new LocatorRecordBuilder(record); lrb.setRloc(LispAddressUtil.convertToBinary(record.getRloc())); if (convertedLocators == null) { - convertedLocators = new ArrayList(); + convertedLocators = new ArrayList<>(); } convertedLocators.add(lrb.build()); } } - return convertedLocators; + if (convertedLocators != null) { + return convertedLocators; + } + return originalLocators; } }