X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=policy-agent%2Fsrc%2Fmain%2Fjava%2Forg%2Foransc%2Fpolicyagent%2Ftasks%2FRepositorySupervision.java;h=1a9038274a2f56ebeb6f5a5accd9d583da4cde6b;hb=f694dec2ff16069e6bb5c9de845278f44e8c9591;hp=bfd40e52a01f6762715b9242f105b2a68e28853c;hpb=7a4a590fb0ebf8772169625cdda327da43c79c6d;p=nonrtric.git diff --git a/policy-agent/src/main/java/org/oransc/policyagent/tasks/RepositorySupervision.java b/policy-agent/src/main/java/org/oransc/policyagent/tasks/RepositorySupervision.java index bfd40e52..1a903827 100644 --- a/policy-agent/src/main/java/org/oransc/policyagent/tasks/RepositorySupervision.java +++ b/policy-agent/src/main/java/org/oransc/policyagent/tasks/RepositorySupervision.java @@ -26,6 +26,7 @@ import org.oransc.policyagent.clients.A1Client; import org.oransc.policyagent.repository.Policies; import org.oransc.policyagent.repository.PolicyTypes; import org.oransc.policyagent.repository.Ric; +import org.oransc.policyagent.repository.Ric.RicState; import org.oransc.policyagent.repository.Rics; import org.oransc.policyagent.repository.Services; import org.slf4j.Logger; @@ -69,25 +70,38 @@ public class RepositorySupervision { public void checkAllRics() { logger.debug("Checking Rics starting"); createTask().subscribe(this::onRicChecked, this::onError, this::onComplete); - } private Flux createTask() { - return Flux.fromIterable(rics.getRics()) // - .flatMap(ric -> checkInstances(ric)) // - .flatMap(ric -> checkTypes(ric)); + synchronized (this.rics) { + return Flux.fromIterable(rics.getRics()) // + .flatMap(ric -> checkRicState(ric)) // + .flatMap(ric -> checkRicPolicies(ric)) // + .flatMap(ric -> checkRicPolicyTypes(ric)); + } } - private Mono checkInstances(Ric ric) { + private Mono checkRicState(Ric ric) { + if (ric.state() == RicState.UNDEFINED) { + return startRecovery(ric); + } else if (ric.state() == RicState.RECOVERING) { + return Mono.empty(); + } else { + return Mono.just(ric); + } + } + private Mono checkRicPolicies(Ric ric) { return a1Client.getPolicyIdentities(ric.getConfig().baseUrl()) // .onErrorResume(t -> Mono.empty()) // .flatMap(ricP -> validateInstances(ricP, ric)); } private Mono validateInstances(Collection ricPolicies, Ric ric) { - if (ricPolicies.size() != policies.getForRic(ric.name()).size()) { - return startRecovery(ric); + synchronized (this.policies) { + if (ricPolicies.size() != policies.getForRic(ric.name()).size()) { + return startRecovery(ric); + } } for (String policyId : ricPolicies) { if (!policies.containsPolicy(policyId)) { @@ -97,7 +111,7 @@ public class RepositorySupervision { return Mono.just(ric); } - private Mono checkTypes(Ric ric) { + private Mono checkRicPolicyTypes(Ric ric) { return a1Client.getPolicyTypeIdentities(ric.getConfig().baseUrl()) // .onErrorResume(t -> { return Mono.empty();