Bug 3951: Send SMRs to both SrcDst and Dst subscribers
[lispflowmapping.git] / mappingservice / implementation / src / main / java / org / opendaylight / lispflowmapping / implementation / lisp / AbstractLispComponent.java
index 4ec0dbae529e15a3ec6f3b293fc88606e6f2e2b0..ef4175d079db8a416dc86f6565b7c52f84fd4a35 100644 (file)
@@ -96,47 +96,20 @@ public abstract class AbstractLispComponent {
     }
 
     @SuppressWarnings("unchecked")
-    private HashSet<MappingServiceSubscriberRLOC> getSubscribers(LispAddressContainer prefix, int maskLength,
-            ILispDAO dao) {
-        Object subscribers;
-
-        IMappingServiceKey key = MappingServiceKeyUtil.generateMappingServiceKey(prefix, maskLength);
-        subscribers = dao.getSpecific(key, SUBSCRIBERS_SUBKEY);
-
-        if (subscribers != null && subscribers instanceof HashSet<?>) {
-            return (HashSet<MappingServiceSubscriberRLOC>) subscribers;
-        }
-        return null;
-    }
-
     protected HashSet<MappingServiceSubscriberRLOC> getSubscribers(LispAddressContainer prefix, int maskLength) {
-        // For SrcDst we merge the subscriber set from the parent DAO with the source specific DAO
+        Object subscribers;
         if (prefix.getAddress() instanceof LcafSourceDest) {
-            HashSet<MappingServiceSubscriberRLOC> resultSet = new HashSet<MappingServiceSubscriberRLOC>();
-            boolean haveResult = false;
-
-            LispAddressContainer srcAddr = LispAFIConvertor.toContainer(getSrcForLcafSrcDst(prefix));
-            short srcMask = getSrcMaskForLcafSrcDst(prefix);
+            IMappingServiceKey srcKey = MappingServiceKeyUtil.generateMappingServiceKey(getSrcForLcafSrcDst(prefix),
+                    getSrcMaskForLcafSrcDst(prefix));
             ILispDAO srcDstDao = getSrcDstInnerDao(prefix, maskLength);
-            HashSet<MappingServiceSubscriberRLOC> srcDstSubscribers = getSubscribers(srcAddr, srcMask, srcDstDao);
-            if (srcDstSubscribers != null) {
-                resultSet.addAll(srcDstSubscribers);
-                haveResult = true;
-            }
-
-            LispAddressContainer dstAddr = LispAFIConvertor.toContainer(getDstForLcafSrcDst(prefix));
-            short dstMask = getDstMaskForLcafSrcDst(prefix);
-            HashSet<MappingServiceSubscriberRLOC> subscribers = getSubscribers(dstAddr, dstMask, dao);
-            if (subscribers != null) {
-                resultSet.addAll(subscribers);
-                haveResult = true;
-            }
-
-            if (haveResult) {
-                return resultSet;
-            }
+            subscribers = srcDstDao.getSpecific(srcKey, SUBSCRIBERS_SUBKEY);
         } else {
-            return getSubscribers(prefix, maskLength, dao);
+            IMappingServiceKey key = MappingServiceKeyUtil.generateMappingServiceKey(prefix, maskLength);
+            subscribers = dao.getSpecific(key, SUBSCRIBERS_SUBKEY);
+        }
+
+        if (subscribers != null && subscribers instanceof HashSet<?>) {
+            return (HashSet<MappingServiceSubscriberRLOC>) subscribers;
         }
         return null;
     }