Ana Sayfa

Milyonda Bir Görülen Segfault: Recall.ai'ın Zorlu Hata Avı

1 dk okuma

Recall.ai, her ay milyonlarca saatlik toplantıyı kaydederek yoğun bir iş yüküyle çalışıyor. Bu toplantılar, çeşitli kodekler, kanallar ve örnekleme hızlarına sahip büyük miktarda ses ve video verisi üretiyor. Şirket, bu verileri evrensel olarak oynatılabilir tek bir formata dönüştürüyor. Bu süreçte, her ay 18 milyon "toplantı botu" olarak adlandırılan EC2 instance'ı kullanılıyor. Bu botlar, video görüşmelerine katılarak verileri gerçek zamanlı olarak yakalıyor. Ancak, yaklaşık 36 milyon bottan birinde, medya pipeline'ındaki kütüphane kodunda nadir bir segfault (segmentasyon hatası) meydana geliyordu. Toplantı botları oldukça durum bilgisi içerdiğinden, bu tür kritik bir hata veri kaybına yol açıyordu ve milyonda bir bile olsa bu hata oranı kabul edilemezdi.

Şirket, bu nadir hatayı tespit etmek ve düzeltmek için kapsamlı bir süreç başlattı. Hatayı yerel olarak yeniden üretmek imkansız olduğu için, üretim ortamından çekirdek dökümlerini (core dump) toplamak üzere "Garbage Truck" adını verdikleri minimal bir Rust binary geliştirdiler. Bu araç, kernel'ı çekirdek dökümlerini belirli bir konuma kaydetmek ve bunları S3'e yüklemek üzere yapılandırıyordu. Toplanan çekirdek dökümleri GDB ile analiz edildiğinde, SIGSEGV hatasının libfaac kütüphanesindeki faacEncEncode fonksiyonunda, özellikle sabit nokta matematiğiyle ilgili bir taşma hatasından kaynaklandığı anlaşıldı.

Araştırmalar sonucunda, bu hatanın aslında on yıldan daha uzun bir süre önce yamalandığı ancak bu yamanın downstream tüketicilere hiç ulaşmadığı ortaya çıktı. Recall.ai, eski kütüphaneyi yamalamak yerine, bu tür çökmeler yaşamayan daha modern ve sağlam bir AAC encoder olan libfdk-aac ile değiştirmeye karar verdi. Bu sayede, nadir görülen ancak kritik veri kaybına yol açan bu sorun kökten çözülerek sistem güvenilirliği önemli ölçüde artırıldı.

İçgörü

Recall.ai, nadir görülen ancak kritik veri kaybına yol açan bir yazılım hatasını, kapsamlı bir hata ayıklama süreci ve kütüphane değişimiyle gidererek sistem güvenilirliğini artırdı.

Kaynak