From 15055070109b84d31e4eb2630988a303e8c0f740 Mon Sep 17 00:00:00 2001 From: Lorand Jakab Date: Tue, 31 Jan 2017 18:33:03 +0200 Subject: [PATCH] Make part of the Subscribers object modeled This is a first step in solving bug 7272 and propagating subscriber data to slave nodes in a cluster. This patch makes the YANG additions, renames the SubscriberRLOC class to Subscriber, which makes more sense (originally the SubscriberRLOC object only held the RLOC, now it holds the source EID too), and uses the modeled SubscriberAddresses inside Subscriber to store the source RLOC and EID. Change-Id: I2e3ae71e7c9948d962921553b00cfecd76f445f1 Signed-off-by: Lorand Jakab --- .../MappingServiceIntegrationTest.java | 8 +-- .../{SubscriberRLOC.java => Subscriber.java} | 69 ++++++++----------- .../api/src/main/yang/odl-mappingservice.yang | 4 ++ .../implementation/lisp/MapResolver.java | 24 +++---- .../implementation/lisp/MapServer.java | 30 ++++---- .../util/MSNotificationInputUtil.java | 18 +++++ .../implementation/lisp/MapResolverTest.java | 32 ++++----- .../implementation/lisp/MapServerTest.java | 36 +++++----- .../src/main/yang/odl-lisp-proto.yang | 9 +++ 9 files changed, 125 insertions(+), 105 deletions(-) rename mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/interfaces/dao/{SubscriberRLOC.java => Subscriber.java} (65%) diff --git a/integrationtest/src/test/java/org/opendaylight/lispflowmapping/integrationtest/MappingServiceIntegrationTest.java b/integrationtest/src/test/java/org/opendaylight/lispflowmapping/integrationtest/MappingServiceIntegrationTest.java index 64bf42a9e..25036867f 100644 --- a/integrationtest/src/test/java/org/opendaylight/lispflowmapping/integrationtest/MappingServiceIntegrationTest.java +++ b/integrationtest/src/test/java/org/opendaylight/lispflowmapping/integrationtest/MappingServiceIntegrationTest.java @@ -57,7 +57,7 @@ import org.opendaylight.controller.mdsal.it.base.AbstractMdsalTestBase; import org.opendaylight.lispflowmapping.config.ConfigIni; import org.opendaylight.lispflowmapping.implementation.LispMappingService; import org.opendaylight.lispflowmapping.interfaces.dao.SubKeys; -import org.opendaylight.lispflowmapping.interfaces.dao.SubscriberRLOC; +import org.opendaylight.lispflowmapping.interfaces.dao.Subscriber; import org.opendaylight.lispflowmapping.interfaces.lisp.IFlowMapping; import org.opendaylight.lispflowmapping.interfaces.mappingservice.IMappingService; import org.opendaylight.lispflowmapping.lisp.serializer.MapNotifySerializer; @@ -445,7 +445,7 @@ public class MappingServiceIntegrationTest extends AbstractMdsalTestBase { /* add subscribers */ final String subscriberSrcRloc1 = "127.0.0.3"; final String subscriberSrcRloc2 = "127.0.0.4"; - final Set subscriberSet1 = Sets.newHashSet(newSubscriber(eid1, subscriberSrcRloc1), + final Set subscriberSet1 = Sets.newHashSet(newSubscriber(eid1, subscriberSrcRloc1), newSubscriber(eid1, subscriberSrcRloc2)); mapService.addData(MappingOrigin.Southbound, eid1, SubKeys.SUBSCRIBERS, subscriberSet1); @@ -532,13 +532,13 @@ public class MappingServiceIntegrationTest extends AbstractMdsalTestBase { return true; } - private static SubscriberRLOC newSubscriber(Eid srcEid, String srcRlocIp) { + private static Subscriber newSubscriber(Eid srcEid, String srcRlocIp) { final byte[] addressBinary = InetAddresses.forString(srcRlocIp).getAddress(); final int timeout = 5; final Rloc srcRloc = new RlocBuilder().setAddress(new Ipv4BinaryBuilder() .setIpv4Binary(new Ipv4AddressBinary(addressBinary)).build()).build(); - return new SubscriberRLOC(srcRloc, srcEid, timeout); + return new Subscriber(srcRloc, srcEid, timeout); } private void testMultipleMappings() throws UnknownHostException { diff --git a/mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/interfaces/dao/SubscriberRLOC.java b/mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/interfaces/dao/Subscriber.java similarity index 65% rename from mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/interfaces/dao/SubscriberRLOC.java rename to mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/interfaces/dao/Subscriber.java index 241bb6a1d..2e20813d9 100644 --- a/mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/interfaces/dao/SubscriberRLOC.java +++ b/mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/interfaces/dao/Subscriber.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. + * Copyright (c) 2014, 2017 Cisco Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, @@ -9,25 +9,24 @@ package org.opendaylight.lispflowmapping.interfaces.dao; import java.util.Date; import java.util.concurrent.TimeUnit; - 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.rloc.container.Rloc; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.subscriber.address.grouping.SubscriberAddress; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.subscriber.address.grouping.SubscriberAddressBuilder; /** * Request source RLOC in the mapping service with it's properties. */ -public class SubscriberRLOC { +public class Subscriber { + // 1 day is default Cisco IOS mapping TTL + public static final int DEFAULT_SUBSCRIBER_TIMEOUT = (int) TimeUnit.DAYS.toMinutes(1); + // Subscriber timeout should be slightly higher than the mapping TTL. Arbitrary value is set to 10 minutes + private static final int SUBSCRIBER_TIMEOUT_CONSTANT = 10; - private Rloc rloc; - private Eid eid; + private SubscriberAddress address; private Date lastRequestDate; private int subscriberTimeout = DEFAULT_SUBSCRIBER_TIMEOUT; - private static final int SUBSCRIBER_TIMEOUT_CONSTANT = 10; - - //1 day is default Cisco IOS mapping TTL - public static final int DEFAULT_SUBSCRIBER_TIMEOUT = (int) TimeUnit.DAYS.toMinutes(1); - /** * Constructor. * @@ -35,7 +34,7 @@ public class SubscriberRLOC { * @param srcEid A source EID. * @param subscriberTimeout Subscriber timeout in min(s). */ - public SubscriberRLOC(Rloc srcRloc, Eid srcEid, int subscriberTimeout) { + public Subscriber(Rloc srcRloc, Eid srcEid, int subscriberTimeout) { this(srcRloc, srcEid, subscriberTimeout, new Date(System.currentTimeMillis())); } @@ -47,29 +46,23 @@ public class SubscriberRLOC { * @param subscriberTimeout Subscriber timeout in min(s). * @param lastRequestDate Last request date for this subscriber. */ - public SubscriberRLOC(Rloc srcRloc, Eid srcEid, int subscriberTimeout, - Date lastRequestDate) { + public Subscriber(Rloc srcRloc, Eid srcEid, int subscriberTimeout, Date lastRequestDate) { super(); - this.rloc = srcRloc; - this.eid = srcEid; + this.address = new SubscriberAddressBuilder().setRloc(srcRloc).setEid(srcEid).build(); this.lastRequestDate = lastRequestDate; this.subscriberTimeout = subscriberTimeout; } - public Rloc getSrcRloc() { - return rloc; + public SubscriberAddress getSubscriberAddress() { + return address; } - public void setSrcRloc(Rloc srcRloc) { - this.rloc = srcRloc; + public Rloc getSrcRloc() { + return address.getRloc(); } public Eid getSrcEid() { - return eid; - } - - public void setSrcEid(Eid srcEid) { - this.eid = srcEid; + return address.getEid(); } public Date getLastRequestDate() { @@ -88,19 +81,21 @@ public class SubscriberRLOC { this.subscriberTimeout = subscriberTimeout; } - /** - * Set Subscriber Timeout from a record's ttl. - * - * @param recordTtl A mapping record's ttl in Minutes. If null, the value is - * set to default value of 1440 mins (1 days). - */ + // Only used in MapResolverTest public void setSubscriberTimeoutByRecordTtl(Integer recordTtl) { this.subscriberTimeout = recordTtlToSubscriberTime(recordTtl); } + /** + * Static method to calculate the subscriber timeout from a mapping record TTL. If a mapping record TTL is not + * provided, use the default 1 day TTL. The suscriber timeout is the TTL plus a constant value. + * + * @param recordTtl The time to live (TTL) value + * @return the subscriber timeout + */ public static int recordTtlToSubscriberTime(Integer recordTtl) { if (recordTtl != null) { - return ( recordTtl + SUBSCRIBER_TIMEOUT_CONSTANT ); + return (recordTtl + SUBSCRIBER_TIMEOUT_CONSTANT); } return DEFAULT_SUBSCRIBER_TIMEOUT; } @@ -112,11 +107,7 @@ public class SubscriberRLOC { @Override public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((rloc == null) ? 0 : rloc.hashCode()); - result = prime * result + ((eid == null) ? 0 : eid.hashCode()); - return result; + return address.hashCode(); } @Override @@ -130,8 +121,8 @@ public class SubscriberRLOC { if (getClass() != obj.getClass()) { return false; } - SubscriberRLOC other = (SubscriberRLOC) obj; - if (!rloc.equals(other.rloc)) { + Subscriber other = (Subscriber) obj; + if (!address.equals(other.address)) { return false; } return true; @@ -139,7 +130,7 @@ public class SubscriberRLOC { @Override public String toString() { - return "_rloc=" + rloc.toString() + ", _eid=" + eid.toString() + return "_rloc=" + address.getRloc().toString() + ", _eid=" + address.getEid().toString() + ", last request @ " + lastRequestDate.toString(); } } diff --git a/mappingservice/api/src/main/yang/odl-mappingservice.yang b/mappingservice/api/src/main/yang/odl-mappingservice.yang index 25c8b0d20..3c265eb18 100644 --- a/mappingservice/api/src/main/yang/odl-mappingservice.yang +++ b/mappingservice/api/src/main/yang/odl-mappingservice.yang @@ -294,5 +294,9 @@ module odl-mappingservice { type mapping-change; } uses lisp-proto:mapping-record-container; + list subscriber-item { + description "The list of subscribers to be notified of this change."; + uses lisp-proto:subscriber-address-grouping; + } } } diff --git a/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/lisp/MapResolver.java b/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/lisp/MapResolver.java index 8c5cda591..b8bfe9f80 100644 --- a/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/lisp/MapResolver.java +++ b/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/lisp/MapResolver.java @@ -15,7 +15,7 @@ import java.util.List; import java.util.Set; import org.apache.commons.lang3.exception.ExceptionUtils; import org.opendaylight.lispflowmapping.interfaces.dao.SubKeys; -import org.opendaylight.lispflowmapping.interfaces.dao.SubscriberRLOC; +import org.opendaylight.lispflowmapping.interfaces.dao.Subscriber; import org.opendaylight.lispflowmapping.interfaces.lisp.IMapRequestResultHandler; import org.opendaylight.lispflowmapping.interfaces.lisp.IMapResolverAsync; import org.opendaylight.lispflowmapping.interfaces.lisp.ISmrNotificationListener; @@ -205,8 +205,7 @@ public class MapResolver implements IMapResolverAsync { } private void updateSubscribers(Rloc itrRloc, Eid reqEid, Eid mapEid, Eid srcEid, Integer recordTtl) { - SubscriberRLOC subscriberRloc = new SubscriberRLOC(itrRloc, srcEid, - SubscriberRLOC.recordTtlToSubscriberTime(recordTtl)); + Subscriber subscriber = new Subscriber(itrRloc, srcEid, Subscriber.recordTtlToSubscriberTime(recordTtl)); Eid subscribedEid = mapEid; // If the eid in the matched mapping is SourceDest and the requested eid IS NOT then we subscribe itrRloc only @@ -217,18 +216,17 @@ public class MapResolver implements IMapResolverAsync { subscribedEid = SourceDestKeyHelper.getDstBinary(mapEid); } - Set subscribers = getSubscribers(subscribedEid); + Set subscribers = getSubscribers(subscribedEid); if (subscribers == null) { subscribers = Sets.newConcurrentHashSet(); - } else if (subscribers.contains(subscriberRloc)) { - // If there is an entry already for this subscriberRloc, remove it, so that it gets the new - // timestamp - subscribers.remove(subscriberRloc); + } else if (subscribers.contains(subscriber)) { + // If there is an entry already for this subscriber, remove it, so that it gets the new timestamp + subscribers.remove(subscriber); } if (LOG.isTraceEnabled()) { - LOG.trace("Adding new subscriber: " + LispAddressStringifier.getString(subscriberRloc.getSrcRloc())); + LOG.trace("Adding new subscriber: " + LispAddressStringifier.getString(subscriber.getSrcRloc())); } - subscribers.add(subscriberRloc); + subscribers.add(subscriber); addSubscribers(subscribedEid, subscribers); } @@ -351,11 +349,11 @@ public class MapResolver implements IMapResolverAsync { } @SuppressWarnings("unchecked") - private Set getSubscribers(Eid address) { - return (Set) mapService.getData(MappingOrigin.Southbound, address, SubKeys.SUBSCRIBERS); + private Set getSubscribers(Eid address) { + return (Set) mapService.getData(MappingOrigin.Southbound, address, SubKeys.SUBSCRIBERS); } - private void addSubscribers(Eid address, Set subscribers) { + private void addSubscribers(Eid address, Set subscribers) { mapService.addData(MappingOrigin.Southbound, address, SubKeys.SUBSCRIBERS, subscribers); } diff --git a/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/lisp/MapServer.java b/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/lisp/MapServer.java index 5d2244907..36d823bc2 100644 --- a/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/lisp/MapServer.java +++ b/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/lisp/MapServer.java @@ -32,7 +32,7 @@ import org.apache.commons.lang3.BooleanUtils; import org.opendaylight.controller.md.sal.binding.api.NotificationService; import org.opendaylight.lispflowmapping.config.ConfigIni; import org.opendaylight.lispflowmapping.interfaces.dao.SubKeys; -import org.opendaylight.lispflowmapping.interfaces.dao.SubscriberRLOC; +import org.opendaylight.lispflowmapping.interfaces.dao.Subscriber; import org.opendaylight.lispflowmapping.interfaces.lisp.IMapNotifyHandler; import org.opendaylight.lispflowmapping.interfaces.lisp.IMapServerAsync; import org.opendaylight.lispflowmapping.interfaces.lisp.ISmrNotificationListener; @@ -103,7 +103,7 @@ public class MapServer implements IMapServerAsync, OdlMappingserviceListener, IS public void handleMapRegister(MapRegister mapRegister) { boolean mappingUpdated = false; boolean merge = ConfigIni.getInstance().mappingMergeIsSet() && mapRegister.isMergeEnabled(); - Set subscribers = null; + Set subscribers = null; MappingRecord oldMapping; if (merge) { @@ -240,18 +240,18 @@ public class MapServer implements IMapServerAsync, OdlMappingserviceListener, IS return false; } - private void sendSmrs(Eid eid, Set subscribers) { + private void sendSmrs(Eid eid, Set subscribers) { handleSmr(eid, subscribers); // For SrcDst LCAF also send SMRs to Dst prefix if (eid.getAddress() instanceof SourceDestKey) { Eid dstAddr = SourceDestKeyHelper.getDstBinary(eid); - Set dstSubs = getSubscribers(dstAddr); + Set dstSubs = getSubscribers(dstAddr); handleSmr(dstAddr, dstSubs); } } - private void handleSmr(Eid eid, Set subscribers) { + private void handleSmr(Eid eid, Set subscribers) { if (subscribers == null) { return; } @@ -263,17 +263,17 @@ public class MapServer implements IMapServerAsync, OdlMappingserviceListener, IS } @SuppressWarnings("unchecked") - private Set getSubscribers(Eid address) { - return (Set) mapService.getData(MappingOrigin.Southbound, address, SubKeys.SUBSCRIBERS); + private Set getSubscribers(Eid address) { + return (Set) mapService.getData(MappingOrigin.Southbound, address, SubKeys.SUBSCRIBERS); } - private Set addParentSubscribers(Eid eid, Set subscribers) { + private Set addParentSubscribers(Eid eid, Set subscribers) { Eid parentPrefix = mapService.getParentPrefix(eid); if (parentPrefix == null) { return subscribers; } - Set parentSubscribers = getSubscribers(parentPrefix); + Set parentSubscribers = getSubscribers(parentPrefix); if (parentSubscribers != null) { if (subscribers != null) { subscribers.addAll(parentSubscribers); @@ -288,7 +288,7 @@ public class MapServer implements IMapServerAsync, OdlMappingserviceListener, IS mapService.removeData(MappingOrigin.Southbound, address, SubKeys.SUBSCRIBERS); } - private void addSubscribers(Eid address, Set subscribers) { + private void addSubscribers(Eid address, Set subscribers) { mapService.addData(MappingOrigin.Southbound, address, SubKeys.SUBSCRIBERS, subscribers); } @@ -335,11 +335,11 @@ public class MapServer implements IMapServerAsync, OdlMappingserviceListener, IS private final ScheduledExecutorService executor = Executors.newScheduledThreadPool(cpuCores * 2, threadFactory); private final Map>> subscriberFutureMap = Maps.newConcurrentMap(); - void scheduleSmrs(MapRequestBuilder mrb, Iterator subscribers) { - // Using Iterator ensures that we don't get a ConcurrentModificationException when removing a SubscriberRLOC + void scheduleSmrs(MapRequestBuilder mrb, Iterator subscribers) { + // Using Iterator ensures that we don't get a ConcurrentModificationException when removing a Subscriber // from a Set. while (subscribers.hasNext()) { - SubscriberRLOC subscriber = subscribers.next(); + Subscriber subscriber = subscribers.next(); if (subscriber.timedOut()) { LOG.trace("Lazy removing expired subscriber entry " + subscriber.toString()); subscribers.remove(); @@ -381,10 +381,10 @@ public class MapServer implements IMapServerAsync, OdlMappingserviceListener, IS private final class CancellableRunnable implements Runnable { private MapRequestBuilder mrb; - private SubscriberRLOC subscriber; + private Subscriber subscriber; private int executionCount = 1; - CancellableRunnable(MapRequestBuilder mrb, SubscriberRLOC subscriber) { + CancellableRunnable(MapRequestBuilder mrb, Subscriber subscriber) { this.mrb = mrb; this.subscriber = subscriber; } diff --git a/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/util/MSNotificationInputUtil.java b/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/util/MSNotificationInputUtil.java index c68b855c6..3c455839d 100644 --- a/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/util/MSNotificationInputUtil.java +++ b/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/util/MSNotificationInputUtil.java @@ -8,10 +8,17 @@ package org.opendaylight.lispflowmapping.implementation.util; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import org.opendaylight.lispflowmapping.interfaces.dao.Subscriber; +import org.opendaylight.lispflowmapping.lisp.type.MappingData; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.MappingChange; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.MappingChanged; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.MappingChangedBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.db.instance.Mapping; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.mapping.changed.SubscriberItem; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.mapping.changed.SubscriberItemBuilder; /** * Utility class to convert a mapping change into a notification. @@ -28,4 +35,15 @@ public final class MSNotificationInputUtil { return new MappingChangedBuilder().setMappingRecord(input.getMappingRecord()) .setChangeType(change).build(); } + + public static MappingChanged toMappingChanged(MappingData mapping, Set subscribers, + MappingChange change) { + List subscriberList = new ArrayList(); + for (Subscriber subscriber : subscribers) { + subscriberList.add(new SubscriberItemBuilder().setSubscriberAddress( + subscriber.getSubscriberAddress()).build()); + } + return new MappingChangedBuilder().setMappingRecord(mapping.getRecord()).setSubscriberItem(subscriberList) + .setChangeType(change).build(); + } } diff --git a/mappingservice/implementation/src/test/java/org/opendaylight/lispflowmapping/implementation/lisp/MapResolverTest.java b/mappingservice/implementation/src/test/java/org/opendaylight/lispflowmapping/implementation/lisp/MapResolverTest.java index 92f68f127..b0e82c7fe 100644 --- a/mappingservice/implementation/src/test/java/org/opendaylight/lispflowmapping/implementation/lisp/MapResolverTest.java +++ b/mappingservice/implementation/src/test/java/org/opendaylight/lispflowmapping/implementation/lisp/MapResolverTest.java @@ -21,7 +21,7 @@ import org.opendaylight.lispflowmapping.config.ConfigIni; import org.opendaylight.lispflowmapping.implementation.LispMappingService; import org.opendaylight.lispflowmapping.implementation.MappingService; import org.opendaylight.lispflowmapping.interfaces.dao.SubKeys; -import org.opendaylight.lispflowmapping.interfaces.dao.SubscriberRLOC; +import org.opendaylight.lispflowmapping.interfaces.dao.Subscriber; import org.opendaylight.lispflowmapping.lisp.type.MappingData; import org.opendaylight.lispflowmapping.lisp.util.LispAddressUtil; import org.opendaylight.lispflowmapping.lisp.util.SourceDestKeyHelper; @@ -67,7 +67,7 @@ public class MapResolverTest { private static MapResolver mapResolver; private static MappingService mapServiceMock; - private static Set subscriberSetMock; + private static Set subscriberSetMock; private static LispMappingService lispMappingServiceMock; private static final String ITR_RLOC_KEY_STRING = "itr_rloc_key"; @@ -107,8 +107,8 @@ public class MapResolverTest { private static final Rloc RLOC_1 = LispAddressUtil.asIpv4Rloc(IPV4_RLOC_STRING_1); private static MapRequestBuilder mapRequestBuilder = getDefaultMapRequestBuilder(); - private static final SubscriberRLOC SUBSCRIBER_RLOC_1 = new SubscriberRLOC(RLOC_1, - LispAddressUtil.asIpv4Eid(IPV4_SOURCE), SubscriberRLOC.DEFAULT_SUBSCRIBER_TIMEOUT); + private static final Subscriber SUBSCRIBER_RLOC_1 = new Subscriber(RLOC_1, + LispAddressUtil.asIpv4Eid(IPV4_SOURCE), Subscriber.DEFAULT_SUBSCRIBER_TIMEOUT); @Before @SuppressWarnings("unchecked") @@ -186,7 +186,7 @@ public class MapResolverTest { .thenReturn(mappingData); Mockito.when(mapServiceMock.getData(MappingOrigin.Southbound, IPV4_PREFIX_EID_1, SubKeys.SUBSCRIBERS)) .thenReturn(subscriberSetMock); - Mockito.when(subscriberSetMock.contains(Mockito.any(SubscriberRLOC.class))).thenReturn(false); + Mockito.when(subscriberSetMock.contains(Mockito.any(Subscriber.class))).thenReturn(false); // result final MapReplyBuilder mapReplyBuilder = getDefaultMapReplyBuilder(); @@ -195,7 +195,7 @@ public class MapResolverTest { mapResolver.handleMapRequest(mapRequestBuilder.build()); Mockito.verify(lispMappingServiceMock).handleMapReply(mapReplyBuilder.build()); - Mockito.verify(subscriberSetMock, Mockito.never()).remove(Mockito.any(SubscriberRLOC.class)); + Mockito.verify(subscriberSetMock, Mockito.never()).remove(Mockito.any(Subscriber.class)); } /** @@ -213,7 +213,7 @@ public class MapResolverTest { .thenReturn(mappingData); Mockito.when(mapServiceMock.getData(MappingOrigin.Southbound, IPV4_PREFIX_EID_1, SubKeys.SUBSCRIBERS)) .thenReturn(subscriberSetMock); - Mockito.when(subscriberSetMock.contains(Mockito.any(SubscriberRLOC.class))).thenReturn(false); + Mockito.when(subscriberSetMock.contains(Mockito.any(Subscriber.class))).thenReturn(false); // ---------------------- // with sourceRloc = null @@ -221,7 +221,7 @@ public class MapResolverTest { newItrRloc(MacAfi.class, null), newItrRloc(Ipv4BinaryAfi.class, IPV4_ADDRESS)); - ArgumentCaptor captor = ArgumentCaptor.forClass(SubscriberRLOC.class); + ArgumentCaptor captor = ArgumentCaptor.forClass(Subscriber.class); mapResolver.handleMapRequest(mapRequestBuilder.setSourceRloc(null).setItrRloc(itrRlocList).build()); Mockito.verify(subscriberSetMock).add(captor.capture()); // Since mapRequest's sourceRloc is null, first ItrRloc from the itrRlocList must be used. @@ -237,7 +237,7 @@ public class MapResolverTest { .setSourceRloc(IPV4_ADDRESS_BINARY_1) .setItrRloc(itrRlocList).build(); - captor = ArgumentCaptor.forClass(SubscriberRLOC.class); + captor = ArgumentCaptor.forClass(Subscriber.class); mapResolver.handleMapRequest(mapRequest); Mockito.verify(subscriberSetMock, Mockito.times(2)).add(captor.capture()); assertEquals(IPV4_ADDRESS, captor.getValue().getSrcRloc().getAddress()); @@ -253,7 +253,7 @@ public class MapResolverTest { .setSourceRloc(IPV6_ADDRESS_BINARY) .setItrRloc(itrRlocList).build(); - captor = ArgumentCaptor.forClass(SubscriberRLOC.class); + captor = ArgumentCaptor.forClass(Subscriber.class); mapResolver.handleMapRequest(mapRequest); Mockito.verify(subscriberSetMock, Mockito.times(3)).add(captor.capture()); assertEquals(IPV6_ADDRESS, captor.getValue().getSrcRloc().getAddress()); @@ -269,7 +269,7 @@ public class MapResolverTest { .setSourceRloc(IPV4_ADDRESS_BINARY_2) .setItrRloc(itrRlocList).build(); - captor = ArgumentCaptor.forClass(SubscriberRLOC.class); + captor = ArgumentCaptor.forClass(Subscriber.class); mapResolver.handleMapRequest(mapRequest); Mockito.verify(subscriberSetMock, Mockito.times(4)).add(captor.capture()); assertEquals(IPV4_ADDRESS, captor.getValue().getSrcRloc().getAddress()); @@ -285,7 +285,7 @@ public class MapResolverTest { .setSourceRloc(IPV4_ADDRESS_BINARY_1) .setItrRloc(itrRlocList).build(); - captor = ArgumentCaptor.forClass(SubscriberRLOC.class); + captor = ArgumentCaptor.forClass(Subscriber.class); mapResolver.handleMapRequest(mapRequest); Mockito.verify(subscriberSetMock, Mockito.times(5)).add(captor.capture()); assertEquals(mac, captor.getValue().getSrcRloc().getAddress()); @@ -306,12 +306,12 @@ public class MapResolverTest { .thenReturn(mappingData); Mockito.when(mapServiceMock.getData(MappingOrigin.Southbound, IPV4_PREFIX_EID_1, SubKeys.SUBSCRIBERS)) .thenReturn(subscriberSetMock); - SubscriberRLOC subscriberRLOCMock = new SubscriberRLOC( + Subscriber subscriberMock = new Subscriber( mapRequestBuilder.getItrRloc().get(0).getRloc(), - mapRequestBuilder.getSourceEid().getEid(), SubscriberRLOC.DEFAULT_SUBSCRIBER_TIMEOUT); - subscriberRLOCMock.setSubscriberTimeoutByRecordTtl( + mapRequestBuilder.getSourceEid().getEid(), Subscriber.DEFAULT_SUBSCRIBER_TIMEOUT); + subscriberMock.setSubscriberTimeoutByRecordTtl( mappingRecordBuilder.getRecordTtl()); - Mockito.when(subscriberSetMock.contains(subscriberRLOCMock)) + Mockito.when(subscriberSetMock.contains(subscriberMock)) .thenReturn(true); // result diff --git a/mappingservice/implementation/src/test/java/org/opendaylight/lispflowmapping/implementation/lisp/MapServerTest.java b/mappingservice/implementation/src/test/java/org/opendaylight/lispflowmapping/implementation/lisp/MapServerTest.java index b144329d6..66a5342da 100644 --- a/mappingservice/implementation/src/test/java/org/opendaylight/lispflowmapping/implementation/lisp/MapServerTest.java +++ b/mappingservice/implementation/src/test/java/org/opendaylight/lispflowmapping/implementation/lisp/MapServerTest.java @@ -28,7 +28,7 @@ import org.mockito.runners.MockitoJUnitRunner; import org.opendaylight.controller.md.sal.binding.api.NotificationService; import org.opendaylight.lispflowmapping.config.ConfigIni; import org.opendaylight.lispflowmapping.interfaces.dao.SubKeys; -import org.opendaylight.lispflowmapping.interfaces.dao.SubscriberRLOC; +import org.opendaylight.lispflowmapping.interfaces.dao.Subscriber; import org.opendaylight.lispflowmapping.interfaces.lisp.IMapNotifyHandler; import org.opendaylight.lispflowmapping.interfaces.mappingservice.IMappingService; import org.opendaylight.lispflowmapping.lisp.type.LispMessage; @@ -67,9 +67,9 @@ public class MapServerTest { @Mock private static IMapNotifyHandler notifyHandler; @Mock private static NotificationService notificationService; - @Spy private static Set subscriberSetMock_1 = new HashSet<>(); - @Spy private static Set subscriberSetMock_2 = new HashSet<>(); - @Spy private static Set subscriberSetMock_3 = new HashSet<>(); + @Spy private static Set subscriberSetMock_1 = new HashSet<>(); + @Spy private static Set subscriberSetMock_2 = new HashSet<>(); + @Spy private static Set subscriberSetMock_3 = new HashSet<>(); private static MapServer mapServer; private static MapRegister mapRegister; private static MappingData mappingData; @@ -115,21 +115,21 @@ public class MapServerTest { private static final long TWO_DAYS = 86400000L * 2; - private static final SubscriberRLOC SUBSCRIBER_RLOC_1 = new SubscriberRLOC(RLOC_1, // timedOut() == true - IPV4_SOURCE_EID_1, SubscriberRLOC.DEFAULT_SUBSCRIBER_TIMEOUT, + private static final Subscriber SUBSCRIBER_RLOC_1 = new Subscriber(RLOC_1, // timedOut() == true + IPV4_SOURCE_EID_1, Subscriber.DEFAULT_SUBSCRIBER_TIMEOUT, new Date(System.currentTimeMillis() - TWO_DAYS)); - private static final SubscriberRLOC SUBSCRIBER_RLOC_2 = new SubscriberRLOC(RLOC_2, // timedOut() == false - IPV4_SOURCE_EID_2, SubscriberRLOC.DEFAULT_SUBSCRIBER_TIMEOUT); - private static final SubscriberRLOC SUBSCRIBER_RLOC_3 = new SubscriberRLOC(RLOC_3, // timedOut() == true - IPV4_SOURCE_EID_3, SubscriberRLOC.DEFAULT_SUBSCRIBER_TIMEOUT, + private static final Subscriber SUBSCRIBER_RLOC_2 = new Subscriber(RLOC_2, // timedOut() == false + IPV4_SOURCE_EID_2, Subscriber.DEFAULT_SUBSCRIBER_TIMEOUT); + private static final Subscriber SUBSCRIBER_RLOC_3 = new Subscriber(RLOC_3, // timedOut() == true + IPV4_SOURCE_EID_3, Subscriber.DEFAULT_SUBSCRIBER_TIMEOUT, new Date(System.currentTimeMillis() - TWO_DAYS)); - private static final SubscriberRLOC SUBSCRIBER_RLOC_4 = new SubscriberRLOC(RLOC_4, // timedOut() == false - IPV4_SOURCE_EID_4, SubscriberRLOC.DEFAULT_SUBSCRIBER_TIMEOUT); - private static final SubscriberRLOC SUBSCRIBER_RLOC_5 = new SubscriberRLOC(RLOC_5, // timedOut() == true - IPV4_SOURCE_EID_5, SubscriberRLOC.DEFAULT_SUBSCRIBER_TIMEOUT, + private static final Subscriber SUBSCRIBER_RLOC_4 = new Subscriber(RLOC_4, // timedOut() == false + IPV4_SOURCE_EID_4, Subscriber.DEFAULT_SUBSCRIBER_TIMEOUT); + private static final Subscriber SUBSCRIBER_RLOC_5 = new Subscriber(RLOC_5, // timedOut() == true + IPV4_SOURCE_EID_5, Subscriber.DEFAULT_SUBSCRIBER_TIMEOUT, new Date(System.currentTimeMillis() - TWO_DAYS)); - private static final SubscriberRLOC SUBSCRIBER_RLOC_6 = new SubscriberRLOC(RLOC_6, // timedOut() == false - IPV4_SOURCE_EID_6, SubscriberRLOC.DEFAULT_SUBSCRIBER_TIMEOUT); + private static final Subscriber SUBSCRIBER_RLOC_6 = new Subscriber(RLOC_6, // timedOut() == false + IPV4_SOURCE_EID_6, Subscriber.DEFAULT_SUBSCRIBER_TIMEOUT); private static final Eid SOURCE_DEST_KEY_EID = LispAddressUtil .asSrcDstEid(IPV4_STRING_1, IPV4_STRING_2, MASK, MASK, VNI); @@ -222,11 +222,11 @@ public class MapServerTest { final MappingRecordBuilder mappingRecordBuilder_2 = getDefaultMappingRecordBuilder(); final Eid maskedEid1 = LispAddressUtil.asIpv4Eid("1.2.0.0"); - final SubscriberRLOC subscriber1 = Mockito.mock(SubscriberRLOC.class); + final Subscriber subscriber1 = Mockito.mock(Subscriber.class); Mockito.when(subscriber1.timedOut()).thenReturn(true); Mockito.when(subscriber1.toString()).thenReturn("sub1"); - final Set set1 = Sets.newHashSet(subscriber1); + final Set set1 = Sets.newHashSet(subscriber1); Mockito.when(mapService.getAuthenticationKey(IPV4_PREFIX_EID_1)).thenReturn(MAPPING_AUTHKEY); Mockito.when(mapService.getData(MappingOrigin.Southbound, IPV4_PREFIX_EID_1, SubKeys.SRC_RLOCS)) diff --git a/mappingservice/lisp-proto/src/main/yang/odl-lisp-proto.yang b/mappingservice/lisp-proto/src/main/yang/odl-lisp-proto.yang index f796812d0..c14721a7a 100644 --- a/mappingservice/lisp-proto/src/main/yang/odl-lisp-proto.yang +++ b/mappingservice/lisp-proto/src/main/yang/odl-lisp-proto.yang @@ -390,6 +390,15 @@ module odl-lisp-proto { } } + grouping subscriber-address-grouping { + container subscriber-address { + description + "A network element which subscribed to notifications about mapping changes."; + uses rloc-container; + uses eid-container; + } + } + typedef message-type { type enumeration { enum reserved { -- 2.36.6