Skip to content

WIP Fix orphaned epics events

Felipe Artur requested to merge issue_34200 into master

What does this MR do?

This fixes note events created for epics before !15649 (merged) was merged,
in that case before group_id was introduced to events column.

We have 6000 records with nil group_id:

gitlabhq_production=> SELECT count(*) 
gitlabhq_production-> FROM   "events" 
gitlabhq_production->        INNER JOIN notes 
gitlabhq_production->                ON notes.id = events.target_id 
gitlabhq_production->                   AND events.target_type = 'Note' 
gitlabhq_production-> WHERE  ( events.group_id IS NULL ) 
gitlabhq_production->        AND ( events.project_id IS NULL ) 
gitlabhq_production->        AND ( notes.noteable_type = 'Epic' ) 
gitlabhq_production->        AND ( events.target_type = 'Note' )  \g
 count 
-------
  6497
(1 row)

Current migration output

I did use batch size of 2 just for example purposes, the default is 1000.

==> Setting up GitLab Elasticsearch Indexer...
    GitLab Elasticsearch Indexer set up in 0.000339162 seconds...
== 20191202175443 FixOrphanEpicsEvents: migrating =============================
-- execute("SET statement_timeout TO 0")
   -> 0.0004s
-- execute("UPDATE events\nSET group_id = epics.group_id\nFROM notes\nINNER JOIN epics ON epics.id = notes.noteable_id AND notes.noteable_type = 'Epic'\nWHERE events.target_type = 'Note'\nAND notes.id = events.target_id\nAND events.id IN (SELECT \"events\".\"id\" FROM \"events\" INNER JOIN notes ON notes.id = events.target_id AND events.target_type = 'Note' WHERE (events.group_id IS NULL) AND (events.project_id IS NULL) AND (notes.noteable_type ='Epic') AND (events.target_type = 'Note') AND \"events\".\"id\" >= 1 AND \"events\".\"id\" < 6)\n")
   -> 0.0036s
-- execute("UPDATE events\nSET group_id = epics.group_id\nFROM notes\nINNER JOIN epics ON epics.id = notes.noteable_id AND notes.noteable_type = 'Epic'\nWHERE events.target_type = 'Note'\nAND notes.id = events.target_id\nAND events.id IN (SELECT \"events\".\"id\" FROM \"events\" INNER JOIN notes ON notes.id = events.target_id AND events.target_type = 'Note' WHERE (events.group_id IS NULL) AND (events.project_id IS NULL) AND (notes.noteable_type ='Epic') AND (events.target_type = 'Note') AND \"events\".\"id\" >= 6 AND \"events\".\"id\" < 8)\n")
   -> 0.0055s
-- execute("UPDATE events\nSET group_id = epics.group_id\nFROM notes\nINNER JOIN epics ON epics.id = notes.noteable_id AND notes.noteable_type = 'Epic'\nWHERE events.target_type = 'Note'\nAND notes.id = events.target_id\nAND events.id IN (SELECT \"events\".\"id\" FROM \"events\" INNER JOIN notes ON notes.id = events.target_id AND events.target_type = 'Note' WHERE (events.group_id IS NULL) AND (events.project_id IS NULL) AND (notes.noteable_type ='Epic') AND (events.target_type = 'Note') AND \"events\".\"id\" >= 8 AND \"events\".\"id\" < 10)\n")
   -> 0.0030s
-- execute("UPDATE events\nSET group_id = epics.group_id\nFROM notes\nINNER JOIN epics ON epics.id = notes.noteable_id AND notes.noteable_type = 'Epic'\nWHERE events.target_type = 'Note'\nAND notes.id = events.target_id\nAND events.id IN (SELECT \"events\".\"id\" FROM \"events\" INNER JOIN notes ON notes.id = events.target_id AND events.target_type = 'Note' WHERE (events.group_id IS NULL) AND (events.project_id IS NULL) AND (notes.noteable_type ='Epic') AND (events.target_type = 'Note') AND \"events\".\"id\" >= 10 AND \"events\".\"id\" < 12)\n")
   -> 0.0050s
-- execute("UPDATE events\nSET group_id = epics.group_id\nFROM notes\nINNER JOIN epics ON epics.id = notes.noteable_id AND notes.noteable_type = 'Epic'\nWHERE events.target_type = 'Note'\nAND notes.id = events.target_id\nAND events.id IN (SELECT \"events\".\"id\" FROM \"events\" INNER JOIN notes ON notes.id = events.target_id AND events.target_type = 'Note' WHERE (events.group_id IS NULL) AND (events.project_id IS NULL) AND (notes.noteable_type ='Epic') AND (events.target_type = 'Note') AND \"events\".\"id\" >= 12 AND \"events\".\"id\" < 14)\n")
   -> 0.0027s
-- execute("UPDATE events\nSET group_id = epics.group_id\nFROM notes\nINNER JOIN epics ON epics.id = notes.noteable_id AND notes.noteable_type = 'Epic'\nWHERE events.target_type = 'Note'\nAND notes.id = events.target_id\nAND events.id IN (SELECT \"events\".\"id\" FROM \"events\" INNER JOIN notes ON notes.id = events.target_id AND events.target_type = 'Note' WHERE (events.group_id IS NULL) AND (events.project_id IS NULL) AND (notes.noteable_type ='Epic') AND (events.target_type = 'Note') AND \"events\".\"id\" >= 14)\n")
   -> 0.0033s
-- execute("RESET ALL")
   -> 0.0015s
== 20191202175443 FixOrphanEpicsEvents: migrated (0.0729s) ====================

related to #34200 (closed)

Conformity

Edited by 🤖 GitLab Bot 🤖

Merge request reports