Merge "New version of NearRT-RIC simulator"
[nonrtric.git] / policy-agent / src / main / java / org / oransc / policyagent / tasks / ServiceSupervision.java
index f2de7cf..1e7f2dc 100644 (file)
@@ -69,25 +69,29 @@ public class ServiceSupervision {
     }
 
     private Flux<Policy> createTask() {
-        return Flux.fromIterable(services.getAll()) //
-            .filter(service -> service.isExpired()) //
-            .doOnNext(service -> logger.info("Service is expired:" + service.getName()))
-            .flatMap(service -> getAllPolicies(service)) //
-            .doOnNext(policy -> this.policies.remove(policy)) //
-            .flatMap(policy -> deletePolicyInRic(policy));
+        synchronized (services) {
+            return Flux.fromIterable(services.getAll()) //
+                .filter(service -> service.isExpired()) //
+                .doOnNext(service -> logger.info("Service is expired:" + service.getName())) //
+                .flatMap(service -> getAllPolicies(service)) //
+                .doOnNext(policy -> this.policies.remove(policy)) //
+                .flatMap(policy -> deletePolicyInRic(policy));
+        }
     }
 
     private Flux<Policy> getAllPolicies(Service service) {
-        return Flux.fromIterable(policies.getForService(service.getName()));
+        synchronized (policies) {
+            return Flux.fromIterable(policies.getForService(service.getName()));
+        }
     }
 
     private Mono<Policy> deletePolicyInRic(Policy policy) {
         return a1Client.deletePolicy(policy.ric().getConfig().baseUrl(), policy.id()) //
             .onErrorResume(exception -> handleDeleteFromRicFailure(policy, exception)) //
-            .flatMap((nothing) -> Mono.just(policy));
+            .map((nothing) -> policy);
     }
 
-    private Mono<Void> handleDeleteFromRicFailure(Policy policy, Throwable e) {
+    private Mono<String> handleDeleteFromRicFailure(Policy policy, Throwable e) {
         logger.warn("Could not delete policy: {} from ric: {}", policy.id(), policy.ric().name(), e);
         return Mono.empty();
     }