Add new scopes to security_policy_dismissals

What does this MR do and why?

This adds a new scope to security_policy_dismissals to support filtering for dependencies dismissed by warn-mode policies.

The new scope will be used here.

Query

SELECT DISTINCT
    unnest(license_occurrence_uuids)
FROM
    "security_policy_dismissals"
WHERE
    "security_policy_dismissals"."status" = 1
    AND (license_occurrence_uuids && ARRAY['f174724a-8b42-56e5-8927-8d69ef906d75', 'a28a055c-7074-5ac6-9c4d-ba7d4ead9948', '1f042a22-63c1-5885-9884-7b2caa822a48', 'a80aab63-3bbf-5c1b-85f1-96ffe4583232']::text[])

query plan without index

https://postgres.ai/console/gitlab/gitlab-production-main/sessions/45817/commands/140243

query plan with index

https://postgres.ai/console/gitlab/gitlab-production-main/sessions/45817/commands/140245

Migration up

main: == [advisory_lock_connection] object_id: 130440, pg_backend_pid: 47030
main: == 20251125150714 AddLicenseOccurrenceUuidsIndexToSecurityPolicyDismissals: migrating 
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- view_exists?(:postgres_partitions)
main:    -> 0.0915s
main: -- index_exists?(:security_policy_dismissals, :license_occurrence_uuids, {:using=>:gin, :name=>"idx_security_policy_dismissals_license_occurrence_uuids", :where=>"status = 1", :algorithm=>:concurrently})
main:    -> 0.0083s
main: -- execute("SET statement_timeout TO 0")
main:    -> 0.0006s
main: -- add_index(:security_policy_dismissals, :license_occurrence_uuids, {:using=>:gin, :name=>"idx_security_policy_dismissals_license_occurrence_uuids", :where=>"status = 1", :algorithm=>:concurrently})
main:    -> 0.0116s
main: -- execute("RESET statement_timeout")
main:    -> 0.0007s
main: == 20251125150714 AddLicenseOccurrenceUuidsIndexToSecurityPolicyDismissals: migrated (0.2115s) 

Migration down

main: == [advisory_lock_connection] object_id: 130660, pg_backend_pid: 54980
main: == 20251125150714 AddLicenseOccurrenceUuidsIndexToSecurityPolicyDismissals: reverting 
main: -- transaction_open?(nil)
main:    -> 0.0000s
main: -- view_exists?(:postgres_partitions)
main:    -> 0.0530s
main: -- index_exists?(:security_policy_dismissals, :license_occurrence_uuids, {:name=>"idx_security_policy_dismissals_license_occurrence_uuids", :algorithm=>:concurrently})
main:    -> 0.0064s
main: -- execute("SET statement_timeout TO 0")
main:    -> 0.0010s
main: -- remove_index(:security_policy_dismissals, {:name=>"idx_security_policy_dismissals_license_occurrence_uuids", :algorithm=>:concurrently, :column=>:license_occurrence_uuids})
main:    -> 0.0095s
main: -- execute("RESET statement_timeout")
main:    -> 0.0007s
main: == 20251125150714 AddLicenseOccurrenceUuidsIndexToSecurityPolicyDismissals: reverted (0.1268s) 

main: == [advisory_lock_connection] object_id: 130660, pg_backend_pid: 54980

References

Related to: #580545 (closed)

MR acceptance checklist

Evaluate this MR against the MR acceptance checklist. It helps you analyze changes to reduce risks in quality, performance, reliability, security, and maintainability.

Edited by Marcos Rocha

Merge request reports

Loading