FlagsmithClient should support deterministic shutdown of local-evaluation polling
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 52/100
Direzione di ricerca
Inizia leggendo FlagsmithClient.cs e PollingManager.cs, concentrandoti sul finalizer, sul timer di polling, sul callback e sull’attuale cleanup di StopPoll. Implementa uno shutdown deterministico e idempotente che interrompa il polling, impedisca le richieste future, gestisca quando possibile i refresh in corso e preservi la sicurezza del finalizer; verifica il comportamento rispetto alla riproduzione descritta nell’issue.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Problem
In Flagsmith .NET SDK 9.0.0, enabling local evaluation starts a PollingManager backed by System.Threading.Timer.
The only cleanup currently occurs in the FlagsmithClient finalizer:
~FlagsmithClient() => _pollingManager?.StopPoll();
This does not provide deterministic cleanup when an application host or dependency-injection container stops. Additionally, the timer callback retains the polling manager, whose callback retains the client. This may keep the client reachable and prevent its finalizer from running.
Relevant source:
- https://github.com/Flagsmith/flagsmith-dotnet-client/blob/fc8f50f2004363c951d3c64dcd04d8ffd3cc0c87/Flagsmith.FlagsmithClient/FlagsmithClient.cs
- https://github.com/Flagsmith/flagsmith-dotnet-client/blob/fc8f50f2004363c951d3c64dcd04d8ffd3cc0c87/Flagsmith.FlagsmithClient/PollingManager.cs
Impact
In long-running processes that create and stop application hosts:
- Environment-document requests can continue after the host stops.
- Recreated hosts and tests can accumulate polling timers.
- References to clients, loggers, and related services can remain alive.
- Consumers cannot bind polling cleanup to their application lifecycle.
Process termination masks the issue because the operating system removes the timer.
Reproduction
- Configure
FlagsmithClientwith local evaluation and a short refresh interval. - Point it at an HTTP handler that counts environment-document requests.
- Create the client and observe polling.
- Stop or dispose the owning host or service provider without terminating the process.
- Wait beyond the refresh interval.
- Environment-document requests continue because there is no public shutdown or disposal API.
Expected behaviour
FlagsmithClient should expose deterministic cleanup, for example through IDisposable, IAsyncDisposable, or an explicit shutdown method.
Cleanup should:
- Stop and dispose the polling timer immediately.
- Prevent future environment-document requests.
- Cancel an in-flight refresh where possible.
- Be idempotent.
- Call
GC.SuppressFinalizeif a finalizer remains as a fallback.
This would allow integrations such as OpenFeature providers to stop polling from their normal host shutdown lifecycle.
- Lingua principale
- C#
- Stelle
- 20
- Fork
- 17
- Merge medio
- 21h 47m
- PR unite (30g)
- 8
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di Flagsmith/flagsmith-dotnet-client
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 55/100
Flagsmith/flagsmith-dotnet-client#197 ·
I maintainer di solito rispondono entro 1 giorno
-
Dependency DashboardAperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
Flagsmith/flagsmith-dotnet-client#194 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 58/100
Flagsmith/flagsmith-dotnet-client#190 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Local evaluation silently drops identity overrides on large environmentsForse già presa @marc-merino l’ha presa 38 giorni fa. Aperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
Flagsmith/flagsmith-dotnet-client#187 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 45/100
Flagsmith/flagsmith-dotnet-client#180 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di Flagsmith/flagsmith-dotnet-client
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
Natvs/Nt.Automaton#33 ·
-
enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
-
a-corriger documentation
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
christian-raj/S-Aloha#312 ·
-
ready-for-agent tech-debt
Difficoltà 1/5 1-3 ore Idoneità per principianti 85/100
DigiBanks99/menlo#640 ·
I maintainer di solito rispondono entro 1 giorno
-
ci
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 62/100
OpenTabletDriver/OpenTabletDriver#5283 ·
I maintainer di solito rispondono entro 3 giorni