Take into account design_id when fetching resized design images
What does this MR do and why?
MR updates the way resized design images are served.
The first implementation (see b6ee6cdf) solved issue by modifying the existing sub query (by filtering selection by issue_id
) which was working well and was issuing the same amount of queries as current master. But in the end I picked solution that you see here (see 8ec14e94) which does an extra query (to fetch design version by sha
) but DB queries that it produces are simpler (basically the same queries as in version 1 but unwrapped) and easier to follow.
Why
For more info check the #386148
Screenshots or screen recordings
DB queries
Before:
SELECT
DISTINCT ON (design_management_designs_versions.design_id) design_management_designs_versions.*
FROM
"design_management_designs_versions"
WHERE
"design_management_designs_versions"."design_id" = ?
AND "design_management_designs_versions"."version_id" <= (
SELECT
"design_management_versions"."id"
FROM
"design_management_versions"
WHERE
"design_management_versions"."sha" = ?
)
ORDER BY
"design_management_designs_versions"."design_id" ASC,
"design_management_designs_versions"."version_id" DESC;
Query explanation | private link
After:
# Query 1 (Issued by `design.versions.find_by_sha(sha)`)
SELECT
"design_management_versions".*
FROM
"design_management_versions"
INNER JOIN "design_management_designs_versions" ON "design_management_versions"."id" = "design_management_designs_versions"."version_id"
WHERE
"design_management_designs_versions"."design_id" = ?
AND "design_management_versions"."sha" = ?
LIMIT
1
# Query 2 ("version_id" <= ? value is taken from result of previous query)
SELECT
DISTINCT ON (design_management_designs_versions.design_id) design_management_designs_versions.*
FROM
"design_management_designs_versions"
WHERE
"design_management_designs_versions"."design_id" = ?
AND "design_management_designs_versions"."version_id" <= ?
ORDER BY
"design_management_designs_versions"."design_id" ASC,
"design_management_designs_versions"."version_id" DESC
LIMIT
1
How to set up and validate locally
- Pick 2 issues and upload a different design image to each of it (Just in case, sample issue URLs: http://gdk.test:3000/flightjs/Flight/-/issues/1, http://gdk.test:3000/flightjs/Flight/-/issues/2)
- Run
DesignManagement::Version.last(2).map { |v| v.update(sha: "5b2f845642849871ab359cb4938fe2b75950adb6") }
(Set their version hash to the same sha) - Refresh the issue pages (from 1.), previews should still be rendered (You can also drop cache or restart rails + webpack to be sure that it's not just a cache)
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.
Fixes #386148