Skip to content

Add resource_state_events table

Patrick Derichs requested to merge 38096-resource-state-events-pd into master

What does this MR do?

Needed for !29015 (merged) and burnup charts in general.

We must be able to track changes of issuable states so the scope changes of milestones at specific points in time can be measured.

The table will be used as an additional table in the union here: !29578 (diffs)

The sample query (with the current state of the aforementioned MR) with performance can be found here: !28930 (merged)

Migration outputs

Table creation (20200406132529)

Up

> bundle exec rails db:migrate:up VERSION=20200406132529  
== 20200406132529 AddResourceStateEventsTable: migrating ======================
-- create_table(:resource_state_events, {:id=>:bigserial})
   -> 0.0181s
== 20200406132529 AddResourceStateEventsTable: migrated (0.0182s) =============

Down

> bundle exec rails db:migrate:down VERSION=20200406132529
== 20200406132529 AddResourceStateEventsTable: reverting ======================
-- drop_table(:resource_state_events, {:id=>:bigserial})
   -> 0.0020s
== 20200406132529 AddResourceStateEventsTable: reverted (0.0033s) =============

Add foreign key user_id (20200423075720)

Up

> bundle exec rails db:migrate:up VERSION=20200423075720  
== 20200423075720 AddUserIdForeignKeyToResourceStateEvents: migrating =========
-- add_foreign_key(:resource_state_events, :users, {:column=>:user_id, :on_delete=>:nullify})
   -> 0.0026s
== 20200423075720 AddUserIdForeignKeyToResourceStateEvents: migrated (0.0052s) 

Down

> bundle exec rails db:migrate:down VERSION=20200423075720
== 20200423075720 AddUserIdForeignKeyToResourceStateEvents: reverting =========
-- remove_foreign_key(:resource_state_events, {:column=>:user_id})
   -> 0.0048s
== 20200423075720 AddUserIdForeignKeyToResourceStateEvents: reverted (0.0092s) 

Add foreign key issue_id (20200423080334)

Up

> bundle exec rails db:migrate:up VERSION=20200423080334  
== 20200423080334 AddIssueIdForeignKeyToResourceStateEvents: migrating ========
-- add_foreign_key(:resource_state_events, :issues, {:column=>:issue_id, :on_delete=>:cascade})
   -> 0.0026s
== 20200423080334 AddIssueIdForeignKeyToResourceStateEvents: migrated (0.0060s) 

Down

> bundle exec rails db:migrate:down VERSION=20200423080334
== 20200423080334 AddIssueIdForeignKeyToResourceStateEvents: reverting ========
-- remove_foreign_key(:resource_state_events, {:column=>:issue_id})
   -> 0.0031s
== 20200423080334 AddIssueIdForeignKeyToResourceStateEvents: reverted (0.0057s) 

Add foreign key merge_request_id (20200423080607)

Up

> bundle exec rails db:migrate:up VERSION=20200423080607
== 20200423080607 AddMergeRequestIdForeignKeyToResourceStateEvents: migrating =
-- add_foreign_key(:resource_state_events, :merge_requests, {:column=>:merge_request_id, :on_delete=>:cascade})
   -> 0.0023s
== 20200423080607 AddMergeRequestIdForeignKeyToResourceStateEvents: migrated (0.0050s) 

Down

> bundle exec rails db:migrate:down VERSION=20200423080607
== 20200423080607 AddMergeRequestIdForeignKeyToResourceStateEvents: reverting =
-- remove_foreign_key(:resource_state_events, {:column=>:merge_request_id})
   -> 0.0033s
== 20200423080607 AddMergeRequestIdForeignKeyToResourceStateEvents: reverted (0.0061s) 

Add check constraint (20200423081409)

Up

> bundle exec rails db:migrate:up VERSION=20200423081409
== 20200423081409 AddCheckConstraintToResourceStateEventsMustBelongToIssueOrMergeRequest: migrating 
-- transaction_open?()
   -> 0.0000s
-- execute("ALTER TABLE resource_state_events\nADD CONSTRAINT resource_state_events_must_belong_to_issue_or_merge_request\nCHECK ( (issue_id != NULL AND merge_request_id IS NULL) OR (merge_request_id != NULL AND issue_id IS NULL) )\nNOT VALID;\n")
   -> 0.0006s
-- execute("SET statement_timeout TO 0")
   -> 0.0004s
-- execute("ALTER TABLE resource_state_events VALIDATE CONSTRAINT resource_state_events_must_belong_to_issue_or_merge_request;")
   -> 0.0022s
-- execute("RESET ALL")
   -> 0.0004s
== 20200423081409 AddCheckConstraintToResourceStateEventsMustBelongToIssueOrMergeRequest: migrated (0.0131s) 

Down

> bundle exec rails db:migrate:down VERSION=20200423081409
== 20200423081409 AddCheckConstraintToResourceStateEventsMustBelongToIssueOrMergeRequest: reverting 
-- execute("ALTER TABLE resource_state_events\nDROP CONSTRAINT IF EXISTS resource_state_events_must_belong_to_issue_or_merge_request\n")
   -> 0.0005s
== 20200423081409 AddCheckConstraintToResourceStateEventsMustBelongToIssueOrMergeRequest: reverted (0.0123s) 

Screenshots

Does this MR meet the acceptance criteria?

Conformity

Availability and Testing

Security

If this MR contains changes to processing or storing of credentials or tokens, authorization and authentication methods and other items described in the security review guidelines:

  • 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

#38096 (closed)

Edited by Patrick Derichs

Merge request reports