You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@unomi.apache.org by sh...@apache.org on 2017/01/09 16:21:44 UTC

[10/50] [abbrv] incubator-unomi git commit: UNOMI-63 Use ElasticSearch BulkProcessing to perform segment updates Replace lists with sets to optimize porfile removal

UNOMI-63 Use ElasticSearch BulkProcessing to perform segment updates
Replace lists with sets to optimize porfile removal


Project: http://git-wip-us.apache.org/repos/asf/incubator-unomi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-unomi/commit/85f00e8a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-unomi/tree/85f00e8a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-unomi/diff/85f00e8a

Branch: refs/heads/master
Commit: 85f00e8ace06eb603619d604718879ef39d29f20
Parents: 1075a02
Author: Serge Huber <sh...@apache.org>
Authored: Thu Nov 24 20:17:21 2016 +0100
Committer: Serge Huber <sh...@apache.org>
Committed: Thu Nov 24 20:17:21 2016 +0100

----------------------------------------------------------------------
 .../unomi/services/services/SegmentServiceImpl.java   | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/85f00e8a/services/src/main/java/org/apache/unomi/services/services/SegmentServiceImpl.java
----------------------------------------------------------------------
diff --git a/services/src/main/java/org/apache/unomi/services/services/SegmentServiceImpl.java b/services/src/main/java/org/apache/unomi/services/services/SegmentServiceImpl.java
index 06b83b0..d1f120f 100644
--- a/services/src/main/java/org/apache/unomi/services/services/SegmentServiceImpl.java
+++ b/services/src/main/java/org/apache/unomi/services/services/SegmentServiceImpl.java
@@ -825,21 +825,25 @@ public class SegmentServiceImpl implements SegmentService, SynchronousBundleList
         segmentCondition.setParameter("propertyValue", segment.getItemId());
 
         if(segment.getMetadata().isEnabled()) {
+            // the following list can grow really big if the segments are large.
+            // We might want to replace this with scrolling if it becomes huge
+            // (100million profiles)
             List<Profile> previousProfiles = persistenceService.query(segmentCondition, null, Profile.class);
             List<Profile> newProfiles = persistenceService.query(segment.getCondition(), null, Profile.class);
 
-            List<Profile> add = new ArrayList<>(newProfiles);
-            add.removeAll(previousProfiles);
-            previousProfiles.removeAll(newProfiles);
+            Set<Profile> profilesToAdd = new HashSet<>(newProfiles);
+            Set<Profile> profilesToRemove = new HashSet<>(previousProfiles);
+            profilesToAdd.removeAll(previousProfiles);
+            profilesToRemove.removeAll(newProfiles);
 
-            for (Profile profileToAdd : add) {
+            for (Profile profileToAdd : profilesToAdd) {
                 profileToAdd.getSegments().add(segment.getItemId());
                 persistenceService.update(profileToAdd.getItemId(), null, Profile.class, "segments", profileToAdd.getSegments());
                 Event profileUpdated = new Event("profileUpdated", null, profileToAdd, null, null, profileToAdd, new Date());
                 profileUpdated.setPersistent(false);
                 eventService.send(profileUpdated);
             }
-            for (Profile profileToRemove : previousProfiles) {
+            for (Profile profileToRemove : profilesToRemove) {
                 profileToRemove.getSegments().remove(segment.getItemId());
                 persistenceService.update(profileToRemove.getItemId(), null, Profile.class, "segments", profileToRemove.getSegments());
                 Event profileUpdated = new Event("profileUpdated", null, profileToRemove, null, null, profileToRemove, new Date());