-
Notifications
You must be signed in to change notification settings - Fork 96
perf(rich_workspace): only add property for parent #5963
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
base: main
Are you sure you want to change the base?
perf(rich_workspace): only add property for parent #5963
Conversation
So the test actually has a comment on this that proofs what we discussed in the call: text/cypress/e2e/propfind.spec.js Lines 43 to 56 in 3a9c4f6
@alperozturk96 Can you keep us posted here on if that is possible to address on Android? |
Other failure is unrelated. |
b55ef41
to
4a48aa3
Compare
Good to know ! @mpivchev |
Discussed with @tobiasKaminsky as we couldn't think of a proper way to make the root only result working with android:
|
Then performance regression is not fixed on Android, having ~10-100 times slower root update than it was in 27 |
True, but this should already have been the case before 28. Though only considered as an alternative, caching is probably the most reasonable |
Why? It was added only in 28, or I got it wrong? |
No, the clients already request this property since a long time. 28 only introduced a change where the web frontend now also fetches those, so the performance issue is also there earlier, just was never noticed. |
Working on this solution |
d7153a2
to
3e05364
Compare
After this came up again as a performance bottleneck also for local folders, I pushed a change as an additional commit to introduce a separate property that only returns the workspace on the root node. This is mainly to keep backward compatibility for the mobile clients that as far as I understood @tobiasKaminsky do not have a good way to work with only the parent workspace result. Performance wise the clients should also switch to the flat property at some point, so maybe you can check if that is still the case. |
@juliusknorr if there is no "regression", then client will work. |
Can you test the clients with this specific commit e5efd64 ? That would help to decide if we actually need the extra one. I remember in the past the clients were confused when navigating around folders as the property was then intitially not reported on the child folders, only once you did a propfind directly to it. |
failing cypress test seems related |
Signed-off-by: Grigorii K. Shartsev <[email protected]>
Signed-off-by: Grigorii K. Shartsev <[email protected]>
3e05364
to
f88f331
Compare
Signed-off-by: Julius Knorr <[email protected]>
f88f331
to
be1604f
Compare
📝 Summary
Fixes a performance regression for instances with many external storages.
Steps to reproduce
text
app/apps/files/files
for PROPFIND request for local s3.With external s3, like Amazon, it could be 10 times slower.
That was a regression in 28.
The problem
There is a new
<nc:rich_workspace>
property in each Node in the response. To add this property (even empty),text
checks for a file in every child folder, which could be an external remote storage.Having a hundred external storages mounted in one parent, it results in a hundred requests to remotes for the data that is not really required to have in advance.
🚧 TODO
💥 Breaking changes
This breaks the Android Files client a bit—it uses a response from a parent to know about description in children.
Broken scenario:
Alternative solution
Only ignore external storages, which has the most performance impact.
🏁 Checklist
npm run lint
/npm run stylelint
/composer run cs:check
)