This is an automated email from the ASF dual-hosted git repository.

jkevan pushed a commit to branch UNOMI-727-adapt-merge-rollover
in repository https://gitbox.apache.org/repos/asf/unomi.git


The following commit(s) were added to refs/heads/UNOMI-727-adapt-merge-rollover 
by this push:
     new d4d8414bb UNOMI-727: adapt merge system to rollover (and cleanup too)
d4d8414bb is described below

commit d4d8414bb7c10bb07ab1d79ab70ab90d7397e4f4
Author: Kevan <[email protected]>
AuthorDate: Fri Mar 10 20:47:57 2023 +0100

    UNOMI-727: adapt merge system to rollover (and cleanup too)
---
 .../java/org/apache/unomi/itests/ProfileMergeIT.java | 20 ++++++++++++++------
 .../actions/MergeProfilesOnPropertyAction.java       | 16 +++++++++-------
 2 files changed, 23 insertions(+), 13 deletions(-)

diff --git a/itests/src/test/java/org/apache/unomi/itests/ProfileMergeIT.java 
b/itests/src/test/java/org/apache/unomi/itests/ProfileMergeIT.java
index c54d402e9..7815baccb 100644
--- a/itests/src/test/java/org/apache/unomi/itests/ProfileMergeIT.java
+++ b/itests/src/test/java/org/apache/unomi/itests/ProfileMergeIT.java
@@ -271,20 +271,28 @@ public class ProfileMergeIT extends BaseIT {
         Assert.assertEquals(mergeEvent.getSession().getProfileId(), 
mergeEvent.getProfileId());
         Assert.assertEquals("[email protected]", 
mergeEvent.getProfile().getSystemProperties().get("mergeIdentifier"));
 
-        // TODO (UNOMI-748): force the bulk processor to push requests
-        persistenceService.refresh();
-
-        // Check sessions/events are correctly rewritten
+        // Check events are correctly rewritten
         for (Event event : eventsToBeRewritten) {
             keepTrying("Wait for event: " + event.getItemId() + " profileId to 
be rewritten for masterProfileID",
                     () -> persistenceService.load(event.getItemId(), 
Event.class),
                     (loadedEvent) -> 
loadedEvent.getProfileId().equals("masterProfileID"), DEFAULT_TRYING_TIMEOUT, 
DEFAULT_TRYING_TRIES);
         }
-        for (Session session : sessionsToBeRewritten) {
+
+        // Check sessions are correctly rewritten
+        Condition sessionProfileIDRewrittenCondition = new 
Condition(definitionsService.getConditionType("sessionPropertyCondition"));
+        
sessionProfileIDRewrittenCondition.setParameter("propertyName","profileId");
+        
sessionProfileIDRewrittenCondition.setParameter("comparisonOperator","equals");
+        
sessionProfileIDRewrittenCondition.setParameter("propertyValue","masterProfileID");
+        keepTrying("Wait for sessions profileId to be rewritten to 
masterProfileID",
+                () -> 
persistenceService.queryCount(sessionProfileIDRewrittenCondition, 
Session.ITEM_TYPE),
+                (count) -> count == 5, DEFAULT_TRYING_TIMEOUT, 
DEFAULT_TRYING_TRIES);
+
+        // TODO uncomment this when UNOMI-749 is fixed, currently session 
loaded are inconsistent
+        /* for (Session session : sessionsToBeRewritten) {
             keepTrying("Wait for session: " + session.getItemId() + " 
profileId to be rewritten for masterProfileID",
                     () -> persistenceService.load(session.getItemId(), 
Session.class),
                     (loadedSession) -> 
loadedSession.getProfileId().equals("masterProfileID"), DEFAULT_TRYING_TIMEOUT, 
DEFAULT_TRYING_TRIES);
-        }
+        } */
     }
 
     /**
diff --git 
a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/actions/MergeProfilesOnPropertyAction.java
 
b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/actions/MergeProfilesOnPropertyAction.java
index d4404e7d9..6ecd0e797 100644
--- 
a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/actions/MergeProfilesOnPropertyAction.java
+++ 
b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/actions/MergeProfilesOnPropertyAction.java
@@ -121,13 +121,6 @@ public class MergeProfilesOnPropertyAction implements 
ActionExecutor {
                         //  We could consider replacing those updates(one item 
at a time) by updateByQueryAndScript to avoid loading all the sessions/events 
in memory,
                         //  but we would loose the asynchronous nature (By 
doing that request may take longer than before,
                         //  and could potentially break client side timeouts 
on requests)
-                        List<Session> oldSessions = 
persistenceService.query("profileId", profileToBeMergeId, null, Session.class);
-                        for (Session oldSession : oldSessions) {
-                            if 
(!oldSession.getItemId().equals(event.getSession().getItemId())) {
-                                persistenceService.update(oldSession, 
Session.class, "profileId", anonymousBrowsing ? null : mergedProfileId);
-                            }
-                        }
-
                         List<Event> oldEvents = 
persistenceService.query("profileId", profileToBeMergeId, null, Event.class);
                         for (Event oldEvent : oldEvents) {
                             if 
(!oldEvent.getItemId().equals(event.getItemId())) {
@@ -135,6 +128,15 @@ public class MergeProfilesOnPropertyAction implements 
ActionExecutor {
                             }
                         }
 
+                        // TODO (UNOMI-749): this is creating inconsistent 
sessions, they still contains old profile.
+                        //  And due to deserialization of sessions the 
profileId property will always be the one from profile stored in the session
+                        List<Session> oldSessions = 
persistenceService.query("profileId", profileToBeMergeId, null, Session.class);
+                        for (Session oldSession : oldSessions) {
+                            if 
(!oldSession.getItemId().equals(event.getSession().getItemId())) {
+                                persistenceService.update(oldSession, 
Session.class, "profileId", anonymousBrowsing ? null : mergedProfileId);
+                            }
+                        }
+
                         final String clientIdFromEvent = (String) 
event.getAttributes().get(Event.CLIENT_ID_ATTRIBUTE);
                         String clientId = clientIdFromEvent != null ? 
clientIdFromEvent : "defaultClientId";
                         profileService.addAliasToProfile(mergedProfileId, 
profileToBeMergeId, clientId);

Reply via email to