F query panel inf loop
Summary
- Fix for caosdb-webui#223, related issue caosdb/customers/leibniz-zmt/management#232
- Fix for caosdb-webui#225, related issue #7 (closed)
Focus
- the browser's internal autocompletion was switched off with a one-liner.
- The infinite loop happened when:
- Two consecutive calls to the
reducerfunction with "onChange" on state s0. This sets thestate.unresolvedSuggestionsproperty (which is a promise) and results in two states, s1 and s2. s2 is now the current state and s1 is an old state which should just be forgotten. - The
useEffecthook triggers two times (once for eachstate.unresolvedSuggestions). This calls thereducervia thedispatchfunction. - When the second
unresolvedSuggestionspromise resolves before the first, the reducer receives the old state s1, sets thestate.suggestionsand, originally, it copied the old (s1's)unresolvedSuggestionsproperty which is different from s2'sunresolvedSuggestions and henve triggersuseEffect` a third time. - Then the first
unresolvedSuggestionspromise resolves and sets the state back to s2, triggeringuseEffecta 4th time. - The state then always switches between s1 and s2 and we have an infinite loop, voilá.
- Two consecutive calls to the
- Because the timing is crucial here it is easier to provoke the loop when the computer is weak or under high load already. The browser's autocompletion popping up also made it more likely to trigger it.
Test Environment
- New tests have been written, however it would make sense to try and provoke the loop manually by starting linkahead with the old implementation and this fix to see the actual impact of this fix.
Check List for the Author
Please, prepare your MR for a review. Be sure to write a summary and a focus and create gitlab comments for the reviewer. They should guide the reviewer through the changes, explain your changes and also point out open questions. For further good practices have a look at our review guidelines
-
All automated tests pass -
Reference related issues -
Up-to-date CHANGELOG.md (or not necessary) -
Up-to-date JSON schema (or not necessary) -
Appropriate user and developer documentation (or not necessary) - How do I use the software? Assume "stupid" users.
- How do I develop or debug the software? Assume novice developers.
-
Annotations in code (Gitlab comments) - Intent of new code
- Problems with old code
- Why this implementation?
Check List for the Reviewer
-
I understand the intent of this MR -
All automated tests pass -
Up-to-date CHANGELOG.md (or not necessary) -
Appropriate user and developer documentation (or not necessary) -
The test environment setup works and the intended behavior is reproducible in the test environment -
In-code documentation and comments are up-to-date. -
Check: Are there specifications? Are they satisfied?
For further good practices have a look at our review guidelines.
Edited by Florian Spreckelsen