Add JiraTrackerData sharding key db trigger
What does this MR do and why?
This MR adds a db trigger that sets a sharding key on jira_tracker_data table for records that don't have one (when project_id/group_id/organization_id is nil). This way we can ensure every record on this table has a sharding key and we can re-enqueue the batched background migration !194007 (merged) in order to fix leftover records and then proceed with setting a not null constraint on this table (in the future MR).
Migration Output
Up
main: == [advisory_lock_connection] object_id: 143880, pg_backend_pid: 33437
main: == 20250812120722 AddJiraTrackerDataShardingKeyTrigger: migrating =============
main: -- execute("CREATE OR REPLACE FUNCTION update_jira_tracker_data_sharding_key()\nRETURNS TRIGGER AS\n$$\nBEGIN\nSELECT\n \"integrations\".\"project_id\",\n \"integrations\".\"group_id\",\n \"integrations\".\"organization_id\"\nINTO\n NEW.\"project_id\",\n NEW.\"group_id\",\n NEW.\"organization_id\"\nFROM \"integrations\"\nWHERE \"integrations\".\"id\" = NEW.\"integration_id\";\nRETURN NEW;\n\nEND\n$$ LANGUAGE PLPGSQL\n")
main: -> 0.0215s
main: -- execute("CREATE TRIGGER trigger_jira_tracker_data_sharding_key_on_insert\nBEFORE INSERT OR UPDATE ON jira_tracker_data\nFOR EACH ROW\nWHEN (NEW.\"project_id\" IS NULL AND NEW.\"group_id\" IS NULL AND NEW.\"organization_id\" IS NULL)\nEXECUTE FUNCTION update_jira_tracker_data_sharding_key()\n")
main: -> 0.0038s
main: == 20250812120722 AddJiraTrackerDataShardingKeyTrigger: migrated (0.0359s) ====
main: == [advisory_lock_connection] object_id: 143880, pg_backend_pid: 33437
ci: == [advisory_lock_connection] object_id: 143880, pg_backend_pid: 33438
ci: == 20250812120722 AddJiraTrackerDataShardingKeyTrigger: migrating =============
ci: -- execute("CREATE OR REPLACE FUNCTION update_jira_tracker_data_sharding_key()\nRETURNS TRIGGER AS\n$$\nBEGIN\nSELECT\n \"integrations\".\"project_id\",\n \"integrations\".\"group_id\",\n \"integrations\".\"organization_id\"\nINTO\n NEW.\"project_id\",\n NEW.\"group_id\",\n NEW.\"organization_id\"\nFROM \"integrations\"\nWHERE \"integrations\".\"id\" = NEW.\"integration_id\";\nRETURN NEW;\n\nEND\n$$ LANGUAGE PLPGSQL\n")
ci: -> 0.0087s
ci: -- execute("CREATE TRIGGER trigger_jira_tracker_data_sharding_key_on_insert\nBEFORE INSERT OR UPDATE ON jira_tracker_data\nFOR EACH ROW\nWHEN (NEW.\"project_id\" IS NULL AND NEW.\"group_id\" IS NULL AND NEW.\"organization_id\" IS NULL)\nEXECUTE FUNCTION update_jira_tracker_data_sharding_key()\n")
ci: -> 0.0030s
ci: == 20250812120722 AddJiraTrackerDataShardingKeyTrigger: migrated (0.0392s) ====
ci: == [advisory_lock_connection] object_id: 143880, pg_backend_pid: 33438
Down
main: == [advisory_lock_connection] object_id: 143580, pg_backend_pid: 32901
main: == 20250812120722 AddJiraTrackerDataShardingKeyTrigger: reverting =============
main: -- execute("DROP TRIGGER IF EXISTS trigger_jira_tracker_data_sharding_key_on_insert ON jira_tracker_data")
main: -> 0.0291s
main: -- execute("DROP FUNCTION IF EXISTS update_jira_tracker_data_sharding_key()")
main: -> 0.0043s
main: == 20250812120722 AddJiraTrackerDataShardingKeyTrigger: reverted (0.0539s) ====
main: == [advisory_lock_connection] object_id: 143580, pg_backend_pid: 32901
ci: == [advisory_lock_connection] object_id: 143580, pg_backend_pid: 32944
ci: == 20250812120722 AddJiraTrackerDataShardingKeyTrigger: reverting =============
ci: -- execute("DROP TRIGGER IF EXISTS trigger_jira_tracker_data_sharding_key_on_insert ON jira_tracker_data")
ci: -> 0.0219s
ci: -- execute("DROP FUNCTION IF EXISTS update_jira_tracker_data_sharding_key()")
ci: -> 0.0036s
ci: == 20250812120722 AddJiraTrackerDataShardingKeyTrigger: reverted (0.0511s) ====
References
Screenshots or screen recordings
| Before | After |
|---|---|
How to set up and validate locally
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 George Koltsov