Speed up entities query for dataset CSV export and entity OData #1271
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
We (myself, QA, LN, etc.) have been noticing lately that entity lists, both in frontend and in forms in enketo, have been taking an uncomfortably long time to load.
Notes:
This PR removes a piece of the bulk entity query that computed the # of updates per entity. I did some historical sleuthing to figure out why we return
updates
count as well asversion
whenupdates
always seems like it will beversion - 1
.updates
count was added along withupdatedAt
, which could be selected and filtered on in odata.version
yetversion
s added to support entity updates via submissionversion
for each entity def within an entity, so it's more informative than a simpleupdates
countAnyway,
updates
is baked into a lot of code, e.g. used by frontend, probably expected by people working with entities via odata, and we can't/shouldn't remove it. However, we always increment theversion
of the def by 1 when we update it, both through an API PATCH request and through a submission, so it's a good proxy for countingupdates
. I tried to make minimal code changes to remove the slow part of the query and calculateupdates
directly fromversion
.What has been done to verify that this works as intended?
Tests have mostly stayed the same (except for some minor changes to some unit tests) and I've seen queries get much faster locally.
Why is this the best possible solution? Were any other approaches considered?
See explanation above.
How does this change affect users? Describe intentional changes to behavior and behavior that could have accidentally been affected by code changes. In other words, what are the regression risks?
Shouldn't change things for users except speed things up.
Does this change require updates to the API documentation? If so, please update docs/api.yaml as part of this PR.
No.
Before submitting this PR, please make sure you have:
make test
and confirmed all checks still pass OR confirm CircleCI build passes