remotely-save/docs/sync_algorithm/v3/design.md
2024-02-25 23:39:31 +08:00

1.9 KiB

Sync Algorithm V3

Drafted on 20240117.

An absolutely better sync algorithm. Better for tracking deletions and better for subbranching.

Huge Thanks

Basically a combination of algorithm v2 + synclone + rsinc + (some of rclone bisync). All of the later three are released under MIT License so no worries about the licenses.

Features

Must have

  1. true deletion detection
  2. deletion protection (blocking) with a setting
  3. transaction from the old algorithm
  4. user warning show up, new algorithm needs all clients to be updated! (deliberately corrput the metadata file??)
  5. filters
  6. conflict warning
  7. partial sync

Nice to have

  1. true time and hash
  2. conflict rename

Description

We have five input sources:

  1. local all files
  2. remote all files
  3. local previous succeeded sync history
  4. local deletions
  5. remote deletions.

Init run, consuming remote deletions :

TBD

Later runs, use the first, second, third sources only.

Table modified based on synclone and rsinc. The number inside the table cell is the decision branch in the code.

local\remote remote unchanged remote modified remote deleted remote created
local unchanged (02/21) do nothing (09) pull remote (07) delete local (??) conflict
local modified (10) push local (16/17/18/19/20) conflict (08) push local (??) conflict
local deleted (04) delete remote (05) pull (01) clean history (03) pull remote
local created (??) conflict (??) conflict (06) push local (11/12/13/14/15) conflict