From bdebec6cc8c4c3ca3946e780b8b735f776cd02fa Mon Sep 17 00:00:00 2001
From: Brian Williams <bwilliams@gitlab.com>
Date: Thu, 24 Oct 2024 15:17:08 +0000
Subject: [PATCH] Remove `vulnerability_occurrence_pipelines` table and code

This table is excessively large because it is a many-to-many
relationship between vulnerability findings and ci pipelines. We've
removed all usages of this table from the application, so it can now be
dropped and all code associated with it can be deleted.

Changelog: removed
EE: true
---
 .rubocop_todo/gitlab/strong_memoize_attr.yml  |   1 -
 .rubocop_todo/layout/line_length.yml          |   3 -
 .../lint/redundant_cop_disable_directive.yml  |   1 -
 .../migration/background_migration_record.yml |   1 -
 .../batched_migration_base_class.yml          |   1 -
 .rubocop_todo/rspec/context_wording.yml       |   1 -
 .../style/inline_disable_annotation.yml       |   1 -
 .rubocop_todo/style/string_concatenation.yml  |   1 -
 config/gitlab_loose_foreign_keys.yml          |   4 -
 ...bility_occurrence_pipelines_project_id.yml |   8 -
 .../vulnerability_occurrence_pipelines.yml    |  12 +
 .../vulnerability_occurrence_pipelines.yml    |  20 --
 db/gitlab_schemas/gitlab_sec.yaml             |   3 -
 ...ability_occurrence_pipelines_project_id.rb |  16 +-
 ...ability_occurrence_pipelines_project_id.rb |  26 ++
 ...drop_vulnerability_occurrence_pipelines.rb |  47 +++
 db/schema_migrations/20241022181600           |   1 +
 db/schema_migrations/20241022181639           |   1 +
 db/structure.sql                              |  50 ---
 ee/app/models/vulnerabilities/finding.rb      |   2 -
 .../vulnerabilities/finding_pipeline.rb       |  20 --
 ...ulate_resolved_on_default_branch_column.rb | 338 ------------------
 .../gitlab/ingestion/bulk_insertable_task.rb  |   1 -
 .../vulnerabilities/finding_pipelines.rb      |   8 -
 .../vulnerabilities/finding_pipeline_spec.rb  |  25 --
 .../models/vulnerabilities/finding_spec.rb    |   1 -
 .../remove_from_project_service_spec.rb       |   1 -
 ...ability_occurrence_pipelines_project_id.rb |  10 -
 ...ulate_resolved_on_default_branch_column.rb |  12 -
 rubocop/rubocop-migrations.yml                |   1 -
 spec/db/schema_spec.rb                        |   1 -
 ...ty_occurrence_pipelines_project_id_spec.rb |  15 -
 spec/lib/gitlab/import_export/all_models.yml  |   1 -
 ...ty_occurrence_pipelines_project_id_spec.rb |  17 +-
 spec/support/rspec_order_todo.yml             |   1 -
 35 files changed, 90 insertions(+), 562 deletions(-)
 delete mode 100644 db/docs/batched_background_migrations/backfill_vulnerability_occurrence_pipelines_project_id.yml
 create mode 100644 db/docs/deleted_tables/vulnerability_occurrence_pipelines.yml
 delete mode 100644 db/docs/vulnerability_occurrence_pipelines.yml
 create mode 100644 db/post_migrate/20241022181600_remove_backfill_vulnerability_occurrence_pipelines_project_id.rb
 create mode 100644 db/post_migrate/20241022181639_drop_vulnerability_occurrence_pipelines.rb
 create mode 100644 db/schema_migrations/20241022181600
 create mode 100644 db/schema_migrations/20241022181639
 delete mode 100644 ee/app/models/vulnerabilities/finding_pipeline.rb
 delete mode 100644 ee/lib/ee/gitlab/background_migration/populate_resolved_on_default_branch_column.rb
 delete mode 100644 ee/spec/factories/vulnerabilities/finding_pipelines.rb
 delete mode 100644 ee/spec/models/vulnerabilities/finding_pipeline_spec.rb
 delete mode 100644 lib/gitlab/background_migration/backfill_vulnerability_occurrence_pipelines_project_id.rb
 delete mode 100644 lib/gitlab/background_migration/populate_resolved_on_default_branch_column.rb
 delete mode 100644 spec/lib/gitlab/background_migration/backfill_vulnerability_occurrence_pipelines_project_id_spec.rb

diff --git a/.rubocop_todo/gitlab/strong_memoize_attr.yml b/.rubocop_todo/gitlab/strong_memoize_attr.yml
index 181b18807de6b..8cf4cf5655d85 100644
--- a/.rubocop_todo/gitlab/strong_memoize_attr.yml
+++ b/.rubocop_todo/gitlab/strong_memoize_attr.yml
@@ -366,7 +366,6 @@ Gitlab/StrongMemoizeAttr:
     - 'ee/lib/ee/gitlab/analytics/cycle_analytics/stage_events.rb'
     - 'ee/lib/ee/gitlab/auth/o_auth/auth_hash.rb'
     - 'ee/lib/ee/gitlab/background_migration/migrate_approver_to_approval_rules.rb'
-    - 'ee/lib/ee/gitlab/background_migration/populate_resolved_on_default_branch_column.rb'
     - 'ee/lib/ee/gitlab/checks/base_checker.rb'
     - 'ee/lib/ee/gitlab/checks/diff_check.rb'
     - 'ee/lib/ee/gitlab/ci/matching/runner_matcher.rb'
diff --git a/.rubocop_todo/layout/line_length.yml b/.rubocop_todo/layout/line_length.yml
index bd6418c30a66e..3f1210267cb41 100644
--- a/.rubocop_todo/layout/line_length.yml
+++ b/.rubocop_todo/layout/line_length.yml
@@ -820,7 +820,6 @@ Layout/LineLength:
     - 'ee/app/models/vulnerabilities/finding.rb'
     - 'ee/app/models/vulnerabilities/finding_identifier.rb'
     - 'ee/app/models/vulnerabilities/finding_link.rb'
-    - 'ee/app/models/vulnerabilities/finding_pipeline.rb'
     - 'ee/app/models/vulnerabilities/finding_remediation.rb'
     - 'ee/app/models/vulnerabilities/flag.rb'
     - 'ee/app/models/vulnerabilities/historical_statistic.rb'
@@ -1056,7 +1055,6 @@ Layout/LineLength:
     - 'ee/lib/ee/gitlab/background_migration/create_security_setting.rb'
     - 'ee/lib/ee/gitlab/background_migration/migrate_approver_to_approval_rules.rb'
     - 'ee/lib/ee/gitlab/background_migration/populate_latest_pipeline_ids.rb'
-    - 'ee/lib/ee/gitlab/background_migration/populate_resolved_on_default_branch_column.rb'
     - 'ee/lib/ee/gitlab/checks/push_rules/commit_check.rb'
     - 'ee/lib/ee/gitlab/checks/push_rules/file_size_check.rb'
     - 'ee/lib/ee/gitlab/ci/pipeline/chain/create_cross_database_associations.rb'
