Skip to content

Merge ValidateModelVersion into (Partial)UpdateModelVersion

https://redmine.teklia.com/issues/6994

Sentry Issue: ARKINDEX-BACKEND-1YN

KeyError: 'request'
(5 additional frame(s) were not displayed)
...
  File "arkindex/training/api.py", line 347, in post
  File "arkindex/training/serializers.py", line 218, in __init__

ValidateModelVersion has never been able to return a success response ever since it was implemented. Instead of fixing it, we can replace it by making the hash, archive_hash, size and state fields available in (Partial)UpdateModelVersion.

When setting hash, if a version with that hash already exists in the database, an HTTP 400 error should occur with the id of the existing element, as we already do in other endpoints like with worker configurations, and not an HTTP 409.

The state can only be updated from created to available. When this update occurs, the archive_hash and size are checked against S3 with ModelVersion.perform_check() and ModelVersion.check_hash(). If those fail, an HTTP 400 error occurs.

Any other state transition is forbidden, and also results in an HTTP 400, not an HTTP 403.

When a ModelVersion is archived, updating the hash, archive_hash, size or state should cause HTTP 400 errors. We cannot forbid updates at all, since that would otherwise prevent a ModelVersion from being unarchived.

If it is more complicated to only have those fields available in updates than having them in both creation and updates, then just make them available on creation, with the same checks.