Avoid exception on default scheduler handling 67/68267/4
authorJaime Caamaño Ruiz <[email protected]>
Tue, 13 Feb 2018 12:05:58 +0000 (13:05 +0100)
committerBrady Johnson <[email protected]>
Fri, 16 Feb 2018 16:01:24 +0000 (16:01 +0000)
Default scheduler selection is handled through an exception that is
printed out in the logs and looks rather ugly. Replaced by a proper
cleaner log message.

Change-Id: I1fd8e6ffe91eaa45ef21a15942c58d12983a5f9d
Signed-off-by: Jaime Caamaño Ruiz <[email protected]>
sfc-provider/src/main/java/org/opendaylight/sfc/provider/api/SfcProviderRenderedPathAPI.java
sfc-provider/src/main/java/org/opendaylight/sfc/provider/api/SfcProviderScheduleTypeAPI.java
sfc-provider/src/test/java/org/opendaylight/sfc/provider/api/SfcProviderScheduleTypeAPITest.java

index 154070970225dffea63760a79c9ced36ba186317..a6c43890dbdff3b13702a66e7ec07ca85eddaf47 100644 (file)
@@ -116,15 +116,11 @@ public final class SfcProviderRenderedPathAPI {
         return scheduler;
     }
 
-    @SuppressWarnings("checkstyle:IllegalCatch")
     private static SfcServiceFunctionSchedulerAPI getDefaultServiceFunctionScheduler() {
         Class<? extends ServiceFunctionSchedulerTypeIdentity> serviceFunctionSchedulerType;
-
-        try {
-            serviceFunctionSchedulerType = SfcProviderScheduleTypeAPI.readEnabledServiceFunctionScheduleTypeEntry()
-                    .getType();
-        } catch (RuntimeException e) {
-            LOG.debug("readEnabledServiceFunctionScheduleTypeEntry failed", e);
+        serviceFunctionSchedulerType = SfcProviderScheduleTypeAPI.readEnabledServiceFunctionScheduleTypeEntry();
+        if (serviceFunctionSchedulerType == null) {
+            LOG.debug("No enabled service function scheduler type found, default to random");
             serviceFunctionSchedulerType = Random.class;
         }
 
index 8cd542d7774aaa92359a4b91ea7df11587d66739..22ad49c274cd24dbb58f509f1019476593caea22 100755 (executable)
@@ -11,7 +11,8 @@ package org.opendaylight.sfc.provider.api;
 import static org.opendaylight.sfc.provider.SfcProviderDebug.printTraceStart;
 import static org.opendaylight.sfc.provider.SfcProviderDebug.printTraceStop;
 
-import java.util.List;
+import java.util.Collections;
+import java.util.Optional;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.yang.gen.v1.urn.intel.params.xml.ns.yang.sfc.sfst.rev150312.ServiceFunctionSchedulerTypeIdentity;
 import org.opendaylight.yang.gen.v1.urn.intel.params.xml.ns.yang.sfc.sfst.rev150312.ServiceFunctionSchedulerTypes;
@@ -37,21 +38,15 @@ public final class SfcProviderScheduleTypeAPI {
     private SfcProviderScheduleTypeAPI() {
     }
 
-    public static ServiceFunctionSchedulerType readEnabledServiceFunctionScheduleTypeEntry() {
-        ServiceFunctionSchedulerType ret = null;
-        printTraceStart(LOG);
-        ServiceFunctionSchedulerTypes serviceFunctionSchedulerTypes = SfcProviderScheduleTypeAPI
-                .readAllServiceFunctionScheduleTypes();
-        List<ServiceFunctionSchedulerType> sfScheduleTypeList = serviceFunctionSchedulerTypes
-                .getServiceFunctionSchedulerType();
-        for (ServiceFunctionSchedulerType serviceFunctionSchedulerType : sfScheduleTypeList) {
-            if (serviceFunctionSchedulerType.isEnabled()) {
-                ret = serviceFunctionSchedulerType;
-                break;
-            }
-        }
-        printTraceStop(LOG);
-        return ret;
+    public static Class<? extends ServiceFunctionSchedulerTypeIdentity> readEnabledServiceFunctionScheduleTypeEntry() {
+        return Optional.ofNullable(SfcProviderScheduleTypeAPI.readAllServiceFunctionScheduleTypes())
+                .map(ServiceFunctionSchedulerTypes::getServiceFunctionSchedulerType)
+                .orElse(Collections.emptyList())
+                .stream()
+                .filter(ServiceFunctionSchedulerType::isEnabled)
+                .findFirst()
+                .map(ServiceFunctionSchedulerType::getType)
+                .orElse(null);
     }
 
     public static boolean putServiceFunctionScheduleType(ServiceFunctionSchedulerType serviceFunctionSchedulerType) {
index d7a41344714edde1dc319452900cd169cda0e8a8..8285fc15b4c632d02e02d69bc327cd4e65ab8bb6 100755 (executable)
@@ -72,13 +72,10 @@ public class SfcProviderScheduleTypeAPITest extends AbstractDataStoreManager {
         SfcProviderScheduleTypeAPI.putServiceFunctionScheduleType(sfstBuilder1.build());
         SfcProviderScheduleTypeAPI.putServiceFunctionScheduleType(sfstBuilder2.build());
 
-        Object result = SfcProviderScheduleTypeAPI.readEnabledServiceFunctionScheduleTypeEntry();
-        ServiceFunctionSchedulerType sfst = (ServiceFunctionSchedulerType) result;
+        Class<? extends ServiceFunctionSchedulerTypeIdentity> scheduleTypeEntry;
+        scheduleTypeEntry = SfcProviderScheduleTypeAPI.readEnabledServiceFunctionScheduleTypeEntry();
 
-        assertNotNull("Must be not null", sfst);
-        assertEquals("Must be equal", sfst.getName(), name1);
-        assertEquals("Must be equal", sfst.getType(), type1);
-        assertEquals("Must be equal", sfst.isEnabled(), true);
+        assertEquals("Must be equal", scheduleTypeEntry, type1);
     }
 
     @Test