@@ -2281,7 +2279,6 @@ Layout/LineLength:
     - 'lib/gitlab/background_migration/migrate_approver_to_approval_rules_in_batch.rb'
     - 'lib/gitlab/background_migration/migrate_job_artifact_registry_to_ssf.rb'
     - 'lib/gitlab/background_migration/migrate_requirements_to_work_items.rb'
-    - 'lib/gitlab/background_migration/populate_resolved_on_default_branch_column.rb'
     - 'lib/gitlab/background_migration/project_namespaces/backfill_project_namespaces.rb'
     - 'lib/gitlab/bullet/exclusions.rb'
     - 'lib/gitlab/cache/helpers.rb'
diff --git a/.rubocop_todo/lint/redundant_cop_disable_directive.yml b/.rubocop_todo/lint/redundant_cop_disable_directive.yml
index 7b01d9c4ff16b..a9274e7b35fcf 100644
--- a/.rubocop_todo/lint/redundant_cop_disable_directive.yml
+++ b/.rubocop_todo/lint/redundant_cop_disable_directive.yml
@@ -293,7 +293,6 @@ Lint/RedundantCopDisableDirective:
     - 'lib/gitlab/background_migration/migrate_vulnerabilities_feedback_to_vulnerabilities_state_transition.rb'
     - 'lib/gitlab/background_migration/populate_denormalized_columns_for_sbom_occurrences.rb'
     - 'lib/gitlab/background_migration/populate_latest_pipeline_ids.rb'
-    - 'lib/gitlab/background_migration/populate_resolved_on_default_branch_column.rb'
     - 'lib/gitlab/background_migration/populate_vulnerability_dismissal_fields.rb'
     - 'lib/gitlab/background_migration/purge_stale_security_scans.rb'
     - 'lib/gitlab/background_migration/resolve_vulnerabilities_for_removed_analyzers.rb'
diff --git a/.rubocop_todo/migration/background_migration_record.yml b/.rubocop_todo/migration/background_migration_record.yml
index bf8e962dcab3e..af93c19f11f77 100644
--- a/.rubocop_todo/migration/background_migration_record.yml
+++ b/.rubocop_todo/migration/background_migration_record.yml
@@ -7,7 +7,6 @@ Migration/BackgroundMigrationRecord:
     - 'ee/lib/ee/gitlab/background_migration/migrate_approver_to_approval_rules_in_batch.rb'
     - 'ee/lib/ee/gitlab/background_migration/migrate_requirements_to_work_items.rb'
     - 'ee/lib/ee/gitlab/background_migration/populate_latest_pipeline_ids.rb'
-    - 'ee/lib/ee/gitlab/background_migration/populate_resolved_on_default_branch_column.rb'
     - 'lib/gitlab/background_migration/backfill_draft_status_on_merge_requests.rb'
     - 'lib/gitlab/background_migration/backfill_project_repositories.rb'
     - 'lib/gitlab/background_migration/backfill_topics_title.rb'
diff --git a/.rubocop_todo/migration/batched_migration_base_class.yml b/.rubocop_todo/migration/batched_migration_base_class.yml
index 5f3b072c051d1..a674bab35bc9d 100644
--- a/.rubocop_todo/migration/batched_migration_base_class.yml
+++ b/.rubocop_todo/migration/batched_migration_base_class.yml
@@ -26,7 +26,6 @@ Migration/BatchedMigrationBaseClass:
     - 'lib/gitlab/background_migration/migrate_null_private_profile_to_false.rb'
     - 'lib/gitlab/background_migration/migrate_requirements_to_work_items.rb'
     - 'lib/gitlab/background_migration/populate_latest_pipeline_ids.rb'
-    - 'lib/gitlab/background_migration/populate_resolved_on_default_branch_column.rb'
     - 'lib/gitlab/background_migration/project_namespaces/backfill_project_namespaces.rb'
     - 'lib/gitlab/background_migration/project_namespaces/models/namespace.rb'
     - 'lib/gitlab/background_migration/project_namespaces/models/project.rb'
diff --git a/.rubocop_todo/rspec/context_wording.yml b/.rubocop_todo/rspec/context_wording.yml
index a34756df00d5b..74e659e053b0a 100644
--- a/.rubocop_todo/rspec/context_wording.yml
+++ b/.rubocop_todo/rspec/context_wording.yml
@@ -461,7 +461,6 @@ RSpec/ContextWording:
     - 'ee/spec/models/saml_provider_spec.rb'
     - 'ee/spec/models/status_page/project_setting_spec.rb'
     - 'ee/spec/models/vulnerabilities/feedback_spec.rb'
-    - 'ee/spec/models/vulnerabilities/finding_pipeline_spec.rb'
     - 'ee/spec/models/vulnerabilities/finding_spec.rb'
     - 'ee/spec/models/vulnerabilities/statistic_spec.rb'
     - 'ee/spec/policies/app_sec/fuzzing/coverage/corpus_policy_spec.rb'
diff --git a/.rubocop_todo/style/inline_disable_annotation.yml b/.rubocop_todo/style/inline_disable_annotation.yml
index 59323faefec2d..1123966d7a9c3 100644
--- a/.rubocop_todo/style/inline_disable_annotation.yml
+++ b/.rubocop_todo/style/inline_disable_annotation.yml
@@ -2019,7 +2019,6 @@ Style/InlineDisableAnnotation:
     - 'lib/gitlab/background_migration/migrate_shared_vulnerability_scanners.rb'
     - 'lib/gitlab/background_migration/populate_denormalized_columns_for_sbom_occurrences.rb'
     - 'lib/gitlab/background_migration/populate_latest_pipeline_ids.rb'
-    - 'lib/gitlab/background_migration/populate_resolved_on_default_branch_column.rb'
     - 'lib/gitlab/background_migration/populate_vulnerability_dismissal_fields.rb'
     - 'lib/gitlab/background_migration/project_namespaces/backfill_project_namespaces.rb'
     - 'lib/gitlab/background_migration/purge_stale_security_scans.rb'
diff --git a/.rubocop_todo/style/string_concatenation.yml b/.rubocop_todo/style/string_concatenation.yml
index a5ea884b5f687..d84850fcb5d47 100644
--- a/.rubocop_todo/style/string_concatenation.yml
+++ b/.rubocop_todo/style/string_concatenation.yml
@@ -43,7 +43,6 @@ Style/StringConcatenation:
     - 'ee/lib/api/project_mirror.rb'
     - 'ee/lib/ee/gitlab/auth/ldap/person.rb'
     - 'ee/lib/ee/gitlab/background_migration/populate_latest_pipeline_ids.rb'
