Skip to content

Commit 38a9d4a

Browse files
Fix : traitement de la suppression d'un package par paquet de notices.
- ajout paramètre sur nombre de notices par paquet - appel récursif à la méthode pour retirer les liens dans les notices liées jusqu'à épuisement
1 parent b28df23 commit 38a9d4a

File tree

4 files changed

+25
-1
lines changed

4 files changed

+25
-1
lines changed

src/main/java/fr/abes/kafkatosudoc/kafka/KbartListener.java

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,9 @@ public class KbartListener {
4949
@Value("${sudoc.signalDb}")
5050
private String signalDb;
5151

52+
@Value("${sudoc.nbNoticesParLot}")
53+
private int nbNoticesParLot;
54+
5255
private final UtilsMapper mapper;
5356

5457

@@ -288,6 +291,15 @@ public void listenKbartToDeleteFromKafka(ConsumerRecord<String, GenericRecord> p
288291
}
289292
}
290293

294+
/**
295+
* 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
296+
* @param service méthodes permettant d'accéder au cbs
297+
* @param provider provider
298+
* @param packageName nom du package supprimé
299+
* @param listError liste des erreurs éventuelles
300+
* @throws CBSException erreur de validation du cbs
301+
* @throws CommException erreur de communication avec le cbs
302+
*/
291303
@Retryable(maxAttempts = 4, retryFor = CommException.class, noRetryFor = {CBSException.class}, backoff = @Backoff(delay = 1000, multiplier = 2))
292304
private void traiterNoticesADelier(SudocService service, String provider, String packageName, List<String> listError) throws CBSException, CommException {
293305
try {
@@ -297,9 +309,18 @@ private void traiterNoticesADelier(SudocService service, String provider, String
297309
//boucle sur les notices liées à partir de la seconde (la première étant la notice bouquet elle-même)
298310
int nbNoticesLiees = service.getNoticesLiees();
299311
log.debug("nombre de notices liées : " + nbNoticesLiees);
300-
for (int i = 2; i <= nbNoticesLiees; i++) {
312+
int nbNoticesADelier = (nbNoticesLiees < this.nbNoticesParLot) ? nbNoticesLiees : this.nbNoticesParLot;
313+
for (int i = 2; i <= nbNoticesADelier; i++) {
301314
suppressionLien469(service, listError, i, ppnNoticeBouquet);
302315
}
316+
//condition de sortie de la boucle récursive : il reste moins de notices à délier que le nombre plancher
317+
if (nbNoticesLiees > this.nbNoticesParLot) {
318+
log.debug("lot traité, déco / reco du cbs pour traitement lot suivant");
319+
service.disconnect();
320+
service.authenticate(serveurSudoc, portSudoc, loginSudoc, passwordSudoc);
321+
//l'intégralité du lot n'a pas été traité, on rappelle la méthode en récursif pour traiter le lot suivant
322+
traiterNoticesADelier(service, provider, packageName, listError);
323+
}
303324
} catch (CommException | IOException ex) {
304325
service.decoRecoCbs(serveurSudoc, portSudoc, loginSudoc, passwordSudoc, ex);
305326
}

src/main/resources/application-dev.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ sudoc.port=
88
sudoc.password=
99
sudoc.login=
1010
sudoc.signalDb=
11+
sudoc.nbNoticesParLot=1000
1112

1213
mail.ws.recipient=
1314
mail.ws.url=

src/main/resources/application-prod.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ sudoc.port=
88
sudoc.password=
99
sudoc.login=
1010
sudoc.signalDb=
11+
sudoc.nbNoticesParLot=1000
1112

1213
mail.ws.recipient=
1314
mail.ws.url=

src/main/resources/application-test.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ sudoc.port=
88
sudoc.password=
99
sudoc.login=
1010
sudoc.signalDb=
11+
sudoc.nbNoticesParLot=1000
1112

1213
mail.ws.recipient=
1314
mail.ws.url=

0 commit comments

Comments
 (0)