fix(timepicker): make pyparsing thread safe#12489
Conversation
villebro
left a comment
There was a problem hiding this comment.
This seems to fix it consistently for me in local dev env. Let's merge this quickly to unblock master and continue refining/optimizing perf later.
dpgaspar
left a comment
There was a problem hiding this comment.
Thank you for the fix, but if pyparser is not thread safe we should start working on removing this dependency
I will hate to see this new feature go, so will many other users, as we already receive some positive feedback from the community. we should figure out a way to fix it forward instead of simply removing the dependency, right? @dpgaspar |
Codecov Report
@@ Coverage Diff @@
## master #12489 +/- ##
==========================================
- Coverage 66.12% 59.16% -6.96%
==========================================
Files 1015 959 -56
Lines 49554 46791 -2763
Branches 5079 4341 -738
==========================================
- Hits 32767 27684 -5083
- Misses 16647 19107 +2460
+ Partials 140 0 -140
Flags with carried forward coverage won't be shown. Click here to find out more.
Continue to review full report at Codecov.
|
|
right @junlincc we should figure out a way to replace the dependency (without removing the feature) not sure if our dependency is light or not. But this needs a more detailed analysis. |
|
I think I may have found another fix: diff --git a/superset/utils/date_parser.py b/superset/utils/date_parser.py
index aee2c83a0..513c740ab 100644
--- a/superset/utils/date_parser.py
+++ b/superset/utils/date_parser.py
@@ -33,6 +33,7 @@ from pyparsing import (
Optional as ppOptional,
ParseException,
ParseResults,
+ ParserElement,
pyparsing_common,
quotedString,
Suppress,
@@ -40,6 +41,8 @@ from pyparsing import (
from .core import memoized
+ParserElement.enablePackrat()
+
logger = logging.getLogger(__name__)
@@ -375,7 +378,7 @@ class EvalHolidayFunc: # pylint: disable=too-few-public-methods
raise ValueError(_("Unable to find such a holiday: [{}]").format(holiday))
-@memoized()
+@memoized
def datetime_parser() -> ParseResults: # pylint: disable=too-many-locals
( # pylint: disable=invalid-name
DATETIME,Could you test this diff and see if it fixes things for you? |
|
Enabling packrat cache seems to have fixed it for me. I'd assume no other programs are using |
|
Looks like packrat cache comes with a lock for free: https://github.com/pyparsing/pyparsing/blob/f10fcf8c98ea07a63f8286288ce82f773e7e152e/pyparsing/core.py#L719 So I'm 90% sure this will fix the bug... (with the additional benefit of making things a little faster). |
I can confirm that this fixes the problem for me, too 👏 This looks like the perfect solution for this case. |
fb1a96a to
24c108b
Compare
I changed this PR to add ParserElement.enablePackrat() and enable cache for datetime_parser, thank you for your finger out this solution |
* fix: make pyparsing thread safe * remove parenthesis for decorator
|
countless thanks to you all for resolving this.🙏 @ktmud @villebro @zhaoyongjie |
* fix: make pyparsing thread safe * remove parenthesis for decorator
|
This was easily one of the ugliest bug in Superset history: elusive, hard to reproduce, thread-safety-related, ... Good work tracking it down and finding a viable fix for this one! |
* fix: make pyparsing thread safe * remove parenthesis for decorator
* release: bump to 1.0.0 and CHANGELOG * fix(explore): long metric name display (#12387) * fix(explore): long metric name display * add tooltip to control * chore: Show datasets when search input is empty (#12391) * chore: Fix typo “Rest” to “Reset” (#12392) * chore: upgrade eslint, babel, and prettier (#12393) * feat(explore): add tooltip to timepicker label (#12401) * chore: change Datasource to Dataset in Explore ui (#12402) * chore(explore):change dataset to datasource in ui * modal * Add space * Changing it back🤦🏾♀️ * Chargeback * fix: Refresh Interval Modal dropdown (#12406) * fix(native-filters): incorrect queriesData state (#12409) * refactor: from superset.utils.core break down date_parser (#12408) * Fixes control panel fields styling (#12236) (#12326) * feat: Resizable dataset and controls panels on Explore view (#12411) * Implement resizable panels on explore view * Optimize chart rendering while resizing * Make dataset column narrower Co-authored-by: Evan Rusackas <evan@preset.io> * fix(dashboard): artefacts shown while drag and dropping deck.gl charts (#12418) * [12181] Fix artifacts while drag and dropping deck.gl charts. * Run prettier * bump superset-ui packages for rolling window change (#12426) * chore: bump superset-ui deckgl plugin (#12466) * fix: do not show vertical scrollbar for charts in dashboard (#12478) * fix: do not show vertical scrollbar for charts in dashboard * Proper fix for #11419 Co-authored-by: Jesse Yang <jesse.yang@airbnb.com> * fix(dashboard): use datasource id from slice metadata (#12483) * fix(timepicker): make pyparsing thread safe (#12489) * fix: make pyparsing thread safe * remove parenthesis for decorator * fix (SQL Lab): disappearing results on tab switch (#12472) * fix (SQL Lab): disappearing results on tab switch * Remove state * Fix test * fix: import ZIP files that have been modified (#12425) * fix: import ZIP files that have been modified * Add unit test * update changelog with rc2 entries * fix: impose dataset ownership check on old API (#12491) * fix: impose dataset ownership check on old API * update UPDATING.md * partially protect the old MVC also * prevent metric and column add and update * ci: remove refs/tags from docker tags on a release (#12518) * ci: remove refs/tags from docker tags on a release * wider head * fix: lowercase all columns in examples (#12530) * fix(explore): time table control panel (#12532) * fix(explore): Add Time section back to FilterBox (#12537) * Fixing Pinot queries for time granularities: WEEKS/MONTHS/QUARTERS/YEARS (#12536) * fix: Select options overflowing Save chart modal on Explore view (#12522) * Fix select options overflowing modal * fix unit test Co-authored-by: Ville Brofeldt <ville.v.brofeldt@gmail.com> * Fix list filters vertical alignment (#12497) * feat(db-engine): Add support for Apache Solr (#12403) * [db engine] Add support for Apache Solr * Fixing typo * chore: rename docker image in build_docker_image.sh, docker-compose.yml and helm values.yaml (#12337) * add rc3 changelog entries * fix: Popover closes on change of dropdowns values (#12410) * fix: Add MAX_SQL_ROW value to LIMIT_DROPDOWN (#12555) * fix(viz): missing groupby and broken adhoc metrics for boxplot (#12556) * fix: height on grid results (#12558) * fix: case expression should not have double quotes (#12562) * Fix 500 error when loading dashboards with slice having deleted dataset (#12535) * add rc4 changelog entries * Fixed typo on line 348 * Added files Co-authored-by: Daniel Gaspar <danielvazgaspar@gmail.com> Co-authored-by: Yongjie Zhao <yongjie.zhao@gmail.com> Co-authored-by: Geido <60598000+geido@users.noreply.github.com> Co-authored-by: Junlin Chen <junlin@preset.io> Co-authored-by: Jesse Yang <jesse.yang@airbnb.com> Co-authored-by: Agata Stawarz <47450693+agatapst@users.noreply.github.com> Co-authored-by: Ville Brofeldt <33317356+villebro@users.noreply.github.com> Co-authored-by: Michael S. Molina <70410625+michael-s-molina@users.noreply.github.com> Co-authored-by: Kamil Gabryjelski <kamil.gabryjelski@gmail.com> Co-authored-by: Evan Rusackas <evan@preset.io> Co-authored-by: Kasia Kucharczyk <2536609+kkucharc@users.noreply.github.com> Co-authored-by: Phillip Kelley-Dotson <pkelleydotson@yahoo.com> Co-authored-by: Grace Guo <grace.guo@airbnb.com> Co-authored-by: Beto Dealmeida <roberto@dealmeida.net> Co-authored-by: Ville Brofeldt <ville.v.brofeldt@gmail.com> Co-authored-by: Xiang Fu <fx19880617@gmail.com> Co-authored-by: Ahmed Adel <github@aadel.io> Co-authored-by: Amit Miran <47772523+amitmiran137@users.noreply.github.com> Co-authored-by: Hugh A. Miles II <hughmil3s@gmail.com> Co-authored-by: Shuyao Bi <shuyaob@andrew.cmu.edu> Co-authored-by: Lyndsi Kay Williams <lyndsikaywilliams@Lyndsis-MacBook-Pro.local>
* fix: make pyparsing thread safe * remove parenthesis for decorator
* release: bump to 1.0.0 and CHANGELOG * fix(explore): long metric name display (apache#12387) * fix(explore): long metric name display * add tooltip to control * chore: Show datasets when search input is empty (apache#12391) * chore: Fix typo “Rest” to “Reset” (apache#12392) * chore: upgrade eslint, babel, and prettier (apache#12393) * feat(explore): add tooltip to timepicker label (apache#12401) * chore: change Datasource to Dataset in Explore ui (apache#12402) * chore(explore):change dataset to datasource in ui * modal * Add space * Changing it back🤦🏾♀️ * Chargeback * fix: Refresh Interval Modal dropdown (apache#12406) * fix(native-filters): incorrect queriesData state (apache#12409) * refactor: from superset.utils.core break down date_parser (apache#12408) * Fixes control panel fields styling (apache#12236) (apache#12326) * feat: Resizable dataset and controls panels on Explore view (apache#12411) * Implement resizable panels on explore view * Optimize chart rendering while resizing * Make dataset column narrower Co-authored-by: Evan Rusackas <evan@preset.io> * fix(dashboard): artefacts shown while drag and dropping deck.gl charts (apache#12418) * [12181] Fix artifacts while drag and dropping deck.gl charts. * Run prettier * bump superset-ui packages for rolling window change (apache#12426) * chore: bump superset-ui deckgl plugin (apache#12466) * fix: do not show vertical scrollbar for charts in dashboard (apache#12478) * fix: do not show vertical scrollbar for charts in dashboard * Proper fix for apache#11419 Co-authored-by: Jesse Yang <jesse.yang@airbnb.com> * fix(dashboard): use datasource id from slice metadata (apache#12483) * fix(timepicker): make pyparsing thread safe (apache#12489) * fix: make pyparsing thread safe * remove parenthesis for decorator * fix (SQL Lab): disappearing results on tab switch (apache#12472) * fix (SQL Lab): disappearing results on tab switch * Remove state * Fix test * fix: import ZIP files that have been modified (apache#12425) * fix: import ZIP files that have been modified * Add unit test * update changelog with rc2 entries * fix: impose dataset ownership check on old API (apache#12491) * fix: impose dataset ownership check on old API * update UPDATING.md * partially protect the old MVC also * prevent metric and column add and update * ci: remove refs/tags from docker tags on a release (apache#12518) * ci: remove refs/tags from docker tags on a release * wider head * fix: lowercase all columns in examples (apache#12530) * fix(explore): time table control panel (apache#12532) * fix(explore): Add Time section back to FilterBox (apache#12537) * Fixing Pinot queries for time granularities: WEEKS/MONTHS/QUARTERS/YEARS (apache#12536) * fix: Select options overflowing Save chart modal on Explore view (apache#12522) * Fix select options overflowing modal * fix unit test Co-authored-by: Ville Brofeldt <ville.v.brofeldt@gmail.com> * Fix list filters vertical alignment (apache#12497) * feat(db-engine): Add support for Apache Solr (apache#12403) * [db engine] Add support for Apache Solr * Fixing typo * chore: rename docker image in build_docker_image.sh, docker-compose.yml and helm values.yaml (apache#12337) * add rc3 changelog entries * fix: Popover closes on change of dropdowns values (apache#12410) * fix: Add MAX_SQL_ROW value to LIMIT_DROPDOWN (apache#12555) * fix(viz): missing groupby and broken adhoc metrics for boxplot (apache#12556) * fix: height on grid results (apache#12558) * fix: case expression should not have double quotes (apache#12562) * Fix 500 error when loading dashboards with slice having deleted dataset (apache#12535) * add rc4 changelog entries * Fixed typo on line 348 * Added files Co-authored-by: Daniel Gaspar <danielvazgaspar@gmail.com> Co-authored-by: Yongjie Zhao <yongjie.zhao@gmail.com> Co-authored-by: Geido <60598000+geido@users.noreply.github.com> Co-authored-by: Junlin Chen <junlin@preset.io> Co-authored-by: Jesse Yang <jesse.yang@airbnb.com> Co-authored-by: Agata Stawarz <47450693+agatapst@users.noreply.github.com> Co-authored-by: Ville Brofeldt <33317356+villebro@users.noreply.github.com> Co-authored-by: Michael S. Molina <70410625+michael-s-molina@users.noreply.github.com> Co-authored-by: Kamil Gabryjelski <kamil.gabryjelski@gmail.com> Co-authored-by: Evan Rusackas <evan@preset.io> Co-authored-by: Kasia Kucharczyk <2536609+kkucharc@users.noreply.github.com> Co-authored-by: Phillip Kelley-Dotson <pkelleydotson@yahoo.com> Co-authored-by: Grace Guo <grace.guo@airbnb.com> Co-authored-by: Beto Dealmeida <roberto@dealmeida.net> Co-authored-by: Ville Brofeldt <ville.v.brofeldt@gmail.com> Co-authored-by: Xiang Fu <fx19880617@gmail.com> Co-authored-by: Ahmed Adel <github@aadel.io> Co-authored-by: Amit Miran <47772523+amitmiran137@users.noreply.github.com> Co-authored-by: Hugh A. Miles II <hughmil3s@gmail.com> Co-authored-by: Shuyao Bi <shuyaob@andrew.cmu.edu> Co-authored-by: Lyndsi Kay Williams <lyndsikaywilliams@Lyndsis-MacBook-Pro.local>





SUMMARY
make
pyparsingthread-safeBEFORE/AFTER SCREENSHOTS OR ANIMATED GIF
TEST PLAN
world bank's datadashboard without errorADDITIONAL INFORMATION