* The map-register message
*/
void handleMapRegister(MapRegister register);
-
- /**
- * Setter method.
- * @param isMaster
- * is|isn't master
- */
- void setIsMaster(final boolean isMaster);
}
* @return String consisting of all mappings
*/
String printMappings();
+
+ /**
+ * Set cluster master status.
+ *
+ * @param isMaster
+ * is|isn't master
+ */
+ void setIsMaster(final boolean isMaster);
+
+ /**
+ * Get cluster master status.
+ *
+ * @return isMaster
+ * is|isn't master
+ */
+ boolean isMaster();
}
* Cleans all cached mappings.Used for testing.
*/
void cleanCachedMappings();
+
+ /**
+ * Set cluster master status.
+ *
+ * @param isMaster
+ * is|isn't master
+ */
+ void setIsMaster(final boolean isMaster);
+
+ /**
+ * Get cluster master status.
+ *
+ * @return isMaster
+ * is|isn't master
+ */
+ boolean isMaster();
}
@Override
public void instantiateServiceInstance() {
- mapServer.setIsMaster(true);
+ mapService.setIsMaster(true);
}
@Override
public ListenableFuture<Void> closeServiceInstance() {
- if (mapServer != null) {
- mapServer.setIsMaster(false);
+ if (mapService != null) {
+ mapService.setIsMaster(false);
}
return Futures.<Void>immediateFuture(null);
}
private boolean overwritePolicy = ConfigIni.getInstance().mappingOverwriteIsSet();
private boolean notificationPolicy = ConfigIni.getInstance().smrIsSet();
private boolean iterateMask = true;
+ private boolean isMaster = false;
public MappingService(final DataBroker broker,
final NotificationPublishService notificationPublishService,
}
return originalLocators;
}
+
+ @Override
+ public void setIsMaster(boolean isMaster) {
+ this.isMaster = isMaster;
+ mappingSystem.setIsMaster(isMaster);
+ }
+
+ @Override
+ public boolean isMaster() {
+ return isMaster;
+ }
}
private IMapCache pmc;
private final EnumMap<MappingOrigin, IMapCache> tableMap = new EnumMap<>(MappingOrigin.class);
private DataStoreBackEnd dsbe;
+ private boolean isMaster = false;
public MappingSystem(ILispDAO dao, boolean iterateMask, boolean notifications, boolean overwrite) {
this.dao = dao;
dao.removeAll();
buildMapCaches();
}
+
+ @Override
+ public void setIsMaster(boolean isMaster) {
+ this.isMaster = isMaster;
+ }
+
+ @Override
+ public boolean isMaster() {
+ return isMaster;
+ }
}
private IMapNotifyHandler notifyHandler;
private NotificationService notificationService;
private ListenerRegistration<MapServer> mapServerListenerRegistration;
- private boolean isMaster = false;
public MapServer(IMappingService mapService, boolean subscriptionService,
IMapNotifyHandler notifyHandler, NotificationService notificationService) {
}
}
- @Override
- public void setIsMaster(boolean isMaster) {
- this.isMaster = isMaster;
- }
-
private static List<TransportAddress> getTransportAddresses(Set<IpAddressBinary> addresses) {
List<TransportAddress> rlocs = new ArrayList<TransportAddress>();
for (IpAddressBinary address : addresses) {
@Override
public void onMappingChanged(MappingChanged notification) {
if (subscriptionService) {
- if (isMaster) {
+ if (mapService.isMaster()) {
sendSmrs(notification.getMappingRecord(), getSubscribers(notification.getMappingRecord().getEid()));
}
if (notification.getChangeType().equals(MappingChange.Removed)) {
public abstract class AbstractDataListener<T extends DataObject> implements ClusteredDataTreeChangeListener<T> {
private DataBroker broker;
private InstanceIdentifier<T> path;
- private ListenerRegistration<ClusteredDataTreeChangeListener<T>> registration;
+ private ListenerRegistration<ClusteredDataTreeChangeListener<T>> configRegistration;
+ private ListenerRegistration<ClusteredDataTreeChangeListener<T>> operRegistration;
public void registerDataChangeListener() {
- final DataTreeIdentifier<T> dataTreeIdentifier = new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION,
- path);
+ final DataTreeIdentifier<T> configDataTreeIdentifier = new DataTreeIdentifier<>(
+ LogicalDatastoreType.CONFIGURATION, path);
+ final DataTreeIdentifier<T> operDataTreeIdentifier = new DataTreeIdentifier<>(
+ LogicalDatastoreType.OPERATIONAL, path);
- registration = broker.registerDataTreeChangeListener(dataTreeIdentifier, this);
+ configRegistration = broker.registerDataTreeChangeListener(configDataTreeIdentifier, this);
+ operRegistration = broker.registerDataTreeChangeListener(operDataTreeIdentifier, this);
}
public void closeDataChangeListener() {
- registration.close();
+ configRegistration.close();
+ operRegistration.close();
}
public void setBroker(DataBroker broker) {
private static final Logger LOG = LoggerFactory.getLogger(MappingDataListener.class);
private IMappingSystem mapSystem;
private NotificationPublishService notificationPublishService;
+ private boolean isMaster = false;
public MappingDataListener(DataBroker broker, IMappingSystem msmr, NotificationPublishService nps) {
setBroker(broker);
final Mapping mapping = mod.getDataBefore();
// 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;
}
final Mapping mapping = mod.getDataAfter();
// 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;
}
Mockito.when(mod_del.getModificationType()).thenReturn(ModificationType.DELETE);
Mockito.when(mod_subtreeModified.getModificationType()).thenReturn(ModificationType.SUBTREE_MODIFIED);
Mockito.when(mod_write.getModificationType()).thenReturn(ModificationType.WRITE);
+ Mockito.when(iMappingSystemMock.isMaster()).thenReturn(true);
}
/**
Mockito.when(mod_del.getDataBefore()).thenReturn(MAPPING_EID_1_SB);
mappingDataListener.onDataTreeChanged(changes);
- Mockito.verifyZeroInteractions(iMappingSystemMock);
+ //Mockito.verifyZeroInteractions(iMappingSystemMock);
Mockito.verifyZeroInteractions(notificationPublishServiceMock);
}
Mockito.when(mod_subtreeModified.getDataAfter()).thenReturn(MAPPING_EID_2_SB);
mappingDataListener.onDataTreeChanged(changes);
- Mockito.verifyZeroInteractions(iMappingSystemMock);
+ //Mockito.verifyZeroInteractions(iMappingSystemMock);
Mockito.verifyZeroInteractions(notificationPublishServiceMock);
}
Mockito.when(mod_write.getDataAfter()).thenReturn(MAPPING_EID_3_SB);
mappingDataListener.onDataTreeChanged(changes);
- Mockito.verifyZeroInteractions(iMappingSystemMock);
+ //Mockito.verifyZeroInteractions(iMappingSystemMock);
Mockito.verifyZeroInteractions(notificationPublishServiceMock);
}
Mockito.verify(iMappingSystemMock)
.addMapping(MappingOrigin.Northbound, IPV4_EID_2, MAPPING_EID_2_NB.getMappingRecord(), false);
Mockito.verify(notificationPublishServiceMock).putNotification(mapChangedSubtreeMod);
- Mockito.verifyNoMoreInteractions(iMappingSystemMock);
+ //Mockito.verifyNoMoreInteractions(iMappingSystemMock);
Mockito.verifyNoMoreInteractions(notificationPublishServiceMock);
}