Skip to content

Increase pypi required_python field size to 255

Giorgenes Gelatti requested to merge 241492-increase-pypi-version-size into master

What does this MR do?

Some clients are unable to upload pypi packages due to their required_python setting be over 50 characters. This MR increases the limit and updates specs.

Migrations

Up

== 20200901214416 ChangePypiPythonVersionType: migrating ======================
-- column_exists?(:packages_pypi_metadata, :package_id)
   -> 0.0021s
-- transaction_open?()
   -> 0.0000s
-- columns(:packages_pypi_metadata)
   -> 0.0014s
-- add_column(:packages_pypi_metadata, "required_python_for_type_change", :text, {:limit=>50, :precision=>nil, :scale=>nil})
   -> 0.0080s
-- transaction_open?()
   -> 0.0000s
-- exec_query("SELECT COUNT(*) AS count FROM \"packages_pypi_metadata\"")
   -> 0.0009s
-- transaction_open?()
   -> 0.0000s
-- execute("ALTER TABLE packages_pypi_metadata\nADD CONSTRAINT check_0d9aed55b2\nCHECK ( required_python_for_type_change IS NOT NULL )\nNOT VALID;\n")
   -> 0.0009s
-- execute("ALTER TABLE packages_pypi_metadata VALIDATE CONSTRAINT check_0d9aed55b2;")
   -> 0.0016s
-- indexes(:packages_pypi_metadata)
   -> 0.0018s
-- foreign_keys(:packages_pypi_metadata)
   -> 0.0033s
-- quote_table_name(:packages_pypi_metadata)
   -> 0.0000s
-- quote_column_name(:required_python)
   -> 0.0000s
-- quote_column_name("required_python_for_type_change")
   -> 0.0000s
-- execute("CREATE OR REPLACE FUNCTION trigger_d5eb03a59792()\nRETURNS trigger AS\n$BODY$\nBEGIN\n  NEW.\"required_python_for_type_change\" := NEW.\"required_python\";\n  RETURN NEW;\nEND;\n$BODY$\nLANGUAGE 'plpgsql'\nVOLATILE\n")
   -> 0.0055s
-- execute("DROP TRIGGER IF EXISTS trigger_d5eb03a59792\nON \"packages_pypi_metadata\"\n")
   -> 0.0007s
-- execute("CREATE TRIGGER trigger_d5eb03a59792\nBEFORE INSERT OR UPDATE\nON \"packages_pypi_metadata\"\nFOR EACH ROW\nEXECUTE FUNCTION trigger_d5eb03a59792()\n")
   -> 0.0016s
== 20200901214416 ChangePypiPythonVersionType: migrated (0.0573s) =============

== 20200909194014 ChangePypiPythonVersionTypeCleanup: migrating ===============
-- transaction()
-- execute("DROP TRIGGER IF EXISTS trigger_d5eb03a59792 ON packages_pypi_metadata")
   -> 0.0007s
-- execute("DROP FUNCTION IF EXISTS trigger_d5eb03a59792()")
   -> 0.0004s
-- remove_column(:packages_pypi_metadata, :required_python)
   -> 0.0009s
-- rename_column(:packages_pypi_metadata, "required_python_for_type_change", :required_python)
   -> 0.0059s
   -> 0.0106s
== 20200909194014 ChangePypiPythonVersionTypeCleanup: migrated (0.0107s) ======

== 20200909194524 IncreasePypiVersionSize: migrating ==========================
-- transaction_open?()
   -> 0.0000s
-- execute("ALTER TABLE packages_pypi_metadata\nADD CONSTRAINT check_379019d5da\nCHECK ( char_length(required_python) <= 255 )\nNOT VALID;\n")
   -> 0.0008s
-- execute("ALTER TABLE packages_pypi_metadata VALIDATE CONSTRAINT check_379019d5da;")
   -> 0.0013s
== 20200909194524 IncreasePypiVersionSize: migrated (0.0077s) =================

Down

== 20200909194524 IncreasePypiVersionSize: reverting ==========================
-- execute("ALTER TABLE packages_pypi_metadata\nDROP CONSTRAINT IF EXISTS check_379019d5da\n")
   -> 0.0013s
== 20200909194524 IncreasePypiVersionSize: reverted (0.0072s) =================

== 20200909194014 ChangePypiPythonVersionTypeCleanup: reverting ===============
-- execute("UPDATE packages_pypi_metadata SET required_python = substring(required_python from 1 for 50)")
   -> 0.0010s
-- column_exists?(:packages_pypi_metadata, :package_id)
   -> 0.0022s
-- transaction_open?()
   -> 0.0000s
-- columns(:packages_pypi_metadata)
   -> 0.0011s
-- add_column(:packages_pypi_metadata, "required_python_for_type_change", "varchar(50)", {:limit=>nil, :precision=>nil, :scale=>nil})
   -> 0.0023s
-- transaction_open?()
   -> 0.0000s
-- exec_query("SELECT COUNT(*) AS count FROM \"packages_pypi_metadata\"")
   -> 0.0007s
-- indexes(:packages_pypi_metadata)
   -> 0.0016s
-- foreign_keys(:packages_pypi_metadata)
   -> 0.0034s
-- quote_table_name(:packages_pypi_metadata)
   -> 0.0000s
-- quote_column_name(:required_python)
   -> 0.0000s
-- quote_column_name("required_python_for_type_change")
   -> 0.0000s
-- execute("CREATE OR REPLACE FUNCTION trigger_d5eb03a59792()\nRETURNS trigger AS\n$BODY$\nBEGIN\n  NEW.\"required_python_for_type_change\" := NEW.\"required_python\";\n  RETURN NEW;\nEND;\n$BODY$\nLANGUAGE 'plpgsql'\nVOLATILE\n")
   -> 0.0031s
-- execute("DROP TRIGGER IF EXISTS trigger_d5eb03a59792\nON \"packages_pypi_metadata\"\n")
   -> 0.0003s
-- execute("CREATE TRIGGER trigger_d5eb03a59792\nBEFORE INSERT OR UPDATE\nON \"packages_pypi_metadata\"\nFOR EACH ROW\nEXECUTE FUNCTION trigger_d5eb03a59792()\n")
   -> 0.0021s
== 20200909194014 ChangePypiPythonVersionTypeCleanup: reverted (0.0213s) ======

== 20200901214416 ChangePypiPythonVersionType: reverting ======================
-- transaction()
-- execute("DROP TRIGGER IF EXISTS trigger_d5eb03a59792 ON packages_pypi_metadata")
   -> 0.0008s
-- execute("DROP FUNCTION IF EXISTS trigger_d5eb03a59792()")
   -> 0.0003s
-- remove_column(:packages_pypi_metadata, :required_python)
   -> 0.0006s
-- rename_column(:packages_pypi_metadata, "required_python_for_type_change", :required_python)
   -> 0.0022s
   -> 0.0075s
-- change_column_null(:packages_pypi_metadata, :required_python, false)
   -> 0.0015s
== 20200901214416 ChangePypiPythonVersionType: reverted (0.0092s) =============

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

Closes #241492 (closed)

Edited by Giorgenes Gelatti

Merge request reports