Sebuah watch inotify tidak menjadikan pathname sebagai identifier yang persisten. Linux menempelkan watch pada objek filesystem yang dipilih saat inotify_add_watch() berhasil, lalu menghasilkan record yang mendeskripsikan aktivitas terkait objek yang dipantau dan entri direktori. Nama dapat berpindah, objek dapat hilang, dan detail event dapat terlewat ketika queue mengalami overflow.

Batas ini relevan bagi file synchronizer, pemuat ulang konfigurasi, indexer, dan service supervisor. Event stream dapat memberi sinyal bahwa state filesystem lokal berubah, tetapi rekonstruksi state yang otoritatif tetap bergantung pada operasi filesystem yang dilakukan setelah event diterima.

Watch descriptor mengidentifikasi watch dalam satu instance inotify

inotify_init1() mengembalikan file descriptor untuk sebuah instance inotify. inotify_add_watch() mengaitkan watch dengan instance tersebut dan mengembalikan watch descriptor, yang umum disebut wd. Record event yang dibaca dari instance memuat descriptor itu, event mask, cookie untuk menghubungkan event rename, serta nama opsional.

Watch descriptor bukan pathname dan bukan identifier objek yang berlaku untuk seluruh proses. Interpretasinya terikat pada instance inotify yang menghasilkannya. Karena itu, aplikasi memerlukan pemetaan sendiri dari nilai wd ke state yang diasosiasikan dengan setiap watch.

Untuk direktori yang dipantau, event dapat membawa nama entri anak. Nama tersebut relatif terhadap direktori yang dipantau. Record melaporkan event pada batas notifikasi; record tidak membekukan path global yang stabil untuk penggunaan berikutnya.

Event rename menyediakan korelasi tanpa membuat delivery transaksional

Rename dalam cakupan direktori yang dipantau dapat menghasilkan event IN_MOVED_FROM dan IN_MOVED_TO. Linux menempatkan cookie nonzero yang sama pada event terkait sehingga aplikasi dapat mengorelasikan entri direktori lama dan baru.

Cookie tersebut merupakan metadata yang berguna, tetapi tidak mengubah queue menjadi transaction log. Event lain dapat muncul di antara pasangan itu, dan perpindahan dapat melintasi batas cakupan watch aplikasi. Dalam kondisi tersebut, hanya satu sisi yang mungkin terlihat oleh instance inotify.

Consumer juga tidak dapat menganggap nama dari event sebelumnya sebagai jaminan bahwa entri yang sama masih ada ketika kemudian memanggil open(), stat(), atau API pathname lain. State filesystem dapat berubah lagi antara pembuatan event, pembacaan queue, dan lookup berikutnya.

Urutan yang teramati lebih tepat digambarkan sebagai:

mutasi filesystem
       |
 event masuk queue
       |
 consumer membaca event
       |
 lookup pathname baru

Setiap batas dapat dipisahkan oleh aktivitas filesystem yang berjalan konkuren.

Replacement memisahkan pathname dari objek yang dipantau

Sebuah pathname dapat tetap ada sementara objek yang sebelumnya dipilih melalui pathname tersebut dihapus atau diganti. Perbedaan ini tampak jelas ketika perangkat lunak memperbarui file dengan membuat inode baru lalu melakukan rename untuk menggantikan nama yang sudah ada.

Jika watch dipasang langsung pada file lama, watch mengikuti objek yang dipantau tersebut dan tidak otomatis berpindah ke objek pengganti yang kemudian memakai pathname yang sama. Event seperti IN_DELETE_SELF, IN_MOVE_SELF, dan IN_IGNORED mengomunikasikan transisi lifetime yang relevan sesuai operasi dan state watch.

Kode yang memerlukan cakupan berkelanjutan atas pathname logis perlu menetapkan kebijakan pemasangan ulang. Memantau direktori induk dapat memberi sinyal level entri untuk replacement, sedangkan watch langsung pada file dapat memberi event yang terikat pada objek terpilih. Keduanya merupakan kontrak observasi yang berbeda.