-    - 'ee/lib/ee/gitlab/background_migration/populate_resolved_on_default_branch_column.rb'
     - 'ee/lib/gitlab/geo/git_ssh_proxy.rb'
     - 'ee/lib/omni_auth/strategies/kerberos.rb'
     - 'ee/lib/tasks/gitlab/license.rake'
diff --git a/config/gitlab_loose_foreign_keys.yml b/config/gitlab_loose_foreign_keys.yml
index fdaf8fcac3b0a..6b7afeb92e8de 100644
--- a/config/gitlab_loose_foreign_keys.yml
+++ b/config/gitlab_loose_foreign_keys.yml
@@ -650,10 +650,6 @@ vulnerability_namespace_historical_statistics:
   - table: namespaces
     column: namespace_id
     on_delete: async_delete
-vulnerability_occurrence_pipelines:
-  - table: ci_pipelines
-    column: pipeline_id
-    on_delete: async_delete
 vulnerability_occurrences:
   - table: ci_pipelines
     column: initial_pipeline_id
diff --git a/db/docs/batched_background_migrations/backfill_vulnerability_occurrence_pipelines_project_id.yml b/db/docs/batched_background_migrations/backfill_vulnerability_occurrence_pipelines_project_id.yml
deleted file mode 100644
index 5e77f5517f3d1..0000000000000
--- a/db/docs/batched_background_migrations/backfill_vulnerability_occurrence_pipelines_project_id.yml
+++ /dev/null
@@ -1,8 +0,0 @@
----
-migration_job_name: BackfillVulnerabilityOccurrencePipelinesProjectId
-description: Backfills sharding key `vulnerability_occurrence_pipelines.project_id` from `vulnerability_occurrences`.
-feature_category: vulnerability_management
-introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/161221
-milestone: '17.3'
-queued_migration_version: 20240730172818
-finalized_by: # version of the migration that finalized this BBM
diff --git a/db/docs/deleted_tables/vulnerability_occurrence_pipelines.yml b/db/docs/deleted_tables/vulnerability_occurrence_pipelines.yml
new file mode 100644
index 0000000000000..b1414c2aa51be
--- /dev/null
+++ b/db/docs/deleted_tables/vulnerability_occurrence_pipelines.yml
@@ -0,0 +1,12 @@
+---
+table_name: vulnerability_occurrence_pipelines
+classes:
+- Vulnerabilities::FindingPipeline
+feature_categories:
+- vulnerability_management
+description: Join table between Findings and Pipelines
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/7578
+milestone: '11.5'
+gitlab_schema: gitlab_sec
+removed_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/170153
+removed_in_milestone: '17.6'
diff --git a/db/docs/vulnerability_occurrence_pipelines.yml b/db/docs/vulnerability_occurrence_pipelines.yml
deleted file mode 100644
index 2fb440db036b8..0000000000000
--- a/db/docs/vulnerability_occurrence_pipelines.yml
+++ /dev/null
@@ -1,20 +0,0 @@
----
-table_name: vulnerability_occurrence_pipelines
-classes:
-- Vulnerabilities::FindingPipeline
-feature_categories:
-- vulnerability_management
-description: Join table between Findings and Pipelines
-introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/7578
-milestone: '11.5'
-gitlab_schema: gitlab_sec
-desired_sharding_key:
-  project_id:
-    references: projects
-    backfill_via:
-      parent:
-        foreign_key: occurrence_id
-        table: vulnerability_occurrences
-        sharding_key: project_id
-        belongs_to: finding
-desired_sharding_key_migration_job_name: BackfillVulnerabilityOccurrencePipelinesProjectId
diff --git a/db/gitlab_schemas/gitlab_sec.yaml b/db/gitlab_schemas/gitlab_sec.yaml
index 8b071d7b6632e..7b699c83d0e1b 100644
--- a/db/gitlab_schemas/gitlab_sec.yaml
+++ b/db/gitlab_schemas/gitlab_sec.yaml
@@ -25,7 +25,6 @@ allow_cross_joins:
       - vulnerability_issue_links
       - vulnerability_merge_request_links
       - vulnerability_occurrence_identifiers
-      - vulnerability_occurrence_pipelines
       - vulnerability_occurrences
       - vulnerability_reads
       - vulnerability_remediations
@@ -77,7 +76,6 @@ allow_cross_transactions:
       - vulnerability_issue_links
       - vulnerability_merge_request_links
       - vulnerability_occurrence_identifiers
-      - vulnerability_occurrence_pipelines
       - vulnerability_occurrences
       - vulnerability_reads
       - vulnerability_remediations
@@ -127,7 +125,6 @@ allow_cross_foreign_keys:
       - vulnerability_issue_links
       - vulnerability_merge_request_links
       - vulnerability_occurrence_identifiers
-      - vulnerability_occurrence_pipelines
       - vulnerability_occurrences
       - vulnerability_reads
       - vulnerability_remediations
diff --git a/db/post_migrate/20240730172818_queue_backfill_vulnerability_occurrence_pipelines_project_id.rb b/db/post_migrate/20240730172818_queue_backfill_vulnerability_occurrence_pipelines_project_id.rb
index 251639d058fcb..ae9bf7f6fc283 100644
--- a/db/post_migrate/20240730172818_queue_backfill_vulnerability_occurrence_pipelines_project_id.rb
+++ b/db/post_migrate/20240730172818_queue_backfill_vulnerability_occurrence_pipelines_project_id.rb
@@ -5,23 +5,9 @@ class QueueBackfillVulnerabilityOccurrencePipelinesProjectId < Gitlab::Database:
   restrict_gitlab_migration gitlab_schema: :gitlab_sec
 
   MIGRATION = "BackfillVulnerabilityOccurrencePipelinesProjectId"
-  DELAY_INTERVAL = 2.minutes
-  BATCH_SIZE = 1000
-  SUB_BATCH_SIZE = 100
 
   def up
-    queue_batched_background_migration(
-      MIGRATION,
-      :vulnerability_occurrence_pipelines,
-      :id,
-      :project_id,
-      :vulnerability_occurrences,
-      :project_id,
-      :occurrence_id,
-      job_interval: DELAY_INTERVAL,
-      batch_size: BATCH_SIZE,
-      sub_batch_size: SUB_BATCH_SIZE
-    )
+    # This migration has been deleted because the table has been dropped.
   end
 
   def down
