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=9ac9d705ad670f95415cdf871cbf482744315f6d;hpb=637540bc28fbf337e0c4c58c051a6b4f7ceb321d;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 9ac9d705..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,7 +26,9 @@ 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; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -49,13 +51,16 @@ public class RepositorySupervision { private final Policies policies; private final PolicyTypes policyTypes; private final A1Client a1Client; + private final Services services; @Autowired - public RepositorySupervision(Rics rics, Policies policies, A1Client a1Client, PolicyTypes policyTypes) { + public RepositorySupervision(Rics rics, Policies policies, A1Client a1Client, PolicyTypes policyTypes, + Services services) { this.rics = rics; this.policies = policies; this.a1Client = a1Client; this.policyTypes = policyTypes; + this.services = services; } /** @@ -65,29 +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 Flux junk() { - return Flux.empty(); - } - 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(); @@ -118,7 +132,7 @@ public class RepositorySupervision { } private Mono startRecovery(Ric ric) { - RicRecoveryTask recovery = new RicRecoveryTask(a1Client, policyTypes, policies); + RicRecoveryTask recovery = new RicRecoveryTask(a1Client, policyTypes, policies, services); recovery.run(ric); return Mono.empty(); }