[data-sync] Notify System (offline store-and-forward) #43

Closed
opened 2026-06-16 23:54:15 +03:00 by saqut · 1 comment
Owner

Kullanıcı o an aktif bağlı değilken sunucudan veya diğer client'lardan gelen mesajların, kullanıcı bağlandığında iletilebilmesini sağlayan store-and-forward sistemi.

Davranış:

  • İletilmek istenen mesaj geçici olarak depolanır.
  • Hedef kullanıcı bağlıysa hemen, değilse ilk fırsatta (bağlanınca) iletilir.
  • Sunucu her bildirime bir iz (id/uuid) bırakabilir; böylece bildirimin iletilip iletilmediği sonradan sorgulanabilir.
  • Depolanan mesajlar için geçerlilik/expire süresi düşünülmeli.

Bitti kriteri: offline kullanıcıya bırakılan mesaj, bağlanınca iletiliyor; iz id ile teslim durumu sorgulanabiliyor; testler yeşil.

Kullanıcı o an aktif bağlı değilken sunucudan veya diğer client'lardan gelen mesajların, kullanıcı bağlandığında iletilebilmesini sağlayan **store-and-forward** sistemi. **Davranış:** - İletilmek istenen mesaj geçici olarak depolanır. - Hedef kullanıcı bağlıysa hemen, değilse ilk fırsatta (bağlanınca) iletilir. - Sunucu her bildirime bir **iz (id/uuid)** bırakabilir; böylece bildirimin iletilip iletilmediği sonradan sorgulanabilir. - Depolanan mesajlar için geçerlilik/expire süresi düşünülmeli. **Bitti kriteri:** offline kullanıcıya bırakılan mesaj, bağlanınca iletiliyor; iz id ile teslim durumu sorgulanabiliyor; testler yeşil.
saqut added this to the 3.0.0 milestone 2026-06-16 23:54:15 +03:00
saqut added the
data-sync
label 2026-06-16 23:54:15 +03:00
Author
Owner

Tamamlandı (go-rewrite, commit 441093b). internal/notify + internal/services/notify.go.

Davranış: notify/send {to, pack, expires?, suit?} → hedef online ise hemen notify sinyali ile teslim, offline ise kuyruğa alınır ve hedef bağlanınca (OnConnect flush) teslim edilir. Her bildirim bir trace id taşır; notify/status {trace} ile teslim/cevap durumu sorgulanır. Geçerlilik: bildirim başına TTL (vars. 24s, expires ile saniye cinsinden ayarlanır).

Leak yok: TTL + hedef-başına sınır (en eski düşer) + periyodik janitor (main.go başlatır/durdurur) → hiç bağlanmayan hedef için bile sınırsız büyüme olmaz.

Test: TestNotifyOfflineThenDeliverOnConnect, TestNotifyImmediateWhenOnline, store birim testleri (expiry/purge/cap). go test -race yeşil.

Tamamlandı (go-rewrite, commit 441093b). `internal/notify` + `internal/services/notify.go`. **Davranış:** `notify/send {to, pack, expires?, suit?}` → hedef online ise hemen `notify` sinyali ile teslim, offline ise kuyruğa alınır ve hedef bağlanınca (OnConnect flush) teslim edilir. Her bildirim bir **trace** id taşır; `notify/status {trace}` ile teslim/cevap durumu sorgulanır. Geçerlilik: bildirim başına TTL (vars. 24s, `expires` ile saniye cinsinden ayarlanır). **Leak yok:** TTL + hedef-başına sınır (en eski düşer) + periyodik janitor (main.go başlatır/durdurur) → hiç bağlanmayan hedef için bile sınırsız büyüme olmaz. **Test:** `TestNotifyOfflineThenDeliverOnConnect`, `TestNotifyImmediateWhenOnline`, store birim testleri (expiry/purge/cap). `go test -race` yeşil.
saqut closed this issue 2026-06-17 08:30:46 +03:00
Sign in to join this conversation.
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: saqut/MWSE#43
No description provided.