fix: cache warmup using WebDriver for reliable authentication

Adopted from PR #34525 by @rusackas (originally PR #20387 by @ensky).
  Rebased on master with conflict resolution.

  Changes:
  - Use WebDriver (Selenium) to render dashboards for cache warmup
  - Add SUPERSET_CACHE_WARMUP_USER config for specifying the warmup user
  - Support persistent WebDriver instances for efficiency
  - Warm up entire dashboards instead of individual charts
  - Add Celery beat configuration documentation
  - Remove obsolete HTTP-based cache warmup tests

  Co-Authored-By: Evan Rusackas <evan@rusackas.com>
  Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Evan Rusackas
2026-03-05 09:21:38 -08:00
parent 0dbd4c5b90
commit 2ac03e438c
9 changed files with 201 additions and 363 deletions

View File

@@ -86,6 +86,39 @@ instead requires a cachelib object.
See [Async Queries via Celery](/admin-docs/configuration/async-queries-celery) for details.
## Celery beat
Superset has a Celery task that will periodically warm up the cache based on different strategies.
To use it, add the following to your `superset_config.py`:
```python
from celery.schedules import crontab
from superset.config import CeleryConfig
# User that will be used to authenticate and render dashboards for cache warmup
SUPERSET_CACHE_WARMUP_USER = "user_with_permission_to_dashboards"
# Extend the default CeleryConfig to add cache warmup schedule
class CustomCeleryConfig(CeleryConfig):
beat_schedule = {
**CeleryConfig.beat_schedule,
'cache-warmup-hourly': {
'task': 'cache-warmup',
'schedule': crontab(minute=0, hour='*'), # hourly
'kwargs': {
'strategy_name': 'top_n_dashboards',
'top_n': 5,
'since': '7 days ago',
},
},
}
CELERY_CONFIG = CustomCeleryConfig
```
This will cache the top 5 most popular dashboards every hour. For other
strategies, check the `superset/tasks/cache.py` file.
## Caching Thumbnails
This is an optional feature that can be turned on by activating its [feature flag](/admin-docs/configuration/configuring-superset#feature-flags) on config: