Skip to content

Associates Ml::Candidate to Ml::ModelVersion

Eduardo Bonet requested to merge model_registry/model_version_candidate into master

What does this MR do and why?

Creates a candidate for every model version, and adds a field to Ml::Candidate for the association

Database

Migration:

main: == [advisory_lock_connection] object_id: 180020, pg_backend_pid: 6426
main: == 20231023114006 AddIndexOnModelVersionIdToMlCandidates: migrating ===========
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- view_exists?(:postgres_partitions)
main:    -> 0.0870s
main: -- index_exists?(:ml_candidates, :model_version_id, {:name=>"index_ml_candidates_on_model_version_id", :algorithm=>:concurrently})
main:    -> 0.0039s
main: -- execute("SET statement_timeout TO 0")
main:    -> 0.0002s
main: -- add_index(:ml_candidates, :model_version_id, {:name=>"index_ml_candidates_on_model_version_id", :algorithm=>:concurrently})
main:    -> 0.0034s
main: -- execute("RESET statement_timeout")
main:    -> 0.0003s
main: == 20231023114006 AddIndexOnModelVersionIdToMlCandidates: migrated (0.1112s) ==

main: == [advisory_lock_connection] object_id: 180020, pg_backend_pid: 6426
ci: == [advisory_lock_connection] object_id: 180260, pg_backend_pid: 6429
ci: == 20231023114006 AddIndexOnModelVersionIdToMlCandidates: migrating ===========
ci: -- transaction_open?(nil)
ci:    -> 0.0000s
ci: -- view_exists?(:postgres_partitions)
ci:    -> 0.0006s
ci: -- index_exists?(:ml_candidates, :model_version_id, {:name=>"index_ml_candidates_on_model_version_id", :algorithm=>:concurrently})
ci:    -> 0.0042s
ci: -- Index not created because it already exists (this may be due to an aborted migration or similar): table_name: ml_candidates, column_name: model_version_id
ci: == 20231023114006 AddIndexOnModelVersionIdToMlCandidates: migrated (0.0229s) ==

ci: == [advisory_lock_connection] object_id: 180260, pg_backend_pid: 6429
main: == [advisory_lock_connection] object_id: 180440, pg_backend_pid: 6432
main: == 20231023114551 AddFkOnMlCandidatesToMlModelVersions: migrating =============
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- execute("ALTER TABLE ml_candidates ADD CONSTRAINT fk_e86e0bfa5a FOREIGN KEY (model_version_id) REFERENCES ml_model_versions (id) ON DELETE CASCADE NOT VALID;")
main:    -> 0.0021s
main: -- execute("SET statement_timeout TO 0")
main:    -> 0.0003s
main: -- execute("ALTER TABLE ml_candidates VALIDATE CONSTRAINT fk_e86e0bfa5a;")
main:    -> 0.0028s
main: -- execute("RESET statement_timeout")
main:    -> 0.0004s
main: == 20231023114551 AddFkOnMlCandidatesToMlModelVersions: migrated (0.0388s) ====

main: == [advisory_lock_connection] object_id: 180440, pg_backend_pid: 6432
ci: == [advisory_lock_connection] object_id: 180660, pg_backend_pid: 6434
ci: == 20231023114551 AddFkOnMlCandidatesToMlModelVersions: migrating =============
ci: -- transaction_open?(nil)
ci:    -> 0.0000s
ci: -- transaction_open?(nil)
ci:    -> 0.0000s
ci: -- execute("ALTER TABLE ml_candidates ADD CONSTRAINT fk_e86e0bfa5a FOREIGN KEY (model_version_id) REFERENCES ml_model_versions (id) ON DELETE CASCADE NOT VALID;")
ci:    -> 0.0016s
ci: -- execute("SET statement_timeout TO 0")
ci:    -> 0.0002s
ci: -- execute("ALTER TABLE ml_candidates VALIDATE CONSTRAINT fk_e86e0bfa5a;")
ci:    -> 0.0025s
ci: -- execute("RESET statement_timeout")
ci:    -> 0.0003s
ci: == 20231023114551 AddFkOnMlCandidatesToMlModelVersions: migrated (0.0283s) ====

ci: == [advisory_lock_connection] object_id: 180660, pg_backend_pid: 6434

Rollback

main: == [advisory_lock_connection] object_id: 179620, pg_backend_pid: 7182
main: == 20231023114551 AddFkOnMlCandidatesToMlModelVersions: reverting =============
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: == 20231023114551 AddFkOnMlCandidatesToMlModelVersions: reverted (0.1462s) ====

main: == 20231023114006 AddIndexOnModelVersionIdToMlCandidates: reverting ===========
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- view_exists?(:postgres_partitions)
main:    -> 0.0006s
main: -- indexes(:ml_candidates)
main:    -> 0.0044s
main: -- execute("SET statement_timeout TO 0")
main:    -> 0.0002s
main: -- remove_index(:ml_candidates, {:algorithm=>:concurrently, :name=>"index_ml_candidates_on_model_version_id"})
main:    -> 0.0011s
main: -- execute("RESET statement_timeout")
main:    -> 0.0004s
main: == 20231023114006 AddIndexOnModelVersionIdToMlCandidates: reverted (0.0193s) ==

main: == 20231020112541 AddColumnModelVersionIdToMlCandidates: reverting ============
main: -- remove_column(:ml_candidates, :model_version_id, :bigint, {:null=>true})
main:    -> 0.0008s
main: == 20231020112541 AddColumnModelVersionIdToMlCandidates: reverted (0.0061s) ===

main: == [advisory_lock_connection] object_id: 179620, pg_backend_pid: 7182

How to set up and validate locally

Numbered steps to set up and validate the change are strongly suggested.

MR acceptance checklist

This checklist encourages us to confirm any changes have been analyzed to reduce risks in quality, performance, reliability, security, and maintainability.

Edited by Eduardo Bonet

Merge request reports