X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=enrichment-coordinator-service%2Fsrc%2Fmain%2Fjava%2Forg%2Foransc%2Fenrichment%2Frepository%2FEiJobs.java;h=7ca7261e6e118efc4e49b06b5c01c6ceb6edcb8a;hb=46c3e2be383add6bb21570a24abef778fd75a762;hp=1532c535a54a2c44afc4b7cd83ffac88897ca6b2;hpb=8489de0f43f28c5cd62206b4e242c0308f9864b9;p=nonrtric.git diff --git a/enrichment-coordinator-service/src/main/java/org/oransc/enrichment/repository/EiJobs.java b/enrichment-coordinator-service/src/main/java/org/oransc/enrichment/repository/EiJobs.java index 1532c535..7ca7261e 100644 --- a/enrichment-coordinator-service/src/main/java/org/oransc/enrichment/repository/EiJobs.java +++ b/enrichment-coordinator-service/src/main/java/org/oransc/enrichment/repository/EiJobs.java @@ -39,6 +39,7 @@ import java.util.ServiceLoader; import java.util.Vector; import org.oransc.enrichment.configuration.ApplicationConfig; +import org.oransc.enrichment.controllers.r1producer.ProducerCallbacks; import org.oransc.enrichment.exceptions.ServiceException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -57,24 +58,30 @@ public class EiJobs { private final ApplicationConfig config; private final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); - public EiJobs(ApplicationConfig config) { + private final ProducerCallbacks producerCallbacks; + + public EiJobs(ApplicationConfig config, ProducerCallbacks producerCallbacks) { this.config = config; GsonBuilder gsonBuilder = new GsonBuilder(); ServiceLoader.load(TypeAdapterFactory.class).forEach(gsonBuilder::registerTypeAdapterFactory); this.gson = gsonBuilder.create(); + this.producerCallbacks = producerCallbacks; } public synchronized void restoreJobsFromDatabase() throws IOException { + Files.createDirectories(Paths.get(getDatabaseDirectory())); File dbDir = new File(getDatabaseDirectory()); + for (File file : dbDir.listFiles()) { String json = Files.readString(file.toPath()); EiJob job = gson.fromJson(json, EiJob.class); - this.put(job, false); + this.doPut(job); } } public synchronized void put(EiJob job) { - this.put(job, true); + this.doPut(job); + storeJobInFile(job); } public synchronized Collection getJobs() { @@ -84,7 +91,7 @@ public class EiJobs { public synchronized EiJob getJob(String id) throws ServiceException { EiJob ric = allEiJobs.get(id); if (ric == null) { - throw new ServiceException("Could not find EI job: " + id); + throw new ServiceException("Could not find Information job: " + id); } return ric; } @@ -105,25 +112,25 @@ public class EiJobs { return allEiJobs.get(id); } - public synchronized EiJob remove(String id) { + public synchronized EiJob remove(String id, EiProducers eiProducers) { EiJob job = allEiJobs.get(id); if (job != null) { - remove(job); + remove(job, eiProducers); } return job; } - public synchronized void remove(EiJob job) { - this.allEiJobs.remove(job.id()); - jobsByType.remove(job.typeId(), job.id()); - jobsByOwner.remove(job.owner(), job.id()); + public synchronized void remove(EiJob job, EiProducers eiProducers) { + this.allEiJobs.remove(job.getId()); + jobsByType.remove(job.getTypeId(), job.getId()); + jobsByOwner.remove(job.getOwner(), job.getId()); try { Files.delete(getPath(job)); } catch (IOException e) { logger.warn("Could not remove file: {}", e.getMessage()); } - + this.producerCallbacks.stopEiJob(job, eiProducers); } public synchronized int size() { @@ -134,30 +141,31 @@ public class EiJobs { this.allEiJobs.clear(); this.jobsByType.clear(); jobsByOwner.clear(); + clearDatabase(); + } + + private void clearDatabase() { try { FileSystemUtils.deleteRecursively(Path.of(getDatabaseDirectory())); + Files.createDirectories(Paths.get(getDatabaseDirectory())); } catch (IOException e) { logger.warn("Could not delete database : {}", e.getMessage()); } } - private void put(EiJob job, boolean storePersistently) { - allEiJobs.put(job.id(), job); - jobsByType.put(job.typeId(), job.id(), job); - jobsByOwner.put(job.owner(), job.id(), job); - if (storePersistently) { - storeJobInFile(job); - } + private void doPut(EiJob job) { + allEiJobs.put(job.getId(), job); + jobsByType.put(job.getTypeId(), job.getId(), job); + jobsByOwner.put(job.getOwner(), job.getId(), job); } private void storeJobInFile(EiJob job) { try { - Files.createDirectories(Paths.get(getDatabaseDirectory())); try (PrintStream out = new PrintStream(new FileOutputStream(getFile(job)))) { out.print(gson.toJson(job)); } } catch (Exception e) { - logger.warn("Could not save job: {} {}", job.id(), e.getMessage()); + logger.warn("Could not store job: {} {}", job.getId(), e.getMessage()); } } @@ -166,11 +174,11 @@ public class EiJobs { } private Path getPath(EiJob job) { - return Path.of(getDatabaseDirectory(), job.id()); + return Path.of(getDatabaseDirectory(), job.getId()); } private String getDatabaseDirectory() { - return config.getVardataDirectory() + "/database"; + return config.getVardataDirectory() + "/database/eijobs"; } }