From 38a9d4aaecaaa29830fa266a3d2dc332d97536bc Mon Sep 17 00:00:00 2001 From: pierre-maraval Date: Wed, 15 May 2024 13:35:16 +0200 Subject: [PATCH] =?UTF-8?q?Fix=20:=20traitement=20de=20la=20suppression=20?= =?UTF-8?q?d'un=20package=20par=20paquet=20de=20notices.=20-=20ajout=20par?= =?UTF-8?q?am=C3=A8tre=20sur=20nombre=20de=20notices=20par=20paquet=20-=20?= =?UTF-8?q?appel=20r=C3=A9cursif=20=C3=A0=20la=20m=C3=A9thode=20pour=20ret?= =?UTF-8?q?irer=20les=20liens=20dans=20les=20notices=20li=C3=A9es=20jusqu'?= =?UTF-8?q?=C3=A0=20=C3=A9puisement?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kafkatosudoc/kafka/KbartListener.java | 23 ++++++++++++++++++- src/main/resources/application-dev.properties | 1 + .../resources/application-prod.properties | 1 + .../resources/application-test.properties | 1 + 4 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/main/java/fr/abes/kafkatosudoc/kafka/KbartListener.java b/src/main/java/fr/abes/kafkatosudoc/kafka/KbartListener.java index cfa31c5..86a78d1 100644 --- a/src/main/java/fr/abes/kafkatosudoc/kafka/KbartListener.java +++ b/src/main/java/fr/abes/kafkatosudoc/kafka/KbartListener.java @@ -49,6 +49,9 @@ public class KbartListener { @Value("${sudoc.signalDb}") private String signalDb; + @Value("${sudoc.nbNoticesParLot}") + private int nbNoticesParLot; + private final UtilsMapper mapper; @@ -288,6 +291,15 @@ public void listenKbartToDeleteFromKafka(ConsumerRecord p } } + /** + * Méthode permettant de délier les notices liées à une notice bouquet, cette méthode ne traite qu'un lot de 1000 notices maximum + * @param service méthodes permettant d'accéder au cbs + * @param provider provider + * @param packageName nom du package supprimé + * @param listError liste des erreurs éventuelles + * @throws CBSException erreur de validation du cbs + * @throws CommException erreur de communication avec le cbs + */ @Retryable(maxAttempts = 4, retryFor = CommException.class, noRetryFor = {CBSException.class}, backoff = @Backoff(delay = 1000, multiplier = 2)) private void traiterNoticesADelier(SudocService service, String provider, String packageName, List listError) throws CBSException, CommException { try { @@ -297,9 +309,18 @@ private void traiterNoticesADelier(SudocService service, String provider, String //boucle sur les notices liées à partir de la seconde (la première étant la notice bouquet elle-même) int nbNoticesLiees = service.getNoticesLiees(); log.debug("nombre de notices liées : " + nbNoticesLiees); - for (int i = 2; i <= nbNoticesLiees; i++) { + int nbNoticesADelier = (nbNoticesLiees < this.nbNoticesParLot) ? nbNoticesLiees : this.nbNoticesParLot; + for (int i = 2; i <= nbNoticesADelier; i++) { suppressionLien469(service, listError, i, ppnNoticeBouquet); } + //condition de sortie de la boucle récursive : il reste moins de notices à délier que le nombre plancher + if (nbNoticesLiees > this.nbNoticesParLot) { + log.debug("lot traité, déco / reco du cbs pour traitement lot suivant"); + service.disconnect(); + service.authenticate(serveurSudoc, portSudoc, loginSudoc, passwordSudoc); + //l'intégralité du lot n'a pas été traité, on rappelle la méthode en récursif pour traiter le lot suivant + traiterNoticesADelier(service, provider, packageName, listError); + } } catch (CommException | IOException ex) { service.decoRecoCbs(serveurSudoc, portSudoc, loginSudoc, passwordSudoc, ex); } diff --git a/src/main/resources/application-dev.properties b/src/main/resources/application-dev.properties index 17bb9bc..70dfbcd 100644 --- a/src/main/resources/application-dev.properties +++ b/src/main/resources/application-dev.properties @@ -8,6 +8,7 @@ sudoc.port= sudoc.password= sudoc.login= sudoc.signalDb= +sudoc.nbNoticesParLot=1000 mail.ws.recipient= mail.ws.url= diff --git a/src/main/resources/application-prod.properties b/src/main/resources/application-prod.properties index 17bb9bc..70dfbcd 100644 --- a/src/main/resources/application-prod.properties +++ b/src/main/resources/application-prod.properties @@ -8,6 +8,7 @@ sudoc.port= sudoc.password= sudoc.login= sudoc.signalDb= +sudoc.nbNoticesParLot=1000 mail.ws.recipient= mail.ws.url= diff --git a/src/main/resources/application-test.properties b/src/main/resources/application-test.properties index 992547c..d1a5fbc 100644 --- a/src/main/resources/application-test.properties +++ b/src/main/resources/application-test.properties @@ -8,6 +8,7 @@ sudoc.port= sudoc.password= sudoc.login= sudoc.signalDb= +sudoc.nbNoticesParLot=1000 mail.ws.recipient= mail.ws.url=