Collection version history » History » Version 9
Peter Amstutz, 08/02/2018 03:43 PM
1 | 1 | Tom Clegg | h1. Collection version history |
---|---|---|---|
2 | |||
3 | (draft) |
||
4 | |||
5 | 7 | Peter Amstutz | Background: desired API features (#13494, #13561) epic ticket is #13109 |
6 | 1 | Tom Clegg | * Get current + previous versions of a collection with a single API call |
7 | * Search all current + previous versions of collections with a single API call |
||
8 | * Stable small numeric "version number" for each version of a given collection |
||
9 | |||
10 | 8 | Peter Amstutz | h2. Design |
11 | |||
12 | 1 | Tom Clegg | * Store all versions in the collection table (much easier to do paging) |
13 | 7 | Peter Amstutz | * New database column "current_version_uuid" for latest version this the same as "uuid" |
14 | 2 | Tom Clegg | * New database column indicates user-friendly version number (starting at 1) -- can be assigned safely after locking "current" row for update |
15 | 3 | Tom Clegg | * Assign version number to the current version -- this way {uuid,version} can be used as a permanent reference to a specific version |
16 | 5 | Peter Amstutz | * Flag "include_past_versions" for "list" API to include old versions (otherwise, filter on current_version_uuid=uuid -- might need to adjust indexes to maintain performance) |
17 | 1 | Tom Clegg | * Flag in site configuration to enable preserving old versions in database |
18 | 7 | Peter Amstutz | * Update owner_uuid of all old versions (in a transaction) when it changes in the current version |
19 | 8 | Peter Amstutz | * A permission link to the current version only implies permission to the most recent version (not the history) |
20 | 1 | Tom Clegg | * Prohibit permission links to old versions (should be handled by check "can only make links to things that are visible to you", which should not include old versions) |
21 | * Old versions may not be modified except for certain fields which must be synchronized with "current" version changes (owner_uuid, trash_at, delete_at). Updating owner_uuid, trash_at, delete_at does not update modified_at so modified_at shows when the version was created |
||
22 | * Old versions with duplicate "name" does not conflict with (owner_uuid, name) uniqueness constraint |
||
23 | 8 | Peter Amstutz | * The following changes introduce a new version: manifest_text (portable_data_hash), description, properties, name, |
24 | * The following changes do not introduce a new version, and a copied to all past version records: replication_*, storage_classes_*, trash_at/delete_at/is_trashed, owner_uuid, uuid (update current_uuid to retain database consistency) |
||
25 | 7 | Peter Amstutz | |
26 | 8 | Peter Amstutz | h2. Implementation |
27 | 7 | Peter Amstutz | |
28 | 9 | Peter Amstutz | * Implement "Collection update" in arvados-controller (Go) |
29 | ** Intercept update operations only (PATCH, POST _method=PATCH?) |
||
30 | ** Check valid manifest |
||
31 | ** Check valid signatures |
||
32 | ** Strip signatures |
||
33 | ** Check/update PDH |
||
34 | ** Update file_names |
||
35 | ** Copy old version to new PDH |
||
36 | ** Update version number |
||
37 | ** Write record |
||
38 | ** Return record (this means GET effectively has to be implemented as well?) |
||
39 | * Configuration option to enable/disable "update" on arvados-controller and reeanble on API server as fallback |