fix(filters): prevent shared Filters instance in concurrent requests #2367
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.
Description
This PR fixes a concurrency-related bug in Flask App Builder’s default API filter handling.
About issue
🐞 Bug Summary
In the default implementation of the FAB API model,
Filtersinstances are often stored as class-level instance variables (e.g.,self._filters). Under concurrent request processing—especially in async or multi-threaded environments—this leads to shared mutable state across requests. As a result:self._filtersis mutated simultaneously by different request handlers;🔧 Fix Summary
To eliminate shared state pollution between concurrent requests:
_handle_filters_argsmethod is now refactored to instantiate a newFiltersobject per request;self._filters;self._filters(if any) is preserved for non-query metadata logic likemerge_search_filters().💡 Design Notes
.clear_filters()on the shared instance because it does not guarantee thread safety;ADDITIONAL INFORMATION