Add `PagesDeployment` upload_ready field
What does this MR do and why?
Add PagesDeployment
upload_ready field
Before serving pages directly from pages_deployments, we were creating
an PagesDeployment
and in the commit callback, the ZIP file was
uploaded. Only after the PagesDeployment
entry was committed to the
database, we would update the ProjectPagesMetadatum
to indicate the
deployment was ready.
Now, serving pages directly from pages_deployments, created a problem
where we're starting to serve a PagesDeployment
before its upload is
ready.
To fix that, a new upload_ready
column will be introduced, to
signalize when the new PagesDeployment
upload is finished and we
start to serve it.
PS.: This fix intermittent errors (404 not found) on large GitLab Pages sites, that might take longer to upload to the object storage.
Migrations
bundle exec rails db:migrate:up:main VERSION=20231115091119
main: == [advisory_lock_connection] object_id: 184260, pg_backend_pid: 55977
main: == 20231115091119 AddUploadFinishedToPagesDeployments: migrating ==============
main: -- add_column(:pages_deployments, :upload_ready, :boolean, {:default=>true})
main: -> 0.0045s
main: == 20231115091119 AddUploadFinishedToPagesDeployments: migrated (0.0186s) =====
main: == [advisory_lock_connection] object_id: 184260, pg_backend_pid: 55977
bundle exec rails db:migrate:up:ci VERSION=20231115091119
ci: == [advisory_lock_connection] object_id: 224360, pg_backend_pid: 57557
ci: == 20231115091119 AddUploadFinishedToPagesDeployments: migrating ==============
ci: -- add_column(:pages_deployments, :upload_ready, :boolean, {:default=>true})
ci: -> 0.0040s
ci: == 20231115091119 AddUploadFinishedToPagesDeployments: migrated (0.0354s) =====
ci: == [advisory_lock_connection] object_id: 224360, pg_backend_pid: 57557
bundle exec rails db:migrate VERSION="20231115151449"
main: == [advisory_lock_connection] object_id: 184580, pg_backend_pid: 60858
main: == 20231115151449 UpdatePagesDeploymentsUploadReadyDefaultValue: migrating ====
main: -- change_column_default(:pages_deployments, :upload_ready, {:from=>true, :to=>false})
main: -> 0.1482s
main: == 20231115151449 UpdatePagesDeploymentsUploadReadyDefaultValue: migrated (0.1667s)
main: == [advisory_lock_connection] object_id: 184580, pg_backend_pid: 60858
ci: == [advisory_lock_connection] object_id: 184780, pg_backend_pid: 60861
ci: == 20231115151449 UpdatePagesDeploymentsUploadReadyDefaultValue: migrating ====
ci: -- change_column_default(:pages_deployments, :upload_ready, {:from=>true, :to=>false})
ci: -> 0.0108s
ci: == 20231115151449 UpdatePagesDeploymentsUploadReadyDefaultValue: migrated (0.0496s)
ci: == [advisory_lock_connection] object_id: 184780, pg_backend_pid: 60861
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.
-
I have evaluated the MR acceptance checklist for this MR.