This is a test-only PR opened as a TDD-style validation of issue #34543.
#34543 (filed 2025-08) reports that embedded dashboards with multiple
Jinja url_param() filters fail async cache retrieval with a 422 "Error
loading data from cache", while a single url_param works fine.
Root cause: SqlaTable.get_extra_cache_keys() (superset/connectors/sqla/models.py)
returns list(set(extra_cache_keys)). Python randomizes string hashing
per-process, so the same set of url_param values can iterate in a
different order in the Celery worker (which writes the query results
to cache) than in the web process (which re-derives the cache key to
read them back). hash_from_dict() only sorts dict keys, not list
values, so two extra_cache_keys lists with identical values but
different order hash to different cache keys. A single-element list
has only one possible order, which is why the bug only appears with
multiple parameters.
This PR adds one regression test on QueryObject.cache_key():
1. test_cache_key_stable_regardless_of_extra_cache_keys_order -
asserts the cache key is identical for two otherwise-equal query
objects whose extra_cache_keys differ only in order.
Closes#34543
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>