6
6
*/
7
7
package org .gridsuite .modification .server .elasticsearch ;
8
8
9
+ import com .google .common .collect .Lists ;
9
10
import org .gridsuite .modification .server .dto .elasticsearch .ModificationApplicationInfos ;
10
11
import org .gridsuite .modification .server .entities .ModificationApplicationEntity ;
11
12
import org .gridsuite .modification .server .repositories .ModificationApplicationRepository ;
13
+ import org .springframework .beans .factory .annotation .Value ;
12
14
import org .springframework .stereotype .Service ;
13
15
14
16
import java .util .List ;
15
17
import java .util .UUID ;
16
18
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
+
17
22
/**
18
23
* @author Kevin Le Saulnier <kevin.lesaulnier at rte-france.com>
19
24
*/
20
25
@ Service
21
26
public class ModificationApplicationInfosService {
22
27
private final ModificationApplicationInfosRepository modificationApplicationInfosRepository ;
23
28
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 ;
24
33
25
34
public ModificationApplicationInfosService (ModificationApplicationInfosRepository modificationApplicationInfosRepository ,
26
35
ModificationApplicationRepository modificationApplicationRepository ) {
@@ -29,33 +38,45 @@ public ModificationApplicationInfosService(ModificationApplicationInfosRepositor
29
38
}
30
39
31
40
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 );
44
59
}
45
60
46
61
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 ));
49
66
}
50
67
51
68
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 );
54
73
}
55
74
56
75
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 );
59
80
}
60
81
61
82
public void deleteAll () {
0 commit comments