Fix VpnSubnetRouteHandler handling of getSubnetToDpn()
[netvirt.git] / vpnmanager / impl / src / main / java / org / opendaylight / netvirt / vpnmanager / VpnSubnetRouteHandler.java
index 883b9d3f0871b89482be2211904f51f5895ae9de..e0e6952442b262d35515154fa42e69cb0a4e74f3 100644 (file)
@@ -18,6 +18,7 @@ import java.util.Map;
 import java.util.Objects;
 import javax.inject.Inject;
 import javax.inject.Singleton;
+import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
@@ -482,9 +483,7 @@ public class VpnSubnetRouteHandler {
             }
             SubnetOpDataEntry subnetOpDataEntry = optionalSubs.get();
             SubnetOpDataEntryBuilder subOpBuilder = new SubnetOpDataEntryBuilder(subnetOpDataEntry);
-            List<SubnetToDpn> subDpnList = subOpBuilder.getSubnetToDpn();
-            subDpnList.add(subDpn);
-            subOpBuilder.setSubnetToDpn(subDpnList);
+            subOpBuilder.setSubnetToDpn(concat(subnetOpDataEntry.getSubnetToDpn(), subDpn));
             if (subOpBuilder.getRouteAdvState() != TaskState.Advertised) {
                 if (subOpBuilder.getNhDpnId() == null) {
                     // No nexthop selected yet, elect one now
@@ -620,11 +619,7 @@ public class VpnSubnetRouteHandler {
                     subOpBuilder.getRouteAdvState(), subOpBuilder.getLastAdvState());
             boolean isExternalSubnetVpn = VpnUtil.isExternalSubnetVpn(subnetOpDataEntry.getVpnName(),
                     subnetId.getValue());
-            List<SubnetToDpn> subDpnList = new ArrayList<>();
-            subDpnList = subOpBuilder.getSubnetToDpn() != null ? new ArrayList<>(subOpBuilder.getSubnetToDpn())
-                    : subDpnList;
-            subDpnList.add(subDpn);
-            subOpBuilder.setSubnetToDpn(subDpnList);
+            subOpBuilder.setSubnetToDpn(concat(subnetOpDataEntry.getSubnetToDpn(), subDpn));
             if (subOpBuilder.getRouteAdvState() != TaskState.Advertised) {
                 if (subOpBuilder.getNhDpnId() == null) {
                     // No nexthop selected yet, elect one now
@@ -1054,9 +1049,18 @@ public class VpnSubnetRouteHandler {
         }
     }
 
-    private boolean isRouteAdvertised(SubnetOpDataEntryBuilder subOpBuilder) {
+    private static boolean isRouteAdvertised(SubnetOpDataEntryBuilder subOpBuilder) {
         return subOpBuilder.getRouteAdvState() == TaskState.Advertised
                 || subOpBuilder.getRouteAdvState() == TaskState.PendingAdvertise;
     }
+
+    private static @NonNull List<SubnetToDpn> concat(@Nullable List<SubnetToDpn> list, @NonNull SubnetToDpn entry) {
+        final List<SubnetToDpn> ret = new ArrayList<>();
+        if (list != null) {
+            ret.addAll(list);
+        }
+        ret.add(entry);
+        return ret;
+    }
 }