66 */
77package org .gridsuite .modification .server .elasticsearch ;
88
9+ import com .google .common .collect .Lists ;
910import org .gridsuite .modification .server .dto .elasticsearch .ModificationApplicationInfos ;
1011import org .gridsuite .modification .server .entities .ModificationApplicationEntity ;
1112import org .gridsuite .modification .server .repositories .ModificationApplicationRepository ;
13+ import org .springframework .beans .factory .annotation .Value ;
1214import org .springframework .stereotype .Service ;
1315
1416import java .util .List ;
1517import java .util .UUID ;
1618
19+ import static org .gridsuite .modification .server .utils .DatabaseConstants .SQL_SUB_MODIFICATION_DELETION_BATCH_SIZE ;
20+ import static org .gridsuite .modification .server .utils .DatabaseConstants .SQL_SUB_MODIFICATION_SAVE_BATCH_SIZE ;
21+
1722/**
1823 * @author Kevin Le Saulnier <kevin.lesaulnier at rte-france.com>
1924 */
2025@ Service
2126public class ModificationApplicationInfosService {
2227 private final ModificationApplicationInfosRepository modificationApplicationInfosRepository ;
2328 private final ModificationApplicationRepository modificationApplicationRepository ;
29+ @ Value ("${spring.data.elasticsearch.partition-size:10000}" )
30+ private int partitionSize ;
31+ @ Value ("${spring.data.elasticsearch.partition-size-for-deletion:2048}" )
32+ public int partitionSizeForDeletion ;
2433
2534 public ModificationApplicationInfosService (ModificationApplicationInfosRepository modificationApplicationInfosRepository ,
2635 ModificationApplicationRepository modificationApplicationRepository ) {
@@ -29,33 +38,45 @@ public ModificationApplicationInfosService(ModificationApplicationInfosRepositor
2938 }
3039
3140 public void addAll (List <ModificationApplicationInfos > modificationApplicationInfos ) {
32- modificationApplicationRepository .saveAll (modificationApplicationInfos .stream ()
33- .map (modificationInfo -> {
34- ModificationApplicationEntity newModificationApplicationEntity = ModificationApplicationEntity .builder ()
35- .networkUuid (modificationInfo .getNetworkUuid ())
36- .createdEquipmentIds (modificationInfo .getCreatedEquipmentIds ())
37- .modifiedEquipmentIds (modificationInfo .getModifiedEquipmentIds ())
38- .deletedEquipmentIds (modificationInfo .getDeletedEquipmentIds ())
39- .build ();
40- newModificationApplicationEntity .setModification (modificationInfo .getModification ());
41- return newModificationApplicationEntity ;
42- }).toList ());
43- modificationApplicationInfosRepository .saveAll (modificationApplicationInfos );
41+ Lists .partition (modificationApplicationInfos , SQL_SUB_MODIFICATION_SAVE_BATCH_SIZE )
42+ .parallelStream ()
43+ .forEach (modificationApplicationInfosBatch ->
44+ modificationApplicationRepository .saveAll (modificationApplicationInfosBatch .stream ()
45+ .map (modificationInfo -> {
46+ ModificationApplicationEntity newModificationApplicationEntity = ModificationApplicationEntity
47+ .builder ()
48+ .networkUuid (modificationInfo .getNetworkUuid ())
49+ .createdEquipmentIds (modificationInfo .getCreatedEquipmentIds ())
50+ .modifiedEquipmentIds (modificationInfo .getModifiedEquipmentIds ())
51+ .deletedEquipmentIds (modificationInfo .getDeletedEquipmentIds ())
52+ .build ();
53+ newModificationApplicationEntity .setModification (modificationInfo .getModification ());
54+ return newModificationApplicationEntity ;
55+ }).toList ()));
56+ Lists .partition (modificationApplicationInfos , partitionSize )
57+ .parallelStream ()
58+ .forEach (modificationApplicationInfosRepository ::saveAll );
4459 }
4560
4661 public void deleteAllByGroupUuidsAndNetworkUuid (List <UUID > groupUuids , UUID networkUuid ) {
47- modificationApplicationRepository .deleteAllByNetworkUuidAndModificationGroupIdIn (networkUuid , groupUuids );
48- modificationApplicationInfosRepository .deleteAllByNetworkUuidAndGroupUuidIn (networkUuid , groupUuids );
62+ Lists .partition (groupUuids , SQL_SUB_MODIFICATION_DELETION_BATCH_SIZE ).parallelStream ().forEach (ids ->
63+ modificationApplicationRepository .deleteAllByNetworkUuidAndModificationGroupIdIn (networkUuid , ids ));
64+ Lists .partition (groupUuids , partitionSizeForDeletion ).parallelStream ().forEach (ids ->
65+ modificationApplicationInfosRepository .deleteAllByNetworkUuidAndGroupUuidIn (networkUuid , ids ));
4966 }
5067
5168 public void deleteAllByGroupUuids (List <UUID > groupUuids ) {
52- modificationApplicationRepository .deleteAllByModificationGroupIdIn (groupUuids );
53- modificationApplicationInfosRepository .deleteAllByGroupUuidIn (groupUuids );
69+ Lists .partition (groupUuids , SQL_SUB_MODIFICATION_DELETION_BATCH_SIZE ).parallelStream ()
70+ .forEach (modificationApplicationRepository ::deleteAllByModificationGroupIdIn );
71+ Lists .partition (groupUuids , partitionSizeForDeletion ).parallelStream ()
72+ .forEach (modificationApplicationInfosRepository ::deleteAllByGroupUuidIn );
5473 }
5574
5675 public void deleteAllByModificationIds (List <UUID > modificationIds ) {
57- modificationApplicationRepository .deleteAllByModificationIdIn (modificationIds );
58- modificationApplicationInfosRepository .deleteAllByModificationUuidIn (modificationIds );
76+ Lists .partition (modificationIds , SQL_SUB_MODIFICATION_DELETION_BATCH_SIZE ).parallelStream ()
77+ .forEach (modificationApplicationRepository ::deleteAllByModificationIdIn );
78+ Lists .partition (modificationIds , partitionSizeForDeletion ).parallelStream ()
79+ .forEach (modificationApplicationInfosRepository ::deleteAllByModificationUuidIn );
5980 }
6081
6182 public void deleteAll () {
0 commit comments