Feature #18621
Updated by Peter Amstutz 6 months ago
Deleting past versions should leave a record in the audit trail.
Would like to be able to provide a filter that describes past versions that should be pruned.
I think the interface would end up being very similar to the bulk trash API (#20972), where it deletes a page of things at a time.
This would probably have a distinct endpoint as the behavior will be a bit different.
There's a couple ways to approach this: one would be to set @trash_at@ and @delete_at@ on the past versions and have the normal cleanup process actually delete the rows. The main issue is that when certain changes happen on the head version, it updates @trash_at@ and @delete_at@ in all the past versions in @sync_past_versions@. So we would need to decide what we want the behavior to be in that situation.
The other option is to just delete the rows immediately.
From discussion:
* admin only
* Purges up to @limit@ items (one request page at a time) and returns the items that were deleted as a list result
** manifest_text is excluded from result unless "select" is used
** supports "limit" and "order" (just like a list request)
** should support a "dry_run" option that returns the list of things that would be purged without actually purging them
* Row are deleted immediately
* Adds a "delete event" to the logs table for each row that is deleted
h2. Detailed design
endpoint: /arvados/v1/collections/purge
User accessing the endpoint must be admin, otherwise returns 403.
h3. Methods
*purge*
HTTP POST with query parameters (in the URL or body, as supported by every other endpoint).
All other methods (GET etc) are not supported. Any paths under the endpoint return 404.
POST with no parameters yields an error.
|Argument|Type|Description|
|limit|integer|optional, same as other API methods|
|offset|integer|optional, same as other API methods|
|order|array|optional, same as other API methods|
|select|array|optional, same as other API methods|
|count|string|optional, same as other API methods|
|filters|array|required, same as other API methods|
|dry_run|boolean|optional, if true, returns the items that would be purged but don't actually delete them|
* Only matches collections where @uuid != current_version_uuid@ in addition to filters
* Purges and returns up to "limit" items, only items returned are actually purged, unless dry_run is true
* Returns collection objects that were purged in "items" same as other list APIs, these are deleted from the collections table entirely and won't be returned again, unless dry_run is true
* Can use @count=exact@ and @dry_run=true@ to see how many items would be purged without actually purging them.