diff --git a/db/post_migrate/20241022181600_remove_backfill_vulnerability_occurrence_pipelines_project_id.rb b/db/post_migrate/20241022181600_remove_backfill_vulnerability_occurrence_pipelines_project_id.rb
new file mode 100644
index 0000000000000..3a30ce9b06784
--- /dev/null
+++ b/db/post_migrate/20241022181600_remove_backfill_vulnerability_occurrence_pipelines_project_id.rb
@@ -0,0 +1,26 @@
+# frozen_string_literal: true
+
+class RemoveBackfillVulnerabilityOccurrencePipelinesProjectId < Gitlab::Database::Migration[2.2]
+  milestone '17.6'
+  restrict_gitlab_migration gitlab_schema: :gitlab_sec
+
+  MIGRATION = "BackfillVulnerabilityOccurrencePipelinesProjectId"
+
+  def up
+    delete_batched_background_migration(
+      MIGRATION,
+      :vulnerability_occurrence_pipelines,
+      :id,
+      [
+        :project_id,
+        :vulnerability_occurrences,
+        :project_id,
+        :occurrence_id
+      ]
+    )
+  end
+
+  def down
+    # no-op
+  end
+end
diff --git a/db/post_migrate/20241022181639_drop_vulnerability_occurrence_pipelines.rb b/db/post_migrate/20241022181639_drop_vulnerability_occurrence_pipelines.rb
new file mode 100644
index 0000000000000..e5a4ded1c7079
--- /dev/null
+++ b/db/post_migrate/20241022181639_drop_vulnerability_occurrence_pipelines.rb
@@ -0,0 +1,47 @@
+# frozen_string_literal: true
+
+class DropVulnerabilityOccurrencePipelines < Gitlab::Database::Migration[2.2]
+  include Gitlab::Database::SchemaHelpers
+
+  TABLE_NAME = :vulnerability_occurrence_pipelines
+  TRIGGER_NAME = 'trigger_8ba31bddd655'
+
+  milestone '17.6'
+
+  disable_ddl_transaction!
+
+  def up
+    drop_table TABLE_NAME
+    drop_function TRIGGER_NAME
+  end
+
+  def down
+    create_table TABLE_NAME do |t|
+      t.timestamps_with_timezone null: false
+      t.bigint :occurrence_id, null: false
+      t.bigint :pipeline_id, null: false
+      t.bigint :project_id
+    end
+
+    add_concurrent_index TABLE_NAME, [:occurrence_id, :pipeline_id],
+      unique: true,
+      name: 'vulnerability_occurrence_pipelines_on_unique_keys'
+    add_concurrent_index TABLE_NAME, [:occurrence_id, :id],
+      order: { occurrence_id: :asc, id: :desc },
+      name: 'index_vulnerability_occurrence_pipelines_occurrence_id_and_id'
+    add_concurrent_index TABLE_NAME, :pipeline_id,
+      name: 'index_vulnerability_occurrence_pipelines_on_pipeline_id'
+
+    add_concurrent_foreign_key TABLE_NAME, :vulnerability_occurrences,
+      column: :occurrence_id, on_delete: :cascade, name: 'fk_rails_dc3ae04693'
+
+    install_sharding_key_assignment_trigger(
+      table: TABLE_NAME,
+      sharding_key: :project_id,
+      parent_table: :vulnerability_occurrences,
+      parent_sharding_key: :project_id,
+      foreign_key: :occurrence_id,
+      trigger_name: TRIGGER_NAME
+    )
+  end
+end
diff --git a/db/schema_migrations/20241022181600 b/db/schema_migrations/20241022181600
new file mode 100644
index 0000000000000..bf22610835056
--- /dev/null
+++ b/db/schema_migrations/20241022181600
@@ -0,0 +1 @@
+50de83ee644af67af6dcac2dd533fa03e20249fd9056418b038d1889599b6bd8
\ No newline at end of file
diff --git a/db/schema_migrations/20241022181639 b/db/schema_migrations/20241022181639
new file mode 100644
index 0000000000000..419300f88d08f
--- /dev/null
+++ b/db/schema_migrations/20241022181639
@@ -0,0 +1 @@
+6b16fc7572186fdf3ef1fe1d3161d49e9ff46c2ffa927e1a6fdf07834080bc2c
\ No newline at end of file
diff --git a/db/structure.sql b/db/structure.sql
index 4a30f71089fcd..9d2c355bafe28 100644
--- a/db/structure.sql
+++ b/db/structure.sql
@@ -1899,22 +1899,6 @@ RETURN NEW;
 END
 $$;
 
-CREATE FUNCTION trigger_8ba31bddd655() RETURNS trigger
-    LANGUAGE plpgsql
-    AS $$
-BEGIN
-IF NEW."project_id" IS NULL THEN
-  SELECT "project_id"
-  INTO NEW."project_id"
-  FROM "vulnerability_occurrences"
-  WHERE "vulnerability_occurrences"."id" = NEW."occurrence_id";
-END IF;
-
-RETURN NEW;
-
-END
-$$;
-
 CREATE FUNCTION trigger_8d002f38bdef() RETURNS trigger
     LANGUAGE plpgsql
     AS $$
@@ -20781,24 +20765,6 @@ CREATE SEQUENCE vulnerability_occurrence_identifiers_id_seq
 
 ALTER SEQUENCE vulnerability_occurrence_identifiers_id_seq OWNED BY vulnerability_occurrence_identifiers.id;
 
