Increase remote import URL character length limit from 512 to 2048
What does this MR do and why?
Currently the character limit for the Import/Export URL used by the Import a file from a remote object storage feature is set to 512
. If pre-signed URLs are used then it can easily exceed this limit.
This MR aims to increase the remote_import_url
under import_export_uploads
table from 512
to 2048
.
This was raised from this issue.
Migration Output
$ bundle exec rails db:migrate:up VERSION=20220321025720
== 20220321025720 AlterConstraintRemoteImportUrl: migrating ===================
-- transaction_open?()
-> 0.0000s
-- transaction_open?()
-> 0.0000s
-- execute("ALTER TABLE import_export_uploads\nDROP CONSTRAINT IF EXISTS check_58f0d37481\n")
-> 0.0018s
-- transaction_open?()
-> 0.0000s
-- current_schema()
-> 0.0002s
-- transaction_open?()
-> 0.0000s
-- execute("ALTER TABLE import_export_uploads\nADD CONSTRAINT check_58f0d37481\nCHECK ( char_length(remote_import_url) <= 2048 )\nNOT VALID;\n")
-> 0.0033s
-- current_schema()
-> 0.0003s
-- execute("SET statement_timeout TO 0")
-> 0.0007s
-- execute("ALTER TABLE import_export_uploads VALIDATE CONSTRAINT check_58f0d37481;")
-> 0.0014s
-- execute("RESET statement_timeout")
-> 0.0005s
== 20220321025720 AlterConstraintRemoteImportUrl: migrated (0.0245s) ==========
$ bundle exec rails db:migrate:down VERSION=20220321025720
== 20220321025720 AlterConstraintRemoteImportUrl: reverting ===================
== 20220321025720 AlterConstraintRemoteImportUrl: reverted (0.0000s) ==========
Screenshots or screen recordings
N/A
How to set up and validate locally
- The migrations can be run locally via
bundle exec rails db:migrate:up
andbundle exec rails db:migrate:down
.
Test Results
- I performed some basic tests around this API by using a URL that exceeds 512 character length.
curl --request POST \
> --header "PRIVATE-TOKEN: <REDACTED>" \
> --header "Content-Type: application/json" \
> --url "http://localhost:3000/api/v4/projects/remote-import" \
> --data '{"url":"https://<REDACTED>.s3.amazonaws.com/test.txt.txt?123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF","path":"remote-project"}'
{"message":"PG::CheckViolation: ERROR: new row for relation \"import_export_uploads\" violates check constraint \"check_58f0d37481\"\nDETAIL: Failing row contains (1, 2022-02-18 02:23:55.708108+00, 20, null, null, null, https://kentballon-test-bucket.s3.amazonaws.com/test.txt.txt?123...).\n"}
- After updating the limit from 512 to 2048 using
db:migrate:up
, I don't hit this error anymore.
curl --request POST \
> --header "PRIVATE-TOKEN: <REDACTED>" \
> --header "Content-Type: application/json" \
> --url "http://localhost:3000/api/v4/projects/remote-import" \
> --data '{"url":"https://<REDACTED>.s3.amazonaws.com/test.txt.txt?123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF123123ABCDEF","path":"remote-project"}'
{"id":21,"description":null,"name":"remote-project","name_with_namespace":"gdk_user_01 / remote-project","path":"remote-project","path_with_namespace":"gdk_user_01/remote-project","created_at":"2022-02-18T02:27:47.052Z","import_status":"scheduled","import_type":"gitlab_project","correlation_id":"01FW5AG7YWZQT9CMRDZTWXR741","failed_relations":[],"import_error":null,"stats":null}
MR acceptance checklist
This checklist encourages us to confirm any changes have been analyzed to reduce risks in quality, performance, reliability, security, and maintainability.
-
I have evaluated the MR acceptance checklist for this MR.
Edited by Kent Japhet Ballon