...
- Update-update
Occurs when the same object was updated at more than one node. - Update-delete
Occurs if a row was updated at one node, but the same row was deleted at another node. - Delete-delete
Occurs when a row was deleted from more than one node.
...
Conflict Detection
We need add a new table row in a database of each instance to store hash codes of objects pulled from this instance's Parent sync_parent_object_hashcode table for each object pulled from its Parent instance. We keep only the most current hash code of each object.
PULL:
- At first, when we pull an object from Parent to Child instance (where it does not exist yet):
- calculate hash code of an object pulled from Parent,
- look for an object on Child instance with UUID of pulled object,
- such object on Child instance does not exist, so object is created on Child instance,
- object's hash code is saved in Child's database as the latest version of this object on Parent instance,
- there is NO conflict.
- Object is NOT modified on Parent instance.
- When we pull the same object from Parent the second time (this object already exist on Child instance):
- calculate hash code of an object pulled from Parent,
- look for an object on Child instance with UUID of pulled object,
- such object on Child instance exists, so compare calculated hash code with a hash code that is saved in Child's database,
- they are equal, which means that object on Child instance is up to date with corresponding object on Parent instance,
- there is NO conflict.
- Object is modified both on Parent and/or Child instance.
- When we pull the same object from Parent the third time (this object already exist on Child instance):
- calculate hash code of an object pulled from Parent,
- look for an object on Child instance with UUID of pulled object,
- such object on Child instance exists, so compare calculated hash code with a hash code that is saved in Child's database,
- they are NOT equal, which means that object on Child instance is NOT up to date with corresponding object on Parent instance
- there is a conflict, which is resolved using rule rule ConflictResolution.RULE 1
PUSH:
- At first, when we push an object from Child to Parent instance (where it does not exist yet):
- In SyncPushServiceImpl class during execution of readAndPushObjectToParent method we call shouldPushObject method, where we pull corresponding object from Parent instance,
- this object does not exist on Parent instance yet, shouldPushObject returns true,
- object is pushed to Parent,
- object's hash code is saved in Child's database as the latest version of this object on Parent instance.
- Object is modified on Child instance.
- When we push this object from Child to Parent instance (where it already exists):
- In SyncPushServiceImpl class during execution of readAndPushObjectToParent method we call shouldPushObject method, where we pull corresponding object from Parent instance,
- this object already exists on Parent instance,
- calculate hash code of an object pulled from Parent,
- compare calculated hash code with a hash code that is saved in Child's database,
- they are equal, which means that Child modified the latest version of object on Parent instance,
- object is pushed to Parent,
- object's hash code is updated in Child's database as the last version of this object.
- Object is modified both on Parent and/or Child instance.
- When we push this object from Child to Parent instance (where it already exists):
- In SyncPushServiceImpl class during execution of readAndPushObjectToParent method we call shouldPushObject method, where we pull corresponding object from Parent instance,
- this object already exists on Parent instance,
- calculate hash code of an object pulled from Parent,
- compare calculated hash code with a hash code that is saved in Child's database,
- they are NOT equal, which means that object on Child instance is NOT up to date with corresponding object on Parent instance (someone modified this object on Parent instance),
- there is a conflict, which is resolved using rule RULE 2.
...