-CREATE TABLE vulnerability_occurrence_pipelines (
-    id bigint NOT NULL,
-    created_at timestamp with time zone NOT NULL,
-    updated_at timestamp with time zone NOT NULL,
-    occurrence_id bigint NOT NULL,
-    pipeline_id bigint NOT NULL,
-    project_id bigint
-);
-
-CREATE SEQUENCE vulnerability_occurrence_pipelines_id_seq
-    START WITH 1
-    INCREMENT BY 1
-    NO MINVALUE
-    NO MAXVALUE
-    CACHE 1;
-
-ALTER SEQUENCE vulnerability_occurrence_pipelines_id_seq OWNED BY vulnerability_occurrence_pipelines.id;
-
 CREATE TABLE vulnerability_occurrences (
     id bigint NOT NULL,
     created_at timestamp with time zone NOT NULL,
@@ -23248,8 +23214,6 @@ ALTER TABLE ONLY vulnerability_namespace_historical_statistics ALTER COLUMN id S
 
 ALTER TABLE ONLY vulnerability_occurrence_identifiers ALTER COLUMN id SET DEFAULT nextval('vulnerability_occurrence_identifiers_id_seq'::regclass);
 
-ALTER TABLE ONLY vulnerability_occurrence_pipelines ALTER COLUMN id SET DEFAULT nextval('vulnerability_occurrence_pipelines_id_seq'::regclass);
-
 ALTER TABLE ONLY vulnerability_occurrences ALTER COLUMN id SET DEFAULT nextval('vulnerability_occurrences_id_seq'::regclass);
 
 ALTER TABLE ONLY vulnerability_reads ALTER COLUMN id SET DEFAULT nextval('vulnerability_reads_id_seq'::regclass);
@@ -26048,9 +26012,6 @@ ALTER TABLE ONLY vulnerability_namespace_historical_statistics
 ALTER TABLE ONLY vulnerability_occurrence_identifiers
     ADD CONSTRAINT vulnerability_occurrence_identifiers_pkey PRIMARY KEY (id);
 
-ALTER TABLE ONLY vulnerability_occurrence_pipelines
-    ADD CONSTRAINT vulnerability_occurrence_pipelines_pkey PRIMARY KEY (id);
-
 ALTER TABLE ONLY vulnerability_occurrences
     ADD CONSTRAINT vulnerability_occurrences_pkey PRIMARY KEY (id);
 
@@ -31688,10 +31649,6 @@ CREATE INDEX index_vulnerability_occurrence_identifiers_on_identifier_id ON vuln
 
 CREATE UNIQUE INDEX index_vulnerability_occurrence_identifiers_on_unique_keys ON vulnerability_occurrence_identifiers USING btree (occurrence_id, identifier_id);
 
-CREATE INDEX index_vulnerability_occurrence_pipelines_occurrence_id_and_id ON vulnerability_occurrence_pipelines USING btree (occurrence_id, id DESC);
-
-CREATE INDEX index_vulnerability_occurrence_pipelines_on_pipeline_id ON vulnerability_occurrence_pipelines USING btree (pipeline_id);
-
 CREATE INDEX index_vulnerability_occurrences_for_override_uuids_logic ON vulnerability_occurrences USING btree (project_id, report_type, location_fingerprint);
 
 CREATE INDEX index_vulnerability_occurrences_on_initial_pipeline_id ON vulnerability_occurrences USING btree (initial_pipeline_id);
@@ -32168,8 +32125,6 @@ CREATE UNIQUE INDEX virtual_reg_packages_maven_reg_upstreams_on_unique_upstream_
 
 CREATE UNIQUE INDEX virtual_registries_pkgs_maven_registries_on_unique_group_ids ON virtual_registries_packages_maven_registries USING btree (group_id);
 
-CREATE UNIQUE INDEX vulnerability_occurrence_pipelines_on_unique_keys ON vulnerability_occurrence_pipelines USING btree (occurrence_id, pipeline_id);
-
 CREATE INDEX wi_colors_namespace_id_index ON work_item_colors USING btree (namespace_id);
 
 CREATE INDEX wi_datessources_due_date_sourcing_milestone_id_index ON work_item_dates_sources USING btree (due_date_sourcing_milestone_id);
@@ -33944,8 +33899,6 @@ CREATE TRIGGER trigger_8ac78f164b2d BEFORE INSERT OR UPDATE ON design_management
 
 CREATE TRIGGER trigger_8b39d532224c BEFORE INSERT OR UPDATE ON ci_secure_file_states FOR EACH ROW EXECUTE FUNCTION trigger_8b39d532224c();
 
-CREATE TRIGGER trigger_8ba31bddd655 BEFORE INSERT OR UPDATE ON vulnerability_occurrence_pipelines FOR EACH ROW EXECUTE FUNCTION trigger_8ba31bddd655();
-
 CREATE TRIGGER trigger_8d002f38bdef BEFORE INSERT OR UPDATE ON packages_debian_group_components FOR EACH ROW EXECUTE FUNCTION trigger_8d002f38bdef();
 
 CREATE TRIGGER trigger_8d17725116fe BEFORE INSERT OR UPDATE ON merge_request_reviewers FOR EACH ROW EXECUTE FUNCTION trigger_8d17725116fe();
@@ -37324,9 +37277,6 @@ ALTER TABLE ONLY dependency_proxy_blobs
 ALTER TABLE ONLY board_user_preferences
     ADD CONSTRAINT fk_rails_dbebdaa8fe FOREIGN KEY (board_id) REFERENCES boards(id) ON DELETE CASCADE;
 
-ALTER TABLE ONLY vulnerability_occurrence_pipelines
-    ADD CONSTRAINT fk_rails_dc3ae04693 FOREIGN KEY (occurrence_id) REFERENCES vulnerability_occurrences(id) ON DELETE CASCADE;
-
 ALTER TABLE ONLY instance_audit_events_streaming_headers
     ADD CONSTRAINT fk_rails_dc933c1f3c FOREIGN KEY (instance_external_audit_event_destination_id) REFERENCES audit_events_instance_external_audit_event_destinations(id) ON DELETE CASCADE;
 
diff --git a/ee/app/models/vulnerabilities/finding.rb b/ee/app/models/vulnerabilities/finding.rb
index 12f04544331d7..00f04fa167fd3 100644
--- a/ee/app/models/vulnerabilities/finding.rb
+++ b/ee/app/models/vulnerabilities/finding.rb
@@ -93,8 +93,6 @@ class Finding < Gitlab::Database::SecApplicationRecord
     has_many :finding_remediations, class_name: 'Vulnerabilities::FindingRemediation', inverse_of: :finding, foreign_key: 'vulnerability_occurrence_id'
     has_many :remediations, through: :finding_remediations
 
-    has_many :finding_pipelines, class_name: 'Vulnerabilities::FindingPipeline', inverse_of: :finding, foreign_key: 'occurrence_id'
-
     # rubocop: disable Rails/InverseOf -- these relations are not present on Ci::Pipeline
     belongs_to :initial_finding_pipeline, class_name: '::Ci::Pipeline', foreign_key: 'initial_pipeline_id'
     belongs_to :latest_finding_pipeline, class_name: '::Ci::Pipeline', foreign_key: 'latest_pipeline_id'
diff --git a/ee/app/models/vulnerabilities/finding_pipeline.rb b/ee/app/models/vulnerabilities/finding_pipeline.rb
deleted file mode 100644
index b35605b28f58a..0000000000000
--- a/ee/app/models/vulnerabilities/finding_pipeline.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-# frozen_string_literal: true
-
-module Vulnerabilities
-  class FindingPipeline < Gitlab::Database::SecApplicationRecord
-    include EachBatch
-
-    self.table_name = "vulnerability_occurrence_pipelines"
-
-    alias_attribute :finding_id, :occurrence_id
-
-    belongs_to :finding, class_name: 'Vulnerabilities::Finding', inverse_of: :finding_pipelines, foreign_key: 'occurrence_id'
-    belongs_to :pipeline, class_name: '::Ci::Pipeline'
-
-    validates :finding, presence: true
-    validates :pipeline, presence: true
-    validates :pipeline_id, uniqueness: { scope: [:occurrence_id] }
-
-    scope :by_finding_id, ->(finding_ids) { where(occurrence_id: finding_ids) }
-  end
-end
diff --git a/ee/lib/ee/gitlab/background_migration/populate_resolved_on_default_branch_column.rb b/ee/lib/ee/gitlab/background_migration/populate_resolved_on_default_branch_column.rb
deleted file mode 100644
index 4422461a800f1..0000000000000
--- a/ee/lib/ee/gitlab/background_migration/populate_resolved_on_default_branch_column.rb
+++ /dev/null
@@ -1,338 +0,0 @@
-# frozen_string_literal: true
-
-module EE
-  module Gitlab
-    module BackgroundMigration
-      module PopulateResolvedOnDefaultBranchColumn
-        def perform(*project_ids)
-          project_ids.flatten.each { |project_id| PopulateResolvedOnDefaultBranchColumnForProject.perform(project_id) }
-        end
-
-        module Routable
-          extend ActiveSupport::Concern
-
-          included do
-            has_one :route, as: :source
-          end
-
-          def full_path
-            route&.path || build_full_path
-          end
-
-          def build_full_path
-            if parent && path
-              parent.full_path + '/' + path
-            else
-              path
-            end
-          end
-        end
-
-        module Visibility
-          PUBLIC_LEVEL = 20
-
-          def public?
-            visibility_level == PUBLIC_LEVEL
-          end
-        end
-
-        # This class depends on Gitlab::CurrentSettings
-        class Project < ActiveRecord::Base
-          include Routable
-          include Visibility
-          include ::Gitlab::Utils::StrongMemoize
-
-          self.table_name = 'projects'
-
-          # These are the artifact file types to query
-          # only security report related artifacts.
-          # sast: 5
-          # dependency_scanning: 6
-          # container_scanning: 7
-          # dast: 8
-          # secret_detection: 21
-          # coverage_fuzzing: 23
-          FILE_TYPES = [5, 6, 7, 8, 21, 23].freeze
-          LATEST_PIPELINE_WITH_REPORTS_SQL = <<~SQL
-            SELECT
-              "ci_pipelines"."id"
-            FROM
-              "ci_pipelines"
-            WHERE
-              ("ci_pipelines"."id" IN (
-                SELECT
-                  "ci_pipelines"."id"
-                FROM
-                  "ci_pipelines"
-                WHERE
-                  ci_pipelines.project_id = %{project_id}
-                  AND ci_pipelines.ref = %{ref}
-                  AND ci_pipelines.status IN ('success')
-                ORDER BY
-                  "ci_pipelines"."id" DESC
-                LIMIT 100))
-              AND (EXISTS (
-                SELECT
-                  1
-                FROM
-                  "ci_builds"
-                WHERE
-                  "ci_builds"."type" = 'Ci::Build'
-                  AND ("ci_builds"."retried" IS FALSE OR "ci_builds"."retried" IS NULL)
-                  AND (EXISTS (
-                    SELECT
-                      1
-                    FROM
-                      "ci_job_artifacts"
-                    WHERE
-                      (ci_builds.id = ci_job_artifacts.job_id)
-                      AND "ci_job_artifacts"."file_type" IN (%{file_types})))
-                  AND (ci_pipelines.id = ci_builds.commit_id)))
-            ORDER BY
-              "ci_pipelines"."id" DESC
-            LIMIT 1
-          SQL
-
-          belongs_to :namespace
-          alias_method :parent, :namespace
-
-          has_one :route, as: :source
-          has_many :vulnerabilities
-
-          def self.polymorphic_name
-            'Project'
-          end
-
-          def resolved_vulnerabilities
-            return Vulnerability.none unless latest_pipeline_id
-
-            vulnerabilities.not_found_in_pipeline_id(latest_pipeline_id)
-          end
-
-          private
-
-          delegate :connection, to: :'self.class', private: true
-
-          def latest_pipeline_id
-            strong_memoize(:latest_pipeline_id) { pipeline_with_reports&.fetch('id') }
-          end
-
-          def pipeline_with_reports
-            connection.execute(pipeline_with_reports_sql).first
-          end
-
-          def pipeline_with_reports_sql
-            format(LATEST_PIPELINE_WITH_REPORTS_SQL, project_id: id, ref: connection.quote(default_branch), file_types: FILE_TYPES.join(', '))
-          end
-
-          def default_branch
-            @default_branch ||= repository.root_ref || default_branch_from_preferences
-          end
-
-          def repository
-            @repository ||= Repository.new(full_path, self, shard: repository_storage, disk_path: storage.disk_path)
-          end
-
-          def storage
-            @storage ||=
-              if hashed_repository_storage?
-                Storage::Hashed.new(self)
-              else
-                Storage::LegacyProject.new(self)
-              end
-          end
-
-          def hashed_repository_storage?
-            storage_version.to_i >= 1
-          end
-
-          def default_branch_from_preferences
-            ::Gitlab::CurrentSettings.default_branch_name if repository.empty?
-          end
-        end
-
-        module Storage
-          class Hashed
-            attr_accessor :container
-
-            REPOSITORY_PATH_PREFIX = '@hashed'
-
-            def initialize(container)
-              @container = container
-            end
-
-            def base_dir
-              "#{REPOSITORY_PATH_PREFIX}/#{disk_hash[0..1]}/#{disk_hash[2..3]}" if disk_hash
-            end
-
-            def disk_path
-              "#{base_dir}/#{disk_hash}" if disk_hash
-            end
-
-            private
-
-            def disk_hash
-              @disk_hash ||= Digest::SHA2.hexdigest(container.id.to_s) if container.id
-            end
-          end
-
-          class LegacyProject
-            attr_accessor :project
-
-            def initialize(project)
-              @project = project
-            end
-
-            def disk_path
-              project.full_path
-            end
-          end
-        end
-
-        class Namespace < ActiveRecord::Base
-          include Routable
-          include Visibility
-
-          self.table_name = 'namespaces'
-
-          belongs_to :parent, class_name: 'Namespace'
-
-          def self.find_sti_class(type_name)
-            super("EE::Gitlab::BackgroundMigration::PopulateResolvedOnDefaultBranchColumn::#{type_name}")
-          end
-        end
-
-        class Group < Namespace
-          def self.polymorphic_name
-            'Group'
-          end
-        end
-
-        class Route < ActiveRecord::Base
-          self.table_name = 'routes'
-        end
-
-        class Vulnerability < ActiveRecord::Base
-          include EachBatch
-
-          self.table_name = 'vulnerabilities'
-
-          scope :not_found_in_pipeline_id, ->(pipeline_id) do
-            where(<<~SQL)
-              NOT EXISTS (
-                SELECT 1
-                FROM vulnerability_occurrences vo
-                INNER JOIN vulnerability_occurrence_pipelines vop ON vop.occurrence_id = vo.id
-                WHERE vo.vulnerability_id = vulnerabilities.id AND vop.pipeline_id = #{pipeline_id}
-              )
-            SQL
-          end
-        end
-
-        # This class depends on following classes
-        #   GlRepository class defined in `lib/gitlab/gl_repository.rb`
-        #   Repository class defined in `lib/gitlab/git/repository.rb`.
-        class Repository
-          def initialize(full_path, container, shard:, disk_path: nil, repo_type: ::Gitlab::GlRepository::PROJECT)
-            @full_path = full_path
-            @shard = shard
-            @disk_path = disk_path || full_path
-            @container = container
-            @commit_cache = {}
-            @repo_type = repo_type
-          end
-
-          def root_ref
-            raw_repository&.root_ref
-          rescue Gitlab::Git::Repository::NoRepository
-          end
-
-          def empty?
-            return true unless exists?
-
-            !has_visible_content?
-          end
-
-          private
-
-          attr_reader :full_path, :shard, :disk_path, :container, :repo_type
-
-          delegate :has_visible_content?, to: :raw_repository, private: true
-
-          def exists?
-            return false unless full_path
-
-            raw_repository.exists?
-          end
-
-          def raw_repository
-            return unless full_path
-
-            @raw_repository ||= initialize_raw_repository
-          end
-
-          def initialize_raw_repository
-            ::Gitlab::Git::Repository.new(
-              shard,
-              disk_path + '.git',
-              repo_type.identifier_for_container(container),
-              container.full_path
-            )
-          end
-        end
-
-        class PopulateResolvedOnDefaultBranchColumnForProject
-          def self.perform(project_id)
-            new(project_id).perform
-          end
-
-          def initialize(project_id)
-            self.project_id = project_id
-            self.updated_count = 0
-          end
-
-          def perform
-            update_vulnerabilities
-            log_info
-          rescue StandardError => e
-            log_error(e)
-          end
-
-          attr_accessor :project_id, :updated_count
-
-          private
-
-          def update_vulnerabilities
-            return if project.resolved_vulnerabilities.none?
-
-            project.vulnerabilities.each_batch(of: 100) do |relation|
-              self.updated_count += relation.merge(project.resolved_vulnerabilities)
-                                            .update_all(resolved_on_default_branch: true)
-            end
-          end
-
-          def log_info
-            ::Gitlab::BackgroundMigration::Logger.info(
-              migrator: 'PopulateResolvedOnDefaultBranchColumnForProject',
-              message: 'Project migrated',
-              updated_count: updated_count,
-              project_id: project_id
-            )
-          end
-
-          def log_error(error)
-            ::Gitlab::BackgroundMigration::Logger.error(
-              migrator: 'PopulateResolvedOnDefaultBranchColumnForProject',
-              message: error.message,
-              project_id: project_id
-            )
-          end
-
-          def project
-            @project ||= Project.find(project_id)
-          end
-        end
-      end
-    end
-  end
-end
diff --git a/ee/lib/gitlab/ingestion/bulk_insertable_task.rb b/ee/lib/gitlab/ingestion/bulk_insertable_task.rb
index 8367001593b3f..bb8d34f9eb659 100644
--- a/ee/lib/gitlab/ingestion/bulk_insertable_task.rb
+++ b/ee/lib/gitlab/ingestion/bulk_insertable_task.rb
@@ -87,7 +87,6 @@ def return_data
                 vulnerability_finding_links
                 vulnerability_identifiers
                 vulnerability_occurrence_identifiers
-                vulnerability_occurrence_pipelines
                 vulnerability_occurrences
               ],
               url: 'https://gitlab.com/gitlab-org/gitlab/-/issues/474635'
