-
Notifications
You must be signed in to change notification settings - Fork 212
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Get sources list for filter from content_provider table #5180
Conversation
d081b52
to
9cb7135
Compare
@@ -866,10 +890,6 @@ def is_pending(self, obj): | |||
"is_pending", | |||
"media_id", # used because ``media_obj`` does not render a link | |||
) | |||
list_filter = ( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why is this filter removed, @krysal ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We need to reduce potential issues when rendering the page, and the filters declared this way will result in more DISTINCT
queries, which are prohibitively expensive in the image table. After confirming we can access the image list, we can re-add these filters optimally (like done here with sources), although I don't see them listed in the admin currently.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's disappointing that the default filter query is so expensive!
This is the query I get for images locally (and I hope if will be faster):
SELECT
"image"."id",
"image"."created_on",
"image"."updated_on",
"image"."identifier",
"image"."foreign_identifier",
"image"."title",
"image"."foreign_landing_url",
"image"."creator",
"image"."creator_url",
"image"."thumbnail",
"image"."provider",
"image"."url",
"image"."filesize",
"image"."filetype",
"image"."watermarked",
"image"."license",
"image"."license_version",
"image"."source",
"image"."last_synced_with_source",
"image"."removed_from_source",
"image"."view_count",
"image"."tags",
"image"."category",
"image"."meta_data",
"image"."width",
"image"."height",
COUNT("nsfw_reports"."id") AS "total_report_count",
(COUNT("nsfw_reports"."id") - COUNT("nsfw_reports"."decision_id")) AS "pending_report_count",
MIN("nsfw_reports"."created_at") AS "oldest_report_date"
FROM
"image"
INNER JOIN
"nsfw_reports"
ON
("image"."identifier" = "nsfw_reports"."identifier")
WHERE
"nsfw_reports"."id" IS NOT NULL
GROUP BY
"image"."id"
HAVING
(COUNT("nsfw_reports"."id") - COUNT("nsfw_reports"."decision_id")) > 0
ORDER BY
"total_report_count" DESC,
"pending_report_count" DESC,
"oldest_report_date" ASC,
"image"."id" DESC;
@obulat, you can check how fast it is in Grafana. Thanks for the review! |
Fixes
Fixes #5174 by @krysal
Description
As mentioned in the issue discussion, this PR optimizes the
source
filter by getting the list from the source table. The provider filter is removed as it involves a similar query and we need to confirm this works first.Testing Instructions
Run the API,
just api/up
, and observe the filter changes at:Checklist
Update index.md
).main
) or a parent feature branch.ov just catalog/generate-docs
for catalog PRs) or the media properties generator (ov just catalog/generate-docs media-props
for the catalog orov just api/generate-docs
for the API) where applicable.Developer Certificate of Origin
Developer Certificate of Origin