private MappingData getSbMappingWithExpiration(Eid src, Eid dst, XtrId xtrId) {
MappingData mappingData = (MappingData) smc.getMapping(dst, xtrId);
- if (mappingData != null && MappingMergeUtil.mappingIsExpired(mappingData)) {
- return handleSbExpiredMapping(dst, xtrId, mappingData);
- } else {
- return mappingData;
+ while (mappingData != null && MappingMergeUtil.mappingIsExpired(mappingData)) {
+ // If the mappingData is expired, handleSbExpiredMapping() will run merge for it if merge is enabled,
+ // otherwise it will remove the expired mapping, returning null.
+ MappingData mergedMappingData = handleSbExpiredMapping(dst, xtrId, mappingData);
+ if (mergedMappingData != null) {
+ return mergedMappingData;
+ }
+ // If the expired mapping was removed, we look up the original query again
+ mappingData = (MappingData) smc.getMapping(dst, xtrId);
}
+ return mappingData;
}
public MappingData handleSbExpiredMapping(Eid key, XtrId xtrId, MappingData mappingData) {
final MappingData mappingData = getDefaultMappingData();
mappingData.setTimestamp(EXPIRED_DATE);
Mockito.when(pmcMock.getMapping(EID_IPV4_SRC, EID_IPV4_DST)).thenReturn(null);
- Mockito.when(smcMock.getMapping(EID_IPV4_DST, (XtrId) null)).thenReturn(mappingData);
+ Mockito.when(smcMock.getMapping(EID_IPV4_DST, (XtrId) null)).thenReturn(mappingData, null);
final Mapping mapping = new MappingBuilder()
.setEidUri(new EidUri("ipv4:" + IPV4_DST))
sbMappingData.setTimestamp(EXPIRED_DATE);
Mockito.when(pmcMock.getMapping(EID_IPV4_SRC, EID_IPV4_DST)).thenReturn(nbMappingData);
- Mockito.when(smcMock.getMapping(EID_IPV4_DST, (XtrId) null)).thenReturn(sbMappingData);
+ Mockito.when(smcMock.getMapping(EID_IPV4_DST, (XtrId) null)).thenReturn(sbMappingData, null);
final Mapping mapping = new MappingBuilder()
.setEidUri(new EidUri("ipv4:" + IPV4_DST))