Changes between Initial Version and Version 1 of SyncingInstances


Ignore:
Timestamp:
02/08/10 17:22:11 (4 years ago)
Author:
dread
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SyncingInstances

    v1 v1  
     1= Syncing = 
     2 
     3== Scenarios == 
     4 
     5 * 1-way: On setup, Server A's packages are copied to Server B. On sync, changes to packages on Server A are transferred to Server B. 
     6 
     7 * 2-way: On setup, packages from each server is copied to the other. On sync, changes on each are transferred to the other. 
     8 
     9We will focus now on 1-way. 
     10 
     11== Requirements == 
     12 
     13Merging of changes from both machines. If there is a conflict then it is logged and a result is chosen. 
     14 
     15== Use cases == 
     16 
     17 * First sync - all packages and revisions are copied from Server A to Server B. 
     18 
     19 * Subsequent sync after package changes on A and/or B. 
     20 
     21 * Sync after package purged on A. (Package also purged on B.) 
     22 
     23 * Sync after package purged on B. (Package not recreated on B.) 
     24 
     25 * Sync between CKAN instances of different versions of ckan & vdm. 
     26 
     27 * Server B syncs at different times from Server C. 
     28 
     29 * Package/Tag/Group name on Server A clashes with an existing one on Server B. Log all of them. Merge tag and group. Not sure about package. 
     30 
     31 * Use of Server A and Server B continues undisturbed during sync. 
     32 
     33 * Objects on Server A with restricted authz are by default editable on Server B. 
     34 
     35== Issues == 
     36 
     37 * Unversioned objects - make versioned? User, Group, Authz, Rating. 
     38 
     39 * How to test system. 
     40 
     41 * Clashes of package names. 
     42 
     43== Operation == 
     44 
     45=== First sync - 10am === 
     46 
     47Server B asks "Give me all your revisions and unrevisioned objects." 
     48 
     49Server A replies "Rev1 and associated revisions Pkg1Rev1, Pkg2Rev1, !PkgTagRev1, !PkgResource1; Rev2 with Pkg1Rev2; Tag1; User1; !PackageGroup1; Group1; ratings" 
     50 
     51Server B creates Rev1, Pkg1Rev1, Pkg2Rev1, Pkg1Rev2, Pkg1, Pkg2, !PkgTagRev1, !PkgResource1, Tag1, User1, Auth, !PackageGroup1, Group1. UUIDs are the same as Server A. 
     52 
     53Server B updates search vectors for Pkg1 and Pkg2. 
     54 
     55Server records the time of the sync - 10am. 
     56 
     57=== Meanwhile - 10.20am === 
     58 
     59On Server A, user updates Pkg1 twice, creating Rev2/Pkg1Rev3 and Rev3/Pkg1Rev4PkgTagRev2. User1 updates his name. 
     60 
     61=== Meanwhile - 10.40am === 
     62 
     63On Server B, user updates Pkg1 once, creating Pkg1Rev5. 
     64 
     65=== Sesequent sync === 
     66 
     67Server B asks "Give me revisions and diffs since 10am." 
     68 
     69Server A replies Rev2/Pkg1Rev3, Rev3/Pkg1Rev4 and gives diff of Pkg1Rev2 -> Pkg1Rev4 
     70 
     71Server B looks at its own revisions since 10am and sees Pkg1 now has two heads. It calculates diff of Pkg1Rev2 -> Pkg1Rev5. 
     72 
     73Server B takes Pkg1Rev2 and applies the two diffs in the order of priority, logging any conflicts, calling the result Pkg1Rev6. 
     74 
     75== Tickets == 
     76 
     77 * Repository method 'all_revs_since'. It returns all revisions since a time/revision (or since the beginning). 
     78 
     79 * Object method 'diff'. It returns a Diff object which is the diff of two !ObjectResources. Already exists for Package, but need for !PackageTag, !PackageExtra 
     80 
     81 * Revision method 'serialize'. 
     82 
     83 * Diff method 'serialize'. 
     84 
     85 * API access to revisions: /api/rest/revision?since=ab49f348-fd23-ae3c 
     86 
     87 * API access to diffs: /api/ 
     88 
     89 * Repository method 'import_revisions'. It takes serialised revisions and diffs and creates  
     90 
     91 * Object method 'merge_diffs'. It takes an original object and two diffs that apply to it and applies them both in a new revision.