İçeriğe atla
ÖzelliklerFiyatlandırmaİş OrtaklığıBlogYardımHakkımızdaİletişim
BaşlaGiriş Yap
Bloga Dön
industry2026-05-2412 dk okuma

Analitiğim bu hafta %50 fazla gösterdi — customer_activity retry double count (PR #639 IV F3)

Bodrum Bitez Sahil Yolu nda 45 yaslarinda "Bitez Beach Lounge" + Yalikavak + Turkbuku 3 lokasyon isleten Cengiz, 8 sezon turistik yogunluk yonetmis. thMenu Pro+ Today s Pulse + Menu ABC weekly menu A/B test. 18 Mayis Pazartesi sabahi rakamlar garip: gecen hafta product_view 12,847 vs onceki hafta (ayni turistik akis pattern) 8,212 = **%56 artis**. Cengiz Bookings/POS satis/Google Maps gelen-arama hep flat (~%3 sezonsallik). "Bu number dogru olamaz." support a yazdi. Engineering wrong theories busted: (1) turistik akis artmis — Bookings/POS flat. (2) Bot trafik — UA + IP audit normal. (3) D1 inflation cron — INSERT timestamps normal pattern. **(4) Right theory retry double-count**: Cloudflare access log 5xx error rate window incelendi. 11-15 Mayis 90 dakikalik D1 regional partition (CF status page confirm). Bu window da customer_activity batch POST 50% failure rate 503. Client SDK 30sn sonra retry. Her retry server **inserted: 50** dondu — ama gercekte 0 row affected (onceki attempt INSERT lenmisti). Dashboard count her retry response u trust ediyordu → inflation. **Worse: client-side localStorage data loss**: Client SDK localStorage 50-event batch flush + server inserted count una gore localStorage tan o kadar event delete. Retry da server inserted: 50 → client 50 fresh event silinir (onceki retry da zaten 50 silindi, su anki retry da fresh event silinir). Customer offline mode 8 product_view, network reconnect batch 5xx retry retry success inserted: 8, client localStorage tan 8 fresh event delete. 5dk sonra customer 4 yeni event olusturuyor, fresh 4 event D1 e ulasmiyor cunku onceki inflated response silmis. **PR #639 batch IV F3** fix tek concept: meta.changes ten count etabir. `const inserted = Array.isArray(results) ? results.reduce((acc, r) => acc + (r?.meta?.changes ?? 0), 0) : 0;` — D1 batch result her statement icin meta.changes field icerir. First attempt 50 statement hepsi affect 1 row → inserted: 50. Retry duplicate state 50 statement hepsi affect 0 row → inserted: 0. Mixed 30 yeni + 20 duplicate → inserted: 30. Defense-in-depth ek received: statements.length observability (client telemetry 0/N ratio duplicate retry detect). 90-day customer_activity timestamps + CF 5xx cross-reference: 11-15 Mayis dahil 5 partition event son 6 ayda. 18 restaurant platform-wide affected 30-80% inflation. Retro-compute job phantom event count adjusted_dashboard_metric ile subtract. Cengiz dashboard 12,847 → adjusted 8,432. A/B test sonuclari guvenilir hale geldi. Proactive email 18 affected restaurant 50% Pro tier renewal discount. Cengiz "data integrity takip" twit. Pattern: **INSERT OR IGNORE + partial UNIQUE index pattern inde batch response inserted count prepared statement sayisi yerine her statement meta.changes toplamindan compute edilmeli. Retry-safe semantik bunu gerektirir — duplicate retry da inserted=0 olmali, statements.length degil.** Implementation checklist: (1) inserted aggregation meta.changes; (2) received field observability; (3) retry-safe semantic test 3x POST aynı set; (4) client SDK purge logic only inserted > 0 sil; (5) network instability sim test; (6) historical adjustment query; (7) quarterly cross-reference D1 vs analytics provider. Alessandro Naples Spaccanapoli + Vomero Bottega del Forno version Bay-of-Naples ayni flow.

th

thMenu Ekibi

thmenu.com

Faydalı buldunuz mu? Paylaşın.