From 485bc22f441b7670e12ec376ffadf599aecbc80f Mon Sep 17 00:00:00 2001 From: le-maire Date: Thu, 6 Jun 2024 10:38:40 +0200 Subject: [PATCH] =?UTF-8?q?add:=20ajout=20try=20finally=20pour=20lib=C3=A9?= =?UTF-8?q?rer=20le=20mutex?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AjouterThesesPersonnesProcessor.java | 113 +++++++++--------- 1 file changed, 58 insertions(+), 55 deletions(-) diff --git a/src/main/java/fr/abes/theses_batch_indexation/processor/AjouterThesesPersonnesProcessor.java b/src/main/java/fr/abes/theses_batch_indexation/processor/AjouterThesesPersonnesProcessor.java index 292ea62..705e97a 100644 --- a/src/main/java/fr/abes/theses_batch_indexation/processor/AjouterThesesPersonnesProcessor.java +++ b/src/main/java/fr/abes/theses_batch_indexation/processor/AjouterThesesPersonnesProcessor.java @@ -135,80 +135,83 @@ public TheseModel process(TheseModel theseModel) throws Exception { mutex.unlock(); } - if (!dbService.estPresentDansTableDocument(theseModel.getIdDoc())) { - dbService.supprimerTheseATraiter(theseModel.getId(), TableIndexationES.indexation_es_personne); - return theseModel; - } + try { + if (!dbService.estPresentDansTableDocument(theseModel.getIdDoc())) { + dbService.supprimerTheseATraiter(theseModel.getId(), TableIndexationES.indexation_es_personne); + return theseModel; + } - // Rechercher les personnes qui ont cette thèse dans leur list et suppimer les personnes sans nnt - elasticSearchUtils.deletePersonneModelESSansPPN(theseModel.getId()); + // Rechercher les personnes qui ont cette thèse dans leur list et suppimer les personnes sans nnt + elasticSearchUtils.deletePersonneModelESSansPPN(theseModel.getId()); - log.info("fin suppression"); - // sortir la liste des personnes de la thèse - List personnesTefList = getPersonnesModelESFromTef(theseModel.getId()); + log.info("fin suppression"); + // sortir la liste des personnes de la thèse + List personnesTefList = getPersonnesModelESFromTef(theseModel.getId()); - log.info("1"); - List personneModelESList = new ArrayList<>(elasticSearchUtils.getPersonnesModelESAvecId(theseModel.getId())) - .stream().map(PersonneModelES::new).filter(PersonneModelES::isHas_idref).collect(Collectors.toList()); + log.info("1"); + List personneModelESList = new ArrayList<>(elasticSearchUtils.getPersonnesModelESAvecId(theseModel.getId())) + .stream().map(PersonneModelES::new).filter(PersonneModelES::isHas_idref).collect(Collectors.toList()); - log.info("fin recupération"); - //personneModelESAvecIds.addAll(personnesTef); - //personnesTef.addAll(personneModelESAvecIds); + log.info("fin recupération"); + //personneModelESAvecIds.addAll(personnesTef); + //personnesTef.addAll(personneModelESAvecIds); - List personneModelESEtTef = new ArrayList<>(personneModelESList); + List personneModelESEtTef = new ArrayList<>(personneModelESList); - // Dédoublonage des personnes en gardant celles de ES - for (PersonneModelES personneTef : personnesTefList) { + // Dédoublonage des personnes en gardant celles de ES + for (PersonneModelES personneTef : personnesTefList) { - if (personneModelESList.stream().noneMatch(p -> p.getPpn().equals(personneTef.getPpn()))) { - personneModelESEtTef.add(personneTef); + if (personneModelESList.stream().noneMatch(p -> p.getPpn().equals(personneTef.getPpn()))) { + personneModelESEtTef.add(personneTef); + } } - } - log.info("2 début traitement"); + log.info("2 début traitement"); - Optional theseModelES = Optional.empty(); + Optional theseModelES = Optional.empty(); - for (PersonneModelES personneES : personneModelESEtTef) { + for (PersonneModelES personneES : personneModelESEtTef) { - Optional personneModelES; - if (personneES.isHas_idref()) { - personneModelES = personnesTefList.stream().filter(p -> p.isHas_idref() && p.getPpn().equals(personneES.getPpn())).findFirst(); - } else { - // si pas de idref, construction des personnes (sans idref); pas sur que ca fonctionne avec NomPrenom car si on change de nomPrenom - personneModelES = personnesTefList.stream().filter(p -> p.getNom().equals(personneES.getNom()) && p.getPrenom().equals(personneES.getPrenom())).findFirst(); - } - if (personneModelES.isPresent()) { - theseModelES = personneModelES.get().getTheses().stream().findFirst(); - } + Optional personneModelES; + if (personneES.isHas_idref()) { + personneModelES = personnesTefList.stream().filter(p -> p.isHas_idref() && p.getPpn().equals(personneES.getPpn())).findFirst(); + } else { + // si pas de idref, construction des personnes (sans idref); pas sur que ca fonctionne avec NomPrenom car si on change de nomPrenom + personneModelES = personnesTefList.stream().filter(p -> p.getNom().equals(personneES.getNom()) && p.getPrenom().equals(personneES.getPrenom())).findFirst(); + } + if (personneModelES.isPresent()) { + theseModelES = personneModelES.get().getTheses().stream().findFirst(); + } - // Enlever la thèse en cours - personneES.getTheses().removeIf(t -> t.getId().equals(theseModel.getIdSujet()) || t.getId().equals(theseModel.getNnt())); - personneES.getTheses_id().removeIf(t -> t.equals(theseModel.getIdSujet()) || t.equals(theseModel.getNnt())); + // Enlever la thèse en cours + personneES.getTheses().removeIf(t -> t.getId().equals(theseModel.getIdSujet()) || t.getId().equals(theseModel.getNnt())); + personneES.getTheses_id().removeIf(t -> t.equals(theseModel.getIdSujet()) || t.equals(theseModel.getNnt())); - if (theseModelES.isPresent()) { - // Ajout de la thèse en cours - personneES.getTheses().add(theseModelES.get()); - personneES.getTheses_id().add(theseModelES.get().getId()); + if (theseModelES.isPresent()) { + // Ajout de la thèse en cours + personneES.getTheses().add(theseModelES.get()); + personneES.getTheses_id().add(theseModelES.get().getId()); + } } - } - - log.info("5"); - elasticSearchUtils.indexerPersonnesDansEs(personneModelESEtTef, elasticConfig); + log.info("5"); - log.info("6 fin traitement"); + elasticSearchUtils.indexerPersonnesDansEs(personneModelESEtTef, elasticConfig); - try { - mutex.lock(); - thesesEnTraitement.removeAll(nntLies); - } catch (Exception e) { - for (Object nnt : nntLies) { - log.error("nnt lies " + nnt); + log.info("6 fin traitement"); + } + finally { + try { + mutex.lock(); + thesesEnTraitement.removeAll(nntLies); + } catch (Exception e) { + for (Object nnt : nntLies) { + log.error("nnt lies " + nnt); + } + log.error("removeall de nntlies ne fonctionne pas : " + e); + } finally { + mutex.unlock(); } - log.error("removeall de nntlies ne fonctionne pas : " + e); - } finally { - mutex.unlock(); } dbService.supprimerTheseATraiter(theseModel.getId(), TableIndexationES.indexation_es_personne);