diff --git a/ee/spec/factories/vulnerabilities/finding_pipelines.rb b/ee/spec/factories/vulnerabilities/finding_pipelines.rb
deleted file mode 100644
index 08ee2bc9ae528..0000000000000
--- a/ee/spec/factories/vulnerabilities/finding_pipelines.rb
+++ /dev/null
@@ -1,8 +0,0 @@
-# frozen_string_literal: true
-
-FactoryBot.define do
-  factory :vulnerabilities_finding_pipeline, class: 'Vulnerabilities::FindingPipeline' do
-    finding factory: :vulnerabilities_finding
-    pipeline factory: :ci_pipeline
-  end
-end
diff --git a/ee/spec/models/vulnerabilities/finding_pipeline_spec.rb b/ee/spec/models/vulnerabilities/finding_pipeline_spec.rb
deleted file mode 100644
index d9906c65f344a..0000000000000
--- a/ee/spec/models/vulnerabilities/finding_pipeline_spec.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-RSpec.describe Vulnerabilities::FindingPipeline, feature_category: :vulnerability_management do
-  describe 'associations' do
-    it { is_expected.to belong_to(:pipeline).class_name('Ci::Pipeline') }
-    it { is_expected.to belong_to(:finding).class_name('Vulnerabilities::Finding') }
-  end
-
-  describe 'validations' do
-    let!(:finding_pipeline) { create(:vulnerabilities_finding_pipeline) }
-
-    it { is_expected.to validate_presence_of(:finding) }
-    it { is_expected.to validate_presence_of(:pipeline) }
-    it { is_expected.to validate_uniqueness_of(:pipeline_id).scoped_to(:occurrence_id) }
-  end
-
-  context 'loose foreign key on vulnerability_occurrence_pipelines.pipeline_id' do
-    it_behaves_like 'cleanup by a loose foreign key' do
-      let!(:parent) { create(:ci_pipeline) }
-      let!(:model) { create(:vulnerabilities_finding_pipeline, pipeline: parent) }
-    end
-  end
-end
diff --git a/ee/spec/models/vulnerabilities/finding_spec.rb b/ee/spec/models/vulnerabilities/finding_spec.rb
index 21dd15f49e3f4..0aedd312464c1 100644
--- a/ee/spec/models/vulnerabilities/finding_spec.rb
+++ b/ee/spec/models/vulnerabilities/finding_spec.rb
@@ -19,7 +19,6 @@
       it { is_expected.to belong_to(:scanner).class_name('Vulnerabilities::Scanner') }
       it { is_expected.to belong_to(:vulnerability).inverse_of(:findings) }
       it { is_expected.to have_one(:one_vulnerability).class_name('Vulnerability').inverse_of(:vulnerability_finding) }
