Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • 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:

  1. At first, when we pull an object from Parent to Child instance (where it does not exist yet):
    1. calculate hash code of an object pulled from Parent,
    2. look for an object on Child instance with UUID of pulled object,
    3. such object on Child instance does not exist, so object is created on Child instance,
    4. object's hash code is saved in Child's database as the latest version of this object on Parent instance,
    5. there is NO conflict.
  2. Object is NOT modified on Parent instance.
  3. When we pull the same object from Parent the second time (this object already exist on Child instance):
    1. calculate hash code of an object pulled from Parent,
    2. look for an object on Child instance with UUID of pulled object,
    3. such object on Child instance exists, so compare calculated hash code with a hash code that is saved in Child's database,
    4. they are equal, which means that object on Child instance is up to date with corresponding object on Parent instance,
    5. there is NO conflict.
  4. Object is modified both on Parent and/or Child instance.
  5. When we pull the same object from Parent the third time (this object already exist on Child instance):
    1. calculate hash code of an object pulled from Parent,
    2. look for an object on Child instance with UUID of pulled object,
    3. such object on Child instance exists, so compare calculated hash code with a hash code that is saved in Child's database,
    4. they are NOT equal, which means that object on Child instance is NOT up to date with corresponding object on Parent instance
    5. there is a conflict, which is resolved using rule rule ConflictResolution.RULE 1

PUSH:

  1. At first, when we push an object from Child to Parent instance (where it does not exist yet):
    1. In SyncPushServiceImpl class during execution of readAndPushObjectToParent method we call shouldPushObject method, where we pull corresponding object from Parent instance,
    2. this object does not exist on Parent instance yet, shouldPushObject returns true,
    3. object is pushed to Parent,
    4. object's hash code is saved in Child's database as the latest version of this object on Parent instance.
  2. Object is modified on Child instance.
  3. When we push this object from Child to Parent instance (where it already exists):
    1. In SyncPushServiceImpl class during execution of readAndPushObjectToParent method we call shouldPushObject method, where we pull corresponding object from Parent instance,
    2. this object already exists on Parent instance,
    3. calculate hash code of an object pulled from Parent,
    4. compare calculated hash code with a hash code that is saved in Child's database,
    5. they are equal, which means that Child modified the latest version of object on Parent instance,
    6. object is pushed to Parent,
    7. object's hash code is updated in Child's database as the last version of this object.
  4. Object is modified both on Parent and/or Child instance.
  5. When we push this object from Child to Parent instance (where it already exists):
    1. In SyncPushServiceImpl class during execution of readAndPushObjectToParent method we call shouldPushObject method, where we pull corresponding object from Parent instance,
    2. this object already exists on Parent instance,
    3. calculate hash code of an object pulled from Parent,
    4. compare calculated hash code with a hash code that is saved in Child's database,
    5. 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),
    6. there is a conflict, which is resolved using rule RULE 2.

...