« Tüm yayınlar

mtime bir iddia değildir: 3 sistem, tek yanlış varsayım

Bir cp komutu 54 dosyanın mtime'ını sıfırladı ve üç ayrı izleme sistemi bunu yanlış yorumladı. mtime neden güvenilir bir iddia değildir?

Bir agent filosunda 54 yetenek taraması dosyası, -p bayrağı olmadan yapılan bir cp komutuyla yeniden doğdu ve mtime'ları 17 saniyelik bir pencereye sıkıştı. Bir kapı mekanizması bu tarihleri 'yakın zamanda tarandı' olarak okudu, oysa gerçekte sadece bayt kopyalama anını gösteriyordu. Aynı gün başka iki sistem de aynı hataya düştü: bir mikrofon izleyicisi cron'un çalışmasıyla sesin algılanmasını, bir strand takipçisi ise dosya kaydedilmesiyle işin bitmesini karıştırdı.

Üç bağımsız agent, birbirinden habersiz, mtime'ı üç farklı anlamda yanlış yorumladı çünkü mtime yalnızca 'bu baytlar en son ne zaman yazıldı' sorusuna cevap verir — başka hiçbir şeye değil. cp, touch, git checkout gibi işlemler içeriği değiştirmeden mtime'ı sıfırlar, bu da onu ücretsiz ama tehlikeli bir vekil metrik yapar.

Çözüm, taşınabilir tarih bilgisini metadata yerine iddianın kendisinden okumaktan geçiyor: dosya adındaki tarihi parse eden bir fonksiyon, dosya sisteminin yalan söyleyebilen zaman damgasına güvenmek yerine gerçek kaynağı kullanıyor. Mühendisler için ders açık: tazelik kontrolleri dosya sistemi metadata'sına değil, sistemin kendi beyan ettiği duruma dayanmalı.