-      it { is_expected.to have_many(:finding_pipelines).class_name('Vulnerabilities::FindingPipeline').with_foreign_key('occurrence_id') }
       it { is_expected.to have_many(:identifiers).class_name('Vulnerabilities::Identifier') }
       it { is_expected.to have_many(:finding_identifiers).class_name('Vulnerabilities::FindingIdentifier').with_foreign_key('occurrence_id') }
       it { is_expected.to have_many(:finding_links).class_name('Vulnerabilities::FindingLink').with_foreign_key('vulnerability_occurrence_id') }
diff --git a/ee/spec/services/vulnerabilities/removal/remove_from_project_service_spec.rb b/ee/spec/services/vulnerabilities/removal/remove_from_project_service_spec.rb
index b6526b2a5c491..d8a16af3b21ab 100644
--- a/ee/spec/services/vulnerabilities/removal/remove_from_project_service_spec.rb
+++ b/ee/spec/services/vulnerabilities/removal/remove_from_project_service_spec.rb
@@ -115,7 +115,6 @@
                                              .and not_change { Vulnerabilities::Identifier.count }
                                              .and not_change { Vulnerabilities::FindingLink.count }
                                              .and not_change { Vulnerabilities::Remediation.count }
-                                             .and not_change { Vulnerabilities::FindingPipeline.count }
                                              .and not_change { Vulnerabilities::StateTransition.count }
                                              .and not_change { Vulnerabilities::MergeRequestLink.count }
                                              .and not_change { Vulnerabilities::FindingSignature.count }
