Cancellation ve shutdown
İstek iptalini gözlemleyin ve uygulamanın kontrollü kapanışını tamamlayın.
Cancellation bir işin durdurulması gerektiğini bildirir. Kaynağın gerçekten sonlandığı ve temizlendiği sonucu ayrıca beklenir. Lily bu ayrımı request ve uygulama yaşam döngüsünde korur.
ExecutionCancellation#
Action, middleware ve guard’a gelen ExecutionCancellation, is_cancelled, cancelled().await ve clone sağlar. Salt okunurdur; public cancel veya raw token çıkarma API’si yoktur.
Uzun süren işlem sinyali gözlemlemelidir. PostgreSQL bu görünümü doğrudan alabilir. MongoDB ve Redis için ayrı operation token’ına açık köprü kurulur.
Request deadline#
Mutlak deadline admission’da başlar. CORS, body okuma, action, response üretimi ve transport yazımı aynı bütçededir. SSE heartbeat veya stream chunk’ı süreyi yeniden başlatmaz.
İptalden sonra sınırlı bir cooperation penceresi bulunur. Bu sırada tamamlanan uygulama yanıtı korunabilir. Tamamlanmamış ve commit edilmemiş yanıt local timeout’ta 504, shutdown’da 503 olabilir. Gönderilmeye başlanmış yanıtın status’ü değiştirilemez; transport sonlandırılabilir.
Middleware temizliği#
on_request_termination(context, CleanupCancellation) anormal kesilmiş uygun middleware invocation’ları için kullanılır. İlk poll’u olmuş fakat normal dönmemiş çağrılar ters sırada ele alınır. Normal dönen Ok veya Err için genel bir finally hook’u değildir.
Gerekli durumu exchange.termination_state_mut() içine önceden yazın. Bu depo Request.local’dan ayrıdır. Hook, execution/body/helper sonlanmasından sonra ve DI scope cleanup’ından önce çalışır. Response yazamaz veya next çağıramaz.
Uygulama kapanışı#
start platform sinyallerini yönetir. Dış orchestration için start_with_cancellation(token), ayrı handle için clone edilmiş App üzerinden close().await kullanın. Başlatılmamış başarılı build de close edilmelidir.
Kapanış önce yeni işi durdurur, ardından yönetilen iş ve request kaynaklarını, uygulamanın container’ını ve telemetry’sini sonlandırır. Dış container/tracing sahipleri kendi kapanışlarını tamamlar.
Tamamlanmamış iş#
Yield etmeyen CPU işi, blocking destructor veya başlamış blocking file işi zorla durduruldu diye güvenle kabul edilemez. Timeout, tamamlanmış cleanup kanıtı değildir. Uygulama kodunu cancellation’a uyumlu ve kaynak sahipliği açık olacak şekilde tasarlayın.
Bu sayfanın kaynakları v0.1.0
Anlatım, incelenen framework commit’ine dayanır.