Page d’accueil: Éviter le plantage en cas de rupture de la connexion au cache#5282
Page d’accueil: Éviter le plantage en cas de rupture de la connexion au cache#5282calummackervoy merged 2 commits intomasterfrom
Conversation
| @freeze_time("2024-01-31") | ||
| def test_cache_failsafe(self): | ||
| cache_backend = caches["failsafe"] | ||
|
|
||
| with ( | ||
| mock.patch.object(cache_backend, "get", return_value=None), | ||
| mock.patch.object(cache_backend, "has_key", return_value=None), | ||
| mock.patch.object(cache_backend, "set", return_value=None), | ||
| ): | ||
| campaign = AnnouncementCampaignFactory(start_date=date(2024, 1, 1), with_item=True) | ||
| assert active_announcement_campaign(None)["active_campaign_announce"] == campaign | ||
| campaign.delete() |
There was a problem hiding this comment.
Je ne comprends pas ce test, et il passe sur master, il ne sert donc pas à la non-regression.
Pourquoi ne pas bloquer l’accès au cache (insérer des paramètres incorrects pour Redis, voir
les-emplois/tests/utils/test_cache.py
Lines 11 to 34 in b21b45c
client.get(...))?
There was a problem hiding this comment.
L'assertion cible que même quand la cache est down, le active_campaign_announce sera disponible dans la contexte.
J'ai ajouté tes suggestions (j'espère que le test est plus comprehensive et clair maintenant), et dans 4df845e j'ai ajouté à FailSafeRedisCacheClient le support de l'argument default de get (SENTINEL_ACTIVE_ANNOUNCEMENT)
b21b45c to
9aeab6f
Compare
francoisfreitag
left a comment
There was a problem hiding this comment.
Je suis off aujourd’hui, ça attendra mon retour ou une autre relecture. Au premier coup d’œil, ça m’a l’air top.
| capture_exception(e) | ||
| # None is the return for a GET where the key does not exist. | ||
| return None | ||
| return CONNECTION_INTERRUPTED # return for a GET where the key does not exist. |
9aeab6f to
6d09737
Compare
CONNECTION_INTERRUPTED is used as a sentinel value by Django-redis to support default values
The active campaign is cached for use in a modal which renders on every page. If the connection to the cache is severed, it will cause a 500 error Add failing_cache fixture for tests
6d09737 to
842cb00
Compare
🤔 Pourquoi ?
La campagne active est mise en cache pour être utilisée dans une modale qui s'affiche sur le site. Si la connexion au cache est interrompue, une erreur 500 sera générée.
🚨 À vérifier