Skip to content

Reworks snapshots and segments structure

Pavel Shutsin requested to merge 329521-store-segment-target-groups-part-2 into master

What does this MR do?

Reworks snapshots and segments structure. No user facing changes yet. Those will come in part-3

Previously:

  • A snapshot belongs to 1 namespace and has many segments
  • A segment belongs to 1 segment

Now:

  • A snapshot belongs to 2 namespaces and has many segments
  • A segment belongs to 1 namespace

That makes snapshots independent of segments and allows us to create multiple segments with the same snapshots data (no overhead recalculations).

Cleans up obsolete fields on Snapshot and Segment models.

Migration output

== 20210517144856 RequireSnapshotNamespace: reverting =========================
-- execute("ALTER TABLE analytics_devops_adoption_snapshots\nDROP CONSTRAINT IF EXISTS check_3f472de131\n")
   -> 0.0025s
== 20210517144856 RequireSnapshotNamespace: reverted (0.0168s) ================

== 20210517130723 MakeSnapshotSegmentIdOptional: reverting ====================
-- change_column_null(:analytics_devops_adoption_snapshots, :segment_id, false)
   -> 0.0050s
== 20210517130723 MakeSnapshotSegmentIdOptional: reverted (0.0050s) ===========

== 20210517130723 MakeSnapshotSegmentIdOptional: migrating ====================
-- change_column_null(:analytics_devops_adoption_snapshots, :segment_id, true)
   -> 0.0059s
== 20210517130723 MakeSnapshotSegmentIdOptional: migrated (0.0060s) ===========

== 20210517144856 RequireSnapshotNamespace: migrating =========================
-- execute("    UPDATE analytics_devops_adoption_snapshots snapshots\n      SET namespace_id = segments.namespace_id\n    FROM analytics_devops_adoption_segments segments\n    WHERE snapshots.namespace_id IS NULL AND segments.id = snapshots.segment_id\n")
   -> 0.0038s
-- current_schema()
   -> 0.0016s
-- transaction_open?()
   -> 0.0000s
-- current_schema()
   -> 0.0021s
-- execute("ALTER TABLE analytics_devops_adoption_snapshots\nADD CONSTRAINT check_3f472de131\nCHECK ( namespace_id IS NOT NULL )\nNOT VALID;\n")
   -> 0.0034s
-- current_schema()
   -> 0.0021s
-- execute("ALTER TABLE analytics_devops_adoption_snapshots VALIDATE CONSTRAINT check_3f472de131;")
   -> 0.0037s
== 20210517144856 RequireSnapshotNamespace: migrated (0.0475s) ================

Does this MR meet the acceptance criteria?

Conformity

Availability and Testing

Security

Does this MR contain changes to processing or storing of credentials or tokens, authorization and authentication methods or other items described in the security review guidelines? If not, then delete this Security section.

  • Label as security and @ mention @gitlab-com/gl-security/appsec
  • The MR includes necessary changes to maintain consistency between UI, API, email, or other methods
  • Security reports checked/validated by a reviewer from the AppSec team

Related to #329521 (closed)

Edited by Pavel Shutsin

Merge request reports