final SocketReader socketReader = SocketReader.startReadingInStandaloneThread(socket);
//TEST CASE 1
- multiSiteScenario.storeSouthboundMappings(SITE_A, SITE_B, SITE_C, SITE_D4, SITE_D5);
+ multiSiteScenario.storeSouthboundMappings(false, SITE_A, SITE_B, SITE_C, SITE_D4, SITE_D5);
multiSiteScenario.storeNorthMappingSrcDst(SITE_B, SITE_C);
multiSiteScenario.storeNorthMappingNegative(SITE_C, Action.Drop);
sleepForSeconds(2);
mapService.setMappingOverwrite(false);
//TEST CASE 1
- multiSiteScenario.storeSouthboundMappings(SITE_A_SB, SITE_B_SB, SITE_C_WP_100_1_SB, SITE_D_WP_100_1_SB,
+ multiSiteScenario.storeSouthboundMappings(true, SITE_A_SB, SITE_B_SB, SITE_C_WP_100_1_SB, SITE_D_WP_100_1_SB,
SITE_E_SB);
multiSiteScenario.storeNorthMappingIpPrefix(SITE_A_SB);
multiSiteScenario.storeNorthMappingIpPrefix(SITE_B_SB);
return mappingRecord;
}
- private void emitMapRegisterMessage(final Site dstSite) {
+ private void emitMapRegisterMessage(final Site dstSite, final boolean merge) {
final MapRegisterBuilder mapRegisterBuilder = new MapRegisterBuilder();
+ mapRegisterBuilder.setMergeEnabled(merge);
final MappingRecordItemBuilder mappingRecordItemBuilder = new MappingRecordItemBuilder();
mappingRecordItemBuilder.setMappingRecordItemId(MAP_RECORD_A);
mrbNegative.setEid(eidAsIpv4Prefix);
mrbNegative.setAction(action);
- mapService.addMapping(MappingOrigin.Northbound, eidAsIpv4Prefix, dstSite.getSiteId(), mrbNegative.build());
+ mapService.addMapping(MappingOrigin.Northbound, eidAsIpv4Prefix, dstSite.getSiteId(), mrbNegative.build(),
+ false);
}
void deleteNorthMappingNegative(final Site dstSite) {
void storeNorthMappingSrcDst(final Site srcSite, final Site ... dstSite) {
final MappingRecordBuilder mrb = prepareMappingRecord(EidType.EID_SRC_DST, srcSite,
dstSite);
- mapService.addMapping(MappingOrigin.Northbound, mrb.getEid(), dstSite[0].getSiteId(), mrb.build());
+ mapService.addMapping(MappingOrigin.Northbound, mrb.getEid(), dstSite[0].getSiteId(), mrb.build(), false);
}
void storeNorthMappingIpPrefix(final Site... dstSite) {
final MappingRecordBuilder mrb = prepareMappingRecord(EidType.EID_WITH_PREFIX, null, dstSite);
- mapService.addMapping(MappingOrigin.Northbound, mrb.getEid(), dstSite[0].getSiteId(), mrb.build());
+ mapService.addMapping(MappingOrigin.Northbound, mrb.getEid(), dstSite[0].getSiteId(), mrb.build(), false);
}
- private void storeDestinationSiteMappingViaSouthbound(final Site dstSite) {
- emitMapRegisterMessage(dstSite);
+ private void storeDestinationSiteMappingViaSouthbound(final Site dstSite, final boolean merge) {
+ emitMapRegisterMessage(dstSite, merge);
}
private MappingRecordBuilder prepareMappingRecordGeneral(final EidType eidType,
}
void deleteSouthboundMappings(final Site dstSite) {
- emitMapRegisterMessage(dstSite);
+ emitMapRegisterMessage(dstSite, false);
}
- void storeSouthboundMappings(final Site ... sites) {
+ void storeSouthboundMappings(final boolean merge, final Site ... sites) {
for (Site site : sites) {
- storeDestinationSiteMappingViaSouthbound(site);
+ storeDestinationSiteMappingViaSouthbound(site, merge);
}
}
* Value to be stored
* @param shouldOverwrite
* Select if mappings with the same key are overwritten
+ * @param merge
+ * Select if mappings with the same key are merged
*/
- void addMapping(Eid key, Object data, boolean shouldOverwrite);
+ void addMapping(Eid key, Object data, boolean shouldOverwrite, boolean merge);
/**
* Retrieves mapping for the provided srcKey and dstKey.
* Key of the mapping
* @param data
* Value to be stored
+ * @param merge
+ * Select if mappings with the same key are merged
*/
- void addMapping(MappingOrigin origin, Eid key, Object data);
+ void addMapping(MappingOrigin origin, Eid key, Object data, boolean merge);
/**
* Retrieves mapping for the provided src and dst key.
* Site that stores the mapping
* @param data
* Value to be stored
+ * @param merge
+ * Select if mappings with the same key are merged
*/
- void addMapping(MappingOrigin origin, Eid key, SiteId siteId, Object data);
+ void addMapping(MappingOrigin origin, Eid key, SiteId siteId, Object data, boolean merge);
/**
* Retrieves mapping with given origin for the provided key. The lookup policy for the key is defined in the Mapping
}
@Override
- public void addMapping(MappingOrigin origin, Eid key, SiteId siteId, Object data) {
+ public void addMapping(MappingOrigin origin, Eid key, SiteId siteId, Object data, boolean merge) {
// SB registrations are first written to the MappingSystem and only afterwards are persisted to the datastore
if (origin.equals(MappingOrigin.Southbound)) {
// Store data first in MapCache and only afterwards persist to datastore. This should be used only for SB
// registrations
- mappingSystem.addMapping(origin, key, data);
+ mappingSystem.addMapping(origin, key, data, merge);
dsbe.addMapping(DSBEInputUtil.toMapping(origin, key, siteId, (MappingRecord) data));
if (((MappingRecord) data).getXtrId() != null) {
dsbe.addXtrIdMapping(DSBEInputUtil.toXtrIdMapping((MappingRecord) data));
tableMap.put(MappingOrigin.Southbound, smc);
}
- public void addMapping(MappingOrigin origin, Eid key, Object value) {
- tableMap.get(origin).addMapping(key, value, origin == MappingOrigin.Southbound ? overwrite : true);
+ public void addMapping(MappingOrigin origin, Eid key, Object value, boolean merge) {
+ tableMap.get(origin).addMapping(key, value, origin == MappingOrigin.Southbound ? overwrite : true, merge);
}
public void updateMappingRegistration(MappingOrigin origin, Eid key) {
expiredMappings++;
continue;
}
- addMapping(mapping.getOrigin(), mapping.getMappingRecord().getEid(), mapping.getMappingRecord());
+ addMapping(mapping.getOrigin(), mapping.getMappingRecord().getEid(), mapping.getMappingRecord(), false);
}
LOG.info("{} mappings were expired and were not restored", expiredMappings);
public void handleMapRegister(MapRegister mapRegister) {
boolean authFailed = false;
boolean mappingUpdated = false;
+ boolean merge = ConfigIni.getInstance().mappingMergeIsSet() && mapRegister.isMergeEnabled();
MappingAuthkey authkey = null;
Set<SubscriberRLOC> subscribers = null;
MappingRecord oldMapping;
}
oldMapping = (MappingRecord) mapService.getMapping(MappingOrigin.Southbound, mapping.getEid());
- mapService.addMapping(MappingOrigin.Southbound, mapping.getEid(), getSiteId(mapRegister), mapping);
+ mapService.addMapping(MappingOrigin.Southbound, mapping.getEid(), getSiteId(mapRegister), mapping, merge);
if (subscriptionService) {
- MappingRecord newMapping = ConfigIni.getInstance().mappingMergeIsSet() ?
+ MappingRecord newMapping = merge ?
(MappingRecord) mapService.getMapping(MappingOrigin.Southbound, mapping.getEid()) : mapping;
if (mappingChanged(oldMapping, newMapping)) {
LOG.trace("MapRegister wants MapNotify");
MapNotifyBuilder builder = new MapNotifyBuilder();
List<TransportAddress> rlocs = null;
- if (ConfigIni.getInstance().mappingMergeIsSet()) {
+ if (merge) {
Set<IpAddress> notifyRlocs = new HashSet<IpAddress>();
List<MappingRecordItem> mergedMappings = new ArrayList<MappingRecordItem>();
for (MappingRecordItem record : mapRegister.getMappingRecordItem()) {
}
@Override
- public void addMapping(Eid eid, Object data, boolean shouldOverwrite) {
+ public void addMapping(Eid eid, Object data, boolean shouldOverwrite, boolean shouldMerge) {
Eid key = MaskUtil.normalize(eid);
dao.put(key, new MappingEntry<>(SubKeys.REGDATE, new Date(System.currentTimeMillis())));
dao.put(key, new MappingEntry<>(SubKeys.RECORD, data));
return table;
}
- public void addMapping(Eid key, Object value, boolean shouldOverwrite) {
+ public void addMapping(Eid key, Object value, boolean shouldOverwrite, boolean shouldMerge) {
Eid eid = MaskUtil.normalize(key);
ILispDAO table = getOrInstantiateVniTable(key);
import java.util.Map;
import java.util.Set;
-import org.opendaylight.lispflowmapping.implementation.config.ConfigIni;
import org.opendaylight.lispflowmapping.implementation.util.MappingMergeUtil;
import org.opendaylight.lispflowmapping.interfaces.dao.ILispDAO;
import org.opendaylight.lispflowmapping.interfaces.dao.IRowVisitor;
}
}
- public void addMapping(Eid key, Object value, boolean shouldOverwrite) {
+ public void addMapping(Eid key, Object value, boolean shouldOverwrite, boolean shouldMerge) {
if (value == null) {
LOG.warn("addMapping() called with null 'value', ignoring");
return;
}
MappingRecord record = (MappingRecord) value;
- if (record.getXtrId() == null && !shouldOverwrite && ConfigIni.getInstance().mappingMergeIsSet()) {
+ if (record.getXtrId() == null && !shouldOverwrite && shouldMerge) {
LOG.warn("addMapping() called will null xTR-ID in MappingRecord, while merge is set, ignoring");
return;
}
xtrIdDao.put(record.getXtrId(), new MappingEntry<>(SubKeys.RECORD, value));
}
- if (ConfigIni.getInstance().mappingMergeIsSet()) {
+ if (shouldMerge) {
List<XtrId> expiredMappings = new ArrayList<XtrId>();
Set<IpAddress> sourceRlocs = new HashSet<IpAddress>();
MappingRecord mergedEntry = MappingMergeUtil.mergeXtrIdMappings(getXtrIdMappingList(xtrIdDao),
LOG.trace("Value: {}", mapping);
mapSystem.addMapping(mapping.getOrigin(), mapping.getMappingRecord().getEid(),
- mapping.getMappingRecord());
+ mapping.getMappingRecord(), false);
try {
// The notifications are used for sending SMR.
mapServer.handleMapRegister(mapRegister);
Mockito.verify(mapService).addMapping(MappingOrigin.Southbound, IPV4_EID_1, mapRegister.getSiteId(),
- mapRegister.getMappingRecordItem().iterator().next().getMappingRecord());
+ mapRegister.getMappingRecordItem().iterator().next().getMappingRecord(), false);
Mockito.verify(mapService).addData(MappingOrigin.Southbound, IPV4_EID_1, SubKeys.SUBSCRIBERS,
subscriberSetMock_1);
Mockito.verify(notifyHandler).handleMapNotify(getDefaultMapNotifyBuilder(mapRegister).build(), null);
mapServer.handleMapRegister(mapRegister);
Mockito.verify(mapService).addMapping(MappingOrigin.Southbound, IPV4_EID_1, mapRegister.getSiteId(),
- mapRegister.getMappingRecordItem().iterator().next().getMappingRecord());
+ mapRegister.getMappingRecordItem().iterator().next().getMappingRecord(), true);
Mockito.verify(notifyHandler).handleMapNotify(mapNotifyBuilder.build(), null);
}
final MappingRecord data = getDefaultMappingRecordBuilder()
.setXtrId(XTR_ID).build();
- mappingService.addMapping(MappingOrigin.Southbound, IPV4_EID, SITE_ID, data);
+ mappingService.addMapping(MappingOrigin.Southbound, IPV4_EID, SITE_ID, data, false);
- Mockito.verify(mappingSystem).addMapping(MappingOrigin.Southbound, IPV4_EID, data);
+ Mockito.verify(mappingSystem).addMapping(MappingOrigin.Southbound, IPV4_EID, data, false);
Mockito.verify(dsbe).addMapping(DSBEInputUtil.toMapping(MappingOrigin.Southbound, IPV4_EID, SITE_ID, data));
Mockito.verify(dsbe).addXtrIdMapping(DSBEInputUtil.toXtrIdMapping(data));
}
final MappingRecord data = getDefaultMappingRecordBuilder()
.setXtrId(XTR_ID).build();
- mappingService.addMapping(origin, IPV4_EID, SITE_ID, data);
+ mappingService.addMapping(origin, IPV4_EID, SITE_ID, data, false);
Mockito.verify(dsbe).addMapping(DSBEInputUtil.toMapping(origin, IPV4_EID, SITE_ID, data));
Mockito.verifyZeroInteractions(mappingSystem);
Mockito.verifyNoMoreInteractions(dsbe);
*/
@Test
public void addMappingTest() {
- flatMapCache.addMapping(EID_TEST, DUMMY_OBJECT, false);
+ flatMapCache.addMapping(EID_TEST, DUMMY_OBJECT, true, false);
verify(daoMock, atMost(2)).put(NORMALIZED_EID, new MappingEntry<>(anyString(), any(Date.class)));
verify(daoMock).put(NORMALIZED_EID, new MappingEntry<>(SubKeys.RECORD, DUMMY_OBJECT));
}
when(daoMock.getSpecific(VNI, SubKeys.VNI)).thenReturn(tableDaoMock);
when(tableDaoMock.getSpecific(dstKey, SubKeys.LCAF_SRCDST)).thenReturn(srcDstDaoMock);
- multiTableMapCache.addMapping(EID_SOURCE_DEST_KEY_TYPE, DUMMY_OBJECT, true);
+ multiTableMapCache.addMapping(EID_SOURCE_DEST_KEY_TYPE, DUMMY_OBJECT, true, false);
verify(srcDstDaoMock, times(2)).put(srcKey, new MappingEntry<>(anyString(), any(Date.class)));
verify(srcDstDaoMock).put(srcKey, new MappingEntry<>(SubKeys.RECORD, DUMMY_OBJECT));
}
when(daoMock.getSpecific(VNI, SubKeys.VNI)).thenReturn(tableDaoMock);
- multiTableMapCache.addMapping(eid_ipv4Type, DUMMY_OBJECT, true);
+ multiTableMapCache.addMapping(eid_ipv4Type, DUMMY_OBJECT, true, false);
verify(tableDaoMock, times(2)).put(normalized_Eid, new MappingEntry<>(anyString(), any(Date.class)));
verify(tableDaoMock).put(normalized_Eid, new MappingEntry<>(SubKeys.RECORD, DUMMY_OBJECT));
}