Kevan Jahanshahi created UNOMI-749:
--------------------------------------

             Summary: Unomi merge system produce inconsistent past sessions 
rewrite of profileId.
                 Key: UNOMI-749
                 URL: https://issues.apache.org/jira/browse/UNOMI-749
             Project: Apache Unomi
          Issue Type: Improvement
    Affects Versions: unomi-2.1.0
            Reporter: Kevan Jahanshahi


In case a profile is merge. There is a mechanism that will update all previous 
sessions to use the new master profileID:

 
{code:java}
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);
    }
} {code}
The sessions profileID is correctly updated in ElasticSearch documents.

 

But when you load the session using persistenceService, you still get the old 
profileId. This is due to the deserialisation of the session, we correctly 
updated the profileId prop, but the profile property is still containing the 
full old profile.

The session properties:
 * profileId: new profile ID
 * profile: old profile

And the Session object contains this setter:
{code:java}
/**
 * Sets the associated Profile.
 *
 * @param profile the associated Profile
 */
public void setProfile(Profile profile) {
    this.profileId = profile.getItemId();
    this.profile = profile;
} {code}
So if the session still contains the old profile, once deserialised, the 
profileID will always be the old one.

So we have an inconsistency here.

Example:

in ElasticSearch after a merge we can have this:
{code:java}
{
    "profileId": "profileA"
    "profile": {
         "itemId": "profileB"
     }
}{code}
And once loaded in the code the session.profileId will be: profileB.

The merge code should be fixed to avoid such inconsistency and may be we need 
to update that setter that seem's a bit error prone.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to