Project

General

Profile

Collection version history » History » Version 7

Peter Amstutz, 08/01/2018 05:37 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 2 Tom Clegg
Implementation
11 1 Tom Clegg
* Store all versions in the collection table (much easier to do paging)
12 7 Peter Amstutz
* New database column "current_version_uuid" for latest version this the same as "uuid"
13 2 Tom Clegg
* New database column indicates user-friendly version number (starting at 1) -- can be assigned safely after locking "current" row for update
14 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
15 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)
16 2 Tom Clegg
* Flag in site configuration to enable preserving old versions in database
17 7 Peter Amstutz
* Update owner_uuid of all old versions (in a transaction) when it changes in the current version
18 1 Tom Clegg
* A permission link to the current version implies permission to its entire history
19 7 Peter Amstutz
* 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)
20
* 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
21 1 Tom Clegg
* Old versions with duplicate "name" does not conflict with (owner_uuid, name) uniqueness constraint
22 7 Peter Amstutz
* The following changes introduce a new version: manifest_text, description, properties.
23
24
Questions:
25
26
* Should any other field changes introduce a new version, such as changing "name"
27
* Are desired_replication_count and desired_storage_class separate for each version?  Feature to  automatically put old versions into a certain storage class?