From: PatrikBuhr Date: Fri, 24 Apr 2020 07:33:30 +0000 (+0200) Subject: Loading of configuration X-Git-Tag: 2.0.0~68^2 X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=commitdiff_plain;h=9e4535877a5bdb1811281df20caacce115f4581a;p=nonrtric.git Loading of configuration When an invalid configuartion was entered (from file of from consul) the periodic polling for updates was stopped. This is fixed. Improved error messages when an invalid configiration was intered. Previuosly it often was just a NullPointerException when a mandatory element was not found. Now, the missing element will be logged. Change-Id: Id28dd268429c0174a84f490e6fb48ef5614c0966 Issue-ID: NONRTRIC-204 Signed-off-by: PatrikBuhr --- diff --git a/policy-agent/src/main/java/org/oransc/policyagent/configuration/ApplicationConfigParser.java b/policy-agent/src/main/java/org/oransc/policyagent/configuration/ApplicationConfigParser.java index dd35e5b3..ea660537 100644 --- a/policy-agent/src/main/java/org/oransc/policyagent/configuration/ApplicationConfigParser.java +++ b/policy-agent/src/main/java/org/oransc/policyagent/configuration/ApplicationConfigParser.java @@ -119,9 +119,9 @@ public class ApplicationConfigParser { JsonObject ricAsJson = ricElem.getAsJsonObject(); JsonElement controllerNameElement = ricAsJson.get(CONTROLLER); ImmutableRicConfig ricConfig = ImmutableRicConfig.builder() // - .name(ricAsJson.get("name").getAsString()) // - .baseUrl(ricAsJson.get("baseUrl").getAsString()) // - .managedElementIds(parseManagedElementIds(ricAsJson.get("managedElementIds").getAsJsonArray())) // + .name(get(ricAsJson, "name").getAsString()) // + .baseUrl(get(ricAsJson, "baseUrl").getAsString()) // + .managedElementIds(parseManagedElementIds(get(ricAsJson, "managedElementIds").getAsJsonArray())) // .controllerName(controllerNameElement != null ? controllerNameElement.getAsString() : "") // .build(); result.add(ricConfig); @@ -137,10 +137,10 @@ public class ApplicationConfigParser { for (JsonElement element : getAsJsonArray(config, CONTROLLER)) { JsonObject controllerAsJson = element.getAsJsonObject(); ImmutableControllerConfig controllerConfig = ImmutableControllerConfig.builder() // - .name(controllerAsJson.get("name").getAsString()) // - .baseUrl(controllerAsJson.get("baseUrl").getAsString()) // - .password(controllerAsJson.get("password").getAsString()) // - .userName(controllerAsJson.get("userName").getAsString()) // ) + .name(get(controllerAsJson, "name").getAsString()) // + .baseUrl(get(controllerAsJson, "baseUrl").getAsString()) // + .password(get(controllerAsJson, "password").getAsString()) // + .userName(get(controllerAsJson, "userName").getAsString()) // ) .build(); if (result.put(controllerConfig.name(), controllerConfig) != null) { @@ -164,7 +164,7 @@ public class ApplicationConfigParser { private static JsonElement get(JsonObject obj, String memberName) throws ServiceException { JsonElement elem = obj.get(memberName); if (elem == null) { - throw new ServiceException("Could not find member: " + memberName + " in: " + obj); + throw new ServiceException("Could not find member: '" + memberName + "' in: " + obj); } return elem; } diff --git a/policy-agent/src/main/java/org/oransc/policyagent/tasks/RefreshConfigTask.java b/policy-agent/src/main/java/org/oransc/policyagent/tasks/RefreshConfigTask.java index 7cfe4868..41f2064a 100644 --- a/policy-agent/src/main/java/org/oransc/policyagent/tasks/RefreshConfigTask.java +++ b/policy-agent/src/main/java/org/oransc/policyagent/tasks/RefreshConfigTask.java @@ -24,7 +24,6 @@ import com.google.gson.GsonBuilder; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; -import com.google.gson.JsonSyntaxException; import com.google.gson.TypeAdapterFactory; import java.io.BufferedInputStream; @@ -109,9 +108,8 @@ public class RefreshConfigTask { logger.debug("Starting refreshConfigTask"); stop(); refreshTask = createRefreshTask() // - .subscribe( - notUsed -> logger.debug("Refreshed configuration data"), throwable -> logger - .error("Configuration refresh terminated due to exception {}", throwable.getMessage()), + .subscribe(notUsed -> logger.debug("Refreshed configuration data"), + throwable -> logger.error("Configuration refresh terminated due to exception {}", throwable.toString()), () -> logger.error("Configuration refresh terminated")); } @@ -128,7 +126,7 @@ public class RefreshConfigTask { .flatMap(notUsed -> loadConfigurationFromFile()) // .onErrorResume(this::ignoreError) // .doOnNext(json -> logger.debug("loadFromFile succeeded")) // - .doOnTerminate(() -> logger.error("loadFromFile Terminate")); + .doOnTerminate(() -> logger.info("loadFromFile Terminate")); Flux loadFromConsul = getEnvironment(systemEnvironment) // .flatMap(this::createCbsClient) // @@ -136,14 +134,18 @@ public class RefreshConfigTask { .onErrorResume(this::ignoreError) // .doOnNext(json -> logger.debug("loadFromConsul succeeded")) // .doOnNext(json -> this.isConsulUsed = true) // - .doOnTerminate(() -> logger.error("loadFromConsul Terminated")); + .doOnTerminate(() -> logger.info("loadFromConsul Terminated")); return Flux.merge(loadFromFile, loadFromConsul) // .flatMap(this::parseConfiguration) // .flatMap(this::updateConfig) // .doOnNext(this::handleUpdatedRicConfig) // .flatMap(configUpdate -> Flux.just(configUpdate.getType())) // - .doOnTerminate(() -> logger.error("Configuration refresh task is terminated")); + .doOnTerminate(() -> handleTerminate("Configuration refresh task is terminated")); + } + + private void handleTerminate(String info) { + logger.error(info); } Mono getEnvironment(Properties systemEnvironment) { @@ -157,7 +159,8 @@ public class RefreshConfigTask { private Flux periodicConfigurationUpdates(CbsClient cbsClient) { final Duration initialDelay = Duration.ZERO; final CbsRequest getConfigRequest = CbsRequests.getAll(RequestDiagnosticContext.create()); - return cbsClient.updates(getConfigRequest, initialDelay, CONSUL_CONFIG_REFRESH_INTERVAL); + return cbsClient.updates(getConfigRequest, initialDelay, CONSUL_CONFIG_REFRESH_INTERVAL) // + .onErrorResume(this::ignoreError); } private Mono ignoreError(Throwable throwable) { @@ -171,8 +174,9 @@ public class RefreshConfigTask { ApplicationConfigParser parser = new ApplicationConfigParser(); return Mono.just(parser.parse(jsonObject)); } catch (ServiceException e) { - logger.error("Could not parse configuration {}", e.toString(), e); - return Mono.error(e); + String str = e.toString(); + logger.error("Could not parse configuration {}", str); + return Mono.empty(); } } @@ -232,8 +236,8 @@ public class RefreshConfigTask { appParser.parse(rootObject); logger.debug("Local configuration file loaded: {}", filepath); return Flux.just(rootObject); - } catch (JsonSyntaxException | ServiceException | IOException e) { - logger.debug("Local configuration file not loaded: {}", filepath, e); + } catch (Exception e) { + logger.error("Local configuration file not loaded: {}, {}", filepath, e.getMessage()); return Flux.empty(); } } diff --git a/policy-agent/src/test/java/org/oransc/policyagent/configuration/ApplicationConfigParserTest.java b/policy-agent/src/test/java/org/oransc/policyagent/configuration/ApplicationConfigParserTest.java index 3303e3f7..eb37ec56 100644 --- a/policy-agent/src/test/java/org/oransc/policyagent/configuration/ApplicationConfigParserTest.java +++ b/policy-agent/src/test/java/org/oransc/policyagent/configuration/ApplicationConfigParserTest.java @@ -201,7 +201,7 @@ public class ApplicationConfigParserTest { JsonObject jsonRootObject = getJsonRootObject(); JsonObject json = jsonRootObject.getAsJsonObject("config"); json.remove("ric"); - final String message = "Could not find member: ric in: " + json; + final String message = "Could not find member: 'ric' in: " + json; Exception actualException = assertThrows(ServiceException.class, () -> parserUnderTest.parse(jsonRootObject));