diff --git a/lib/gitlab/background_migration/backfill_vulnerability_occurrence_pipelines_project_id.rb b/lib/gitlab/background_migration/backfill_vulnerability_occurrence_pipelines_project_id.rb
deleted file mode 100644
index 8dfcfedc2097c..0000000000000
--- a/lib/gitlab/background_migration/backfill_vulnerability_occurrence_pipelines_project_id.rb
+++ /dev/null
@@ -1,10 +0,0 @@
-# frozen_string_literal: true
-
-module Gitlab
-  module BackgroundMigration
-    class BackfillVulnerabilityOccurrencePipelinesProjectId < BackfillDesiredShardingKeyJob
-      operation_name :backfill_vulnerability_occurrence_pipelines_project_id
-      feature_category :vulnerability_management
-    end
-  end
-end
diff --git a/lib/gitlab/background_migration/populate_resolved_on_default_branch_column.rb b/lib/gitlab/background_migration/populate_resolved_on_default_branch_column.rb
deleted file mode 100644
index e95955c450d9f..0000000000000
--- a/lib/gitlab/background_migration/populate_resolved_on_default_branch_column.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-# frozen_string_literal: true
-
-module Gitlab
-  module BackgroundMigration
-    # rubocop:disable Style/Documentation
-    class PopulateResolvedOnDefaultBranchColumn
-      def perform(*); end
-    end
-  end
-end
-
-Gitlab::BackgroundMigration::PopulateResolvedOnDefaultBranchColumn.prepend_mod_with('Gitlab::BackgroundMigration::PopulateResolvedOnDefaultBranchColumn')
diff --git a/rubocop/rubocop-migrations.yml b/rubocop/rubocop-migrations.yml
index c5f5adef68c91..e1e349f28df33 100644
--- a/rubocop/rubocop-migrations.yml
+++ b/rubocop/rubocop-migrations.yml
@@ -79,7 +79,6 @@ Migration/UpdateLargeTable:
     - :vulnerabilities
     - :vulnerability_finding_links
     - :vulnerability_occurrence_identifiers
-    - :vulnerability_occurrence_pipelines
     - :vulnerability_occurrences
     - :vulnerability_reads
     - :web_hook_logs
diff --git a/spec/db/schema_spec.rb b/spec/db/schema_spec.rb
index 445efd8974a7d..4a3551a7ca0ff 100644
--- a/spec/db/schema_spec.rb
+++ b/spec/db/schema_spec.rb
@@ -205,7 +205,6 @@
     user_agent_details: %w[subject_id],
     users: %w[color_mode_id color_scheme_id created_by_id theme_id managing_group_id],
     users_star_projects: %w[user_id],
-    vulnerability_occurrence_pipelines: %w[project_id],
     vulnerability_finding_links: %w[project_id],
     vulnerability_identifiers: %w[external_id],
     vulnerability_occurrence_identifiers: %w[project_id],
diff --git a/spec/lib/gitlab/background_migration/backfill_vulnerability_occurrence_pipelines_project_id_spec.rb b/spec/lib/gitlab/background_migration/backfill_vulnerability_occurrence_pipelines_project_id_spec.rb
deleted file mode 100644
index e79b373fca164..0000000000000
--- a/spec/lib/gitlab/background_migration/backfill_vulnerability_occurrence_pipelines_project_id_spec.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-RSpec.describe Gitlab::BackgroundMigration::BackfillVulnerabilityOccurrencePipelinesProjectId,
-  feature_category: :vulnerability_management,
-  schema: 20240730172815 do
-  include_examples 'desired sharding key backfill job' do
-    let(:batch_table) { :vulnerability_occurrence_pipelines }
-    let(:backfill_column) { :project_id }
-    let(:backfill_via_table) { :vulnerability_occurrences }
-    let(:backfill_via_column) { :project_id }
-    let(:backfill_via_foreign_key) { :occurrence_id }
-  end
-end
diff --git a/spec/lib/gitlab/import_export/all_models.yml b/spec/lib/gitlab/import_export/all_models.yml
index 86a7f309ff8ce..3e03d34a90131 100644
--- a/spec/lib/gitlab/import_export/all_models.yml
+++ b/spec/lib/gitlab/import_export/all_models.yml
@@ -349,7 +349,6 @@ ci_pipelines:
 - parent_pipeline
 - downstream_bridges
 - job_artifacts
-- vulnerabilities_finding_pipelines
 - vulnerability_findings
 - pipeline_config
 - security_scans
diff --git a/spec/migrations/20240730172818_queue_backfill_vulnerability_occurrence_pipelines_project_id_spec.rb b/spec/migrations/20240730172818_queue_backfill_vulnerability_occurrence_pipelines_project_id_spec.rb
index 11402da932b5b..616daecaf5072 100644
--- a/spec/migrations/20240730172818_queue_backfill_vulnerability_occurrence_pipelines_project_id_spec.rb
+++ b/spec/migrations/20240730172818_queue_backfill_vulnerability_occurrence_pipelines_project_id_spec.rb
@@ -6,27 +6,14 @@
 RSpec.describe QueueBackfillVulnerabilityOccurrencePipelinesProjectId, feature_category: :vulnerability_management do
   let!(:batched_migration) { described_class::MIGRATION }
 
-  it 'schedules a new batched migration' do
+  it 'does not schedule a new batched migration' do
     reversible_migration do |migration|
       migration.before -> {
         expect(batched_migration).not_to have_scheduled_batched_migration
       }
 
       migration.after -> {
-        expect(batched_migration).to have_scheduled_batched_migration(
-          table_name: :vulnerability_occurrence_pipelines,
-          column_name: :id,
-          interval: described_class::DELAY_INTERVAL,
-          batch_size: described_class::BATCH_SIZE,
-          sub_batch_size: described_class::SUB_BATCH_SIZE,
-          gitlab_schema: :gitlab_sec,
-          job_arguments: [
-            :project_id,
-            :vulnerability_occurrences,
-            :project_id,
-            :occurrence_id
-          ]
-        )
+        expect(batched_migration).not_to have_scheduled_batched_migration
       }
     end
   end
diff --git a/spec/support/rspec_order_todo.yml b/spec/support/rspec_order_todo.yml
index 04a69c382854f..c85ae728e44b9 100644
--- a/spec/support/rspec_order_todo.yml
+++ b/spec/support/rspec_order_todo.yml
@@ -1421,7 +1421,6 @@
 - './ee/spec/models/vulnerabilities/finding/evidence_spec.rb'
 - './ee/spec/models/vulnerabilities/finding_identifier_spec.rb'
 - './ee/spec/models/vulnerabilities/finding_link_spec.rb'
-- './ee/spec/models/vulnerabilities/finding_pipeline_spec.rb'
 - './ee/spec/models/vulnerabilities/finding_remediation_spec.rb'
 - './ee/spec/models/vulnerabilities/finding_signature_spec.rb'
 - './ee/spec/models/vulnerabilities/finding_spec.rb'
-- 
GitLab