Skip to content

Match dotenv variable limits across subscription plans

Marius Bobin requested to merge mb-pa-sync-dotenv-variables-across-plans into master

What does this MR do and why?

In https://gitlab.com/gitlab-org/gitlab/-/blob/931c9f3c133c09209fc8f7a41e1642fe30cb2de7/db/migrate/20211105161404_insert_dotenv_application_limits.rb we failed to update all the plans that are in use on .com so we ended up with plans that are paid but have lower limits than the namespaces that are currently on the free plan:

gitlabhq_production=> select name, dotenv_size, dotenv_variables from plan_limits inner join plans on plan_limits.plan_id = plans.id;
      name      | dotenv_size | dotenv_variables
----------------+-------------+------------------
 early_adopter  |        5120 |               20
 bronze         |        5120 |               20
 silver         |        5120 |               20
 gold           |        5120 |               20
 free           |        5120 |               50
 default        |        5120 |              150
 premium        |        5120 |              100
 ultimate       |        5120 |              150
 ultimate_trial |        5120 |              150
 premium_trial  |        5120 |              100
 opensource     |        5120 |              150
(11 rows)

Related to #357270 (closed) and #357447 (closed)

This should help unblock !70798 (comment 892564947)

Screenshots or screen recordings

$ bin/rails db:migrate
== 20220421144758 ChangeDotenvPlanLimitsForOldPlans: migrating ================
-- quote_column_name("dotenv_variables")
   -> 0.0000s
-- quote("early_adopter")
   -> 0.0000s
-- quote(50)
   -> 0.0000s
-- execute("INSERT INTO plan_limits (plan_id, \"dotenv_variables\")\nSELECT id, '50' FROM plans WHERE name = 'early_adopter' LIMIT 1\nON CONFLICT (plan_id) DO UPDATE SET \"dotenv_variables\" = EXCLUDED.\"dotenv_variables\";\n")
   -> 0.0035s
-- quote_column_name("dotenv_variables")
   -> 0.0000s
-- quote("bronze")
   -> 0.0000s
-- quote(50)
   -> 0.0000s
-- execute("INSERT INTO plan_limits (plan_id, \"dotenv_variables\")\nSELECT id, '50' FROM plans WHERE name = 'bronze' LIMIT 1\nON CONFLICT (plan_id) DO UPDATE SET \"dotenv_variables\" = EXCLUDED.\"dotenv_variables\";\n")
   -> 0.0021s
-- quote_column_name("dotenv_variables")
   -> 0.0000s
-- quote("silver")
   -> 0.0000s
-- quote(100)
   -> 0.0000s
-- execute("INSERT INTO plan_limits (plan_id, \"dotenv_variables\")\nSELECT id, '100' FROM plans WHERE name = 'silver' LIMIT 1\nON CONFLICT (plan_id) DO UPDATE SET \"dotenv_variables\" = EXCLUDED.\"dotenv_variables\";\n")
   -> 0.0010s
-- quote_column_name("dotenv_variables")
   -> 0.0000s
-- quote("gold")
   -> 0.0000s
-- quote(150)
   -> 0.0000s
-- execute("INSERT INTO plan_limits (plan_id, \"dotenv_variables\")\nSELECT id, '150' FROM plans WHERE name = 'gold' LIMIT 1\nON CONFLICT (plan_id) DO UPDATE SET \"dotenv_variables\" = EXCLUDED.\"dotenv_variables\";\n")
   -> 0.0010s
== 20220421144758 ChangeDotenvPlanLimitsForOldPlans: migrated (0.0082s) =======

-- Current migration is skipped since it modifies '[:gitlab_main]' which is outside of '[:gitlab_ci, :gitlab_shared]'
$ bin/rails db:rollback:main
== 20220421144758 ChangeDotenvPlanLimitsForOldPlans: reverting ================
-- quote_column_name("dotenv_variables")
   -> 0.0000s
-- quote("early_adopter")
   -> 0.0000s
-- quote(20)
   -> 0.0000s
-- execute("INSERT INTO plan_limits (plan_id, \"dotenv_variables\")\nSELECT id, '20' FROM plans WHERE name = 'early_adopter' LIMIT 1\nON CONFLICT (plan_id) DO UPDATE SET \"dotenv_variables\" = EXCLUDED.\"dotenv_variables\";\n")
   -> 0.0035s
-- quote_column_name("dotenv_variables")
   -> 0.0000s
-- quote("bronze")
   -> 0.0000s
-- quote(20)
   -> 0.0000s
-- execute("INSERT INTO plan_limits (plan_id, \"dotenv_variables\")\nSELECT id, '20' FROM plans WHERE name = 'bronze' LIMIT 1\nON CONFLICT (plan_id) DO UPDATE SET \"dotenv_variables\" = EXCLUDED.\"dotenv_variables\";\n")
   -> 0.0013s
-- quote_column_name("dotenv_variables")
   -> 0.0000s
-- quote("silver")
   -> 0.0000s
-- quote(20)
   -> 0.0000s
-- execute("INSERT INTO plan_limits (plan_id, \"dotenv_variables\")\nSELECT id, '20' FROM plans WHERE name = 'silver' LIMIT 1\nON CONFLICT (plan_id) DO UPDATE SET \"dotenv_variables\" = EXCLUDED.\"dotenv_variables\";\n")
   -> 0.0009s
-- quote_column_name("dotenv_variables")
   -> 0.0000s
-- quote("gold")
   -> 0.0000s
-- quote(20)
   -> 0.0000s
-- execute("INSERT INTO plan_limits (plan_id, \"dotenv_variables\")\nSELECT id, '20' FROM plans WHERE name = 'gold' LIMIT 1\nON CONFLICT (plan_id) DO UPDATE SET \"dotenv_variables\" = EXCLUDED.\"dotenv_variables\";\n")
   -> 0.0011s
== 20220421144758 ChangeDotenvPlanLimitsForOldPlans: reverted (0.0073s) =======

How to set up and validate locally

Numbered steps to set up and validate the change are strongly suggested.

MR acceptance checklist

This checklist encourages us to confirm any changes have been analyzed to reduce risks in quality, performance, reliability, security, and maintainability.

Edited by Marius Bobin

Merge request reports