Skip to content

Nullify keys for ssh signatures on delete

What does this MR do and why?

Related issue (note): #382984 (comment 1229191963)

Currently, the ssh signatures get deleted when an SSH key is removed. This commit nullifies the key-id instead.

With this MR, the behavior is similar to the one we have with GPG signatures: https://gitlab.com/gitlab-org/gitlab/blob/fd268aa1e4fb1ae14149df30a8a3f4478c1214c9/db/structure.sql#L34287-34288

main: == 20230106124332 ChangeKeysRelationToSshSignatures: migrating ================
main: -- transaction_open?()
main:    -> 0.0000s
main: -- foreign_keys(:ssh_signatures)
main:    -> 0.0937s
main: -- transaction_open?()
main:    -> 0.0000s
main: -- execute("ALTER TABLE ssh_signatures\nADD CONSTRAINT fk_aa1efbe865\nFOREIGN KEY (key_id)\nREFERENCES keys (id)\nON DELETE SET NULL\nNOT VALID;\n")
main:    -> 0.0071s
main: -- execute("SET statement_timeout TO 0")
main:    -> 0.0001s
main: -- execute("ALTER TABLE ssh_signatures VALIDATE CONSTRAINT fk_aa1efbe865;")
main:    -> 0.0037s
main: -- execute("RESET statement_timeout")
main:    -> 0.0003s
main: -- transaction_open?()
main:    -> 0.0000s
main: -- foreign_keys(:ssh_signatures)
main:    -> 0.0018s
main: -- remove_foreign_key(:ssh_signatures, {:column=>:key_id, :name=>"fk_f177ea6aa5"})
main:    -> 0.0037s
main: == 20230106124332 ChangeKeysRelationToSshSignatures: migrated (0.1250s) =======

ci: == 20230106124332 ChangeKeysRelationToSshSignatures: migrating ================
ci: -- transaction_open?()
ci:    -> 0.0000s
ci: -- foreign_keys(:ssh_signatures)
ci:    -> 0.0071s
ci: -- transaction_open?()
ci:    -> 0.0000s
ci: -- execute("ALTER TABLE ssh_signatures\nADD CONSTRAINT fk_aa1efbe865\nFOREIGN KEY (key_id)\nREFERENCES keys (id)\nON DELETE SET NULL\nNOT VALID;\n")
ci:    -> 0.0077s
ci: -- execute("SET statement_timeout TO 0")
ci:    -> 0.0005s
ci: -- execute("ALTER TABLE ssh_signatures VALIDATE CONSTRAINT fk_aa1efbe865;")
ci:    -> 0.0062s
ci: -- execute("RESET statement_timeout")
ci:    -> 0.0006s
ci: -- transaction_open?()
ci:    -> 0.0000s
ci: -- foreign_keys(:ssh_signatures)
ci:    -> 0.0025s
ci: -- remove_foreign_key(:ssh_signatures, {:column=>:key_id, :name=>"fk_f177ea6aa5"})
ci:    -> 0.0047s
ci: == 20230106124332 ChangeKeysRelationToSshSignatures: migrated (0.0427s) =======

Merge request reports