Queue overflow menghilangkan kelengkapan event per event

Kernel menyimpan event inotify yang tertunda dalam queue berbatas. Jika queue overflow, Linux menghasilkan event IN_Q_OVERFLOW. Pada titik tersebut, consumer tidak dapat mengasumsikan bahwa setiap mutasi filesystem di interval itu terwakili oleh record yang diterima.

Failure mode ini mengubah kontrak pemulihan. Menerapkan event berikutnya ke model cache dapat mempertahankan celah yang tidak diketahui. Desain yang kuat memperlakukan overflow sebagai hilangnya kelengkapan inkremental dan membangun ulang state terkait dari observasi filesystem yang otoritatif sebelum kembali mengandalkan cache.

Rescan bukan indikasi bahwa inotify tidak andal. Kondisi tersebut merupakan konsekuensi interface notifikasi asinkron berbatas: producer dapat bergerak lebih cepat daripada consumer, sehingga API mengekspos kehilangan secara eksplisit alih-alih menjanjikan riwayat tanpa batas.

Event coalescing juga membatasi penghitungan operasi

Event identik yang belum dibaca dapat digabungkan oleh inotify. Akibatnya, jumlah record bukan penghitung umum untuk operasi filesystem. Consumer yang membutuhkan state terkini dapat memakai event sebagai sinyal invalidasi lalu memeriksa state tersebut secara langsung.

Perbedaan ini penting untuk desain yang mengaitkan makna bisnis dengan jumlah event. Semantik notifikasi mendeskripsikan perubahan yang dapat diamati sesuai kontrak API; semantik tersebut tidak menyediakan audit ledger bagi setiap operasi VFS di bawahnya.

Untuk kebutuhan audit, sistem memerlukan interface dengan jaminan yang sesuai tujuan tersebut. inotify dirancang untuk notifikasi perubahan filesystem, dengan semantik queue dan coalescing yang dinyatakan secara eksplisit.

Penghapusan watch merupakan bagian dari resource lifetime

Watch dapat dihapus secara eksplisit dengan inotify_rm_watch(), dan kernel dapat menghapusnya ketika objek yang dipantau mencapai kondisi terminal yang relevan. IN_IGNORED melaporkan bahwa sebuah watch telah dihapus.

Aplikasi perlu memperhitungkan lifetime file descriptor inotify sekaligus lifetime setiap watch. Menutup descriptor inotify melepaskan watch yang terkait dengan instance tersebut. Sebelum titik itu, setiap watch memakai resource kernel dan tunduk pada batas per-user.

Karena itu, watch table merupakan state aplikasi dengan transisi lifecycle, bukan sekadar map statis yang dibuat saat startup. Rekonfigurasi, penghapusan objek, replacement, dan penghapusan eksplisit dapat mengubah himpunan watch descriptor yang valid.

Notifikasi adalah bukti invalidasi, bukan identitas yang dipertahankan

Peran inotify paling tepat ketika batasnya dijaga tetap sempit. Interface ini memberi tahu proses bahwa aktivitas filesystem yang relevan dengan watch telah terjadi, menyediakan mask dan nama yang mendeskripsikan aktivitas tersebut, serta menyediakan rename cookie untuk korelasi di dalam event stream.

inotify tidak membuat pathname stabil, tidak memindahkan watch secara otomatis ke setiap objek masa depan dengan nama yang sama, tidak mempertahankan riwayat event tanpa batas, dan tidak membuat setiap record event berkorespondensi satu banding satu dengan operasi di bawahnya.

Sistem yang memerlukan kebenaran state filesystem terkini dapat menggabungkan notifikasi dengan lookup atau rescan baru. Pemisahan itu mempertahankan sifat utama inotify: sinyal perubahan asinkron yang efisien, dengan batas eksplisit pada lifetime objek, penamaan entri direktori, kehilangan queue, dan event coalescing.