From e1484a39515716738354a2bcf7a091460f02c050 Mon Sep 17 00:00:00 2001 From: Lorand Jakab Date: Tue, 17 Jan 2017 23:12:14 +0200 Subject: [PATCH] Fix removal of expired mappings when merge on Change-Id: Ie1f1752471f72400788d28e81fd7f41ede6273f7 Signed-off-by: Lorand Jakab --- .../implementation/MappingSystem.java | 23 +++++++++++++------ .../implementation/util/DSBEInputUtil.java | 5 ++++ 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/MappingSystem.java b/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/MappingSystem.java index 08f924be7..933474daf 100644 --- a/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/MappingSystem.java +++ b/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/MappingSystem.java @@ -197,15 +197,24 @@ public class MappingSystem implements IMappingSystem { } } - private void mergeMappings(Eid key) { + private MappingData mergeMappings(Eid key) { List expiredMappings = new ArrayList<>(); Set sourceRlocs = new HashSet<>(); MappingData mergedMappingData = MappingMergeUtil.mergeXtrIdMappings(smc.getAllXtrIdMappings(key), expiredMappings, sourceRlocs); smc.removeXtrIdMappings(key, expiredMappings); + for (XtrId xtrId : expiredMappings) { + dsbe.removeXtrIdMapping(DSBEInputUtil.toXtrIdMapping(xtrId)); + } if (mergedMappingData != null) { smc.addMapping(key, mergedMappingData, sourceRlocs); + dsbe.addMapping(DSBEInputUtil.toMapping(MappingOrigin.Southbound, key, + mergedMappingData.getRecord().getSiteId(), mergedMappingData)); + } else { + smc.removeMapping(key); + dsbe.removeMapping(DSBEInputUtil.toMapping(MappingOrigin.Southbound, key)); } + return mergedMappingData; } @Override @@ -282,8 +291,7 @@ public class MappingSystem implements IMappingSystem { private MappingData getSbMappingWithExpiration(Eid src, Eid dst, XtrId xtrId) { MappingData mappingData = (MappingData) smc.getMapping(dst, xtrId); if (mappingData != null && MappingMergeUtil.mappingIsExpired(mappingData)) { - removeExpiredMapping(dst, xtrId, mappingData); - return null; + return removeExpiredMapping(dst, xtrId, mappingData); } else { return mappingData; } @@ -293,7 +301,10 @@ public class MappingSystem implements IMappingSystem { * This private method either removes the main mapping ONLY, or the xTR-ID mapping ONLY, based on xtrId being * null or non-null. Caller functions should take care of removing both when necessary. */ - private void removeExpiredMapping(Eid key, XtrId xtrId, MappingData mappingData) { + private MappingData removeExpiredMapping(Eid key, XtrId xtrId, MappingData mappingData) { + if (mappingMerge && mappingData.isMergeEnabled()) { + return mergeMappings(key); + } if (xtrId == null) { smc.removeMapping(key); dsbe.removeMapping(DSBEInputUtil.toMapping(MappingOrigin.Southbound, mappingData.getRecord().getEid(), @@ -301,10 +312,8 @@ public class MappingSystem implements IMappingSystem { } else { smc.removeMapping(key, xtrId); dsbe.removeXtrIdMapping(DSBEInputUtil.toXtrIdMapping(mappingData)); - if (mappingMerge && mappingData.isMergeEnabled()) { - mergeMappings(key); - } } + return null; } @Override diff --git a/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/util/DSBEInputUtil.java b/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/util/DSBEInputUtil.java index 2bd350211..fc1e93129 100644 --- a/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/util/DSBEInputUtil.java +++ b/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/util/DSBEInputUtil.java @@ -13,6 +13,7 @@ import java.util.List; import org.opendaylight.lispflowmapping.lisp.type.MappingData; import org.opendaylight.lispflowmapping.lisp.util.LispAddressStringifier; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.SiteId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.XtrId; 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.mapping.authkey.container.MappingAuthkey; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.container.MappingRecord; @@ -59,6 +60,10 @@ public final class DSBEInputUtil { new XtrIdUri(LispAddressStringifier.getURIString(record.getXtrId()))).setMappingRecord(record).build(); } + public static XtrIdMapping toXtrIdMapping(XtrId xtrId) { + return new XtrIdMappingBuilder().setXtrIdUri(new XtrIdUri(LispAddressStringifier.getURIString(xtrId))).build(); + } + public static AuthenticationKey toAuthenticationKey(Eid key, MappingAuthkey authKey) { AuthenticationKeyBuilder akb = new AuthenticationKeyBuilder(); akb.setEidUri(new EidUri(LispAddressStringifier.getURIString(key))); -- 2.36.6