...
The conflict is detected when #lastP != NULL && (( #lastP != #P ) || (&& #lastP != #C)).
Note! We have added a new row in a database sync_parent_object_hashcode table for each object pulled from its Parent instance. We keep only the most current hash code of each object.
...
Conflict resolution can be handled automatically or manually. After the conflict is detected it is passed to object/service which implements MergeBehaviour interface. The MergeBehaviour class defines a strategy of dealing with conflicts automatically. (In fact, you can add your own implementation. All hints can be found here.) All unresolved conflicts will be saved in order to be solved by the users.
...
1) RestrictConflictMergeBehaviourImpl (link) - "sync2.restrictConflictMergeBehaviour"
This is the default strategy which using hash codes check if the both objects were changed then create unresolved conflict in order to be solved by the users. If only one object changed then it will be choose as a newest version.
2) NewIsTheBestMergeBehaviourImpl (link) - "sync2.newIsTheBestMergeBehaviour"
In this strategy used the date of changed to determine the newest version. If the object hasn't the date of change then the strategy will chose the source object.
...