WIP: Update CarrierWave v2.0.2
CarrierWave v2.0.2 has a significant change where object storage uploads are handled outside of the database transaction (https://github.com/carrierwaveuploader/carrierwave/pull/2209). This should alleviate some idle-in-transaction timeouts.
Before
Uploads
graph LR
A[Projects::UploadsController#create] --> B[CarrierWave: Save file to object storage]
B --> C[BEGIN]
C --> D["INSERT INTO uploads (file_store = 2) ..."]
D --> E[COMMIT]
- Project exports behave similarly but start here: https://gitlab.com/gitlab-org/gitlab-ee/blob/e960c6372834fb153febccd4a6980d60e1364d0a/lib/gitlab/import_export/saver.rb#L59
LFS
graph LR
A[Projects::LfsStorageController#upload_finalize] --> B[BEGIN]
B --> C["INSERT INTO lfs_objects ..."]
C --> D[CarrierWave: Save file to object storage]
D --> E["UPDATE lfs_objects SET file_store = 2 ..."]
E --> F[COMMIT]
CI Artifacts
graph LR
A["POST /api/v4/jobs/:job_id/artifacts"] --> B[BEGIN]
B --> C[INSERT INTO ci_job_artifacts]
C --> D[CarrierWave: Save file to object storage]
D --> E["UPDATE ci_job_artifacts SET file_store = 2 ..."]
E --> F[COMMIT]
- CI traces inserted here: https://gitlab.com/gitlab-org/gitlab-ee/blob/226feebe97cbfd93c6ad5eac71db98944629c830/lib/gitlab/ci/trace.rb#L213
- CI artifacts inserted here: https://gitlab.com/gitlab-org/gitlab/blob/226feebe97cbfd93c6ad5eac71db98944629c830/lib/api/runner.rb#L282-298
After
Uploads
Same as before
LFS
graph LR
A[Projects::LfsStorageController#upload_finalize] --> B[BEGIN]
B --> C["INSERT INTO lfs_objects ..."]
C --> D[COMMIT]
D --> E[CarrierWave: Save file to object storage]
E --> F["UPDATE lfs_objects SET file_store = 2 ..."]
CI Artifacts
graph LR
A["POST /api/v4/jobs/:job_id/artifacts"] --> B[BEGIN]
B --> C[INSERT INTO ci_job_artifacts]
C --> D[COMMIT]
D --> E[CarrierWave: Save file to object storage]
E --> F["UPDATE ci_job_artifacts SET file_store = 2 ..."]
Relates to #34091 (closed)
Edited by Stan Hu