Skip to content

scheduler: route file watcher events through a fiber channel#14778

Open
rgrinberg wants to merge 1 commit into
ocaml:mainfrom
rgrinberg:push-yonkvokymlln
Open

scheduler: route file watcher events through a fiber channel#14778
rgrinberg wants to merge 1 commit into
ocaml:mainfrom
rgrinberg:push-yonkvokymlln

Conversation

@rgrinberg
Copy link
Copy Markdown
Member

Add a thread-safe channel for delivering values from watcher threads to fibers, and use it to make File_watcher expose read, flush, and close operations instead of pushing raw filesystem events through Scheduler.Event.Queue.

Move filesystem-event handling and Fs_memo initialization into the build loop, so the scheduler event queue only needs to handle memo invalidations, worker/job notifications, and shutdown.

Add expect coverage for the thread-safe channel and update file watcher tests to use a test event sink.

scheduler: simplify file watcher invalidation plumbing

Combine queued build-input invalidations before delivering them to the scheduler, so Build_inputs_changed carries one invalidation.

Keep sync ids private to File_watcher and store pending flush ivars directly in the sync table, removing the separate pending-sync table.

Remove duplicated build-loop file-watcher state and narrow Fs_memo watcher hooks under a build-loop-facing submodule.

@rgrinberg rgrinberg force-pushed the push-yonkvokymlln branch 5 times, most recently from 0b1bcbc to 7018617 Compare May 29, 2026 21:58
Add a thread-safe channel for delivering values from watcher threads to fibers, and use it to make File_watcher expose read, flush, and close operations instead of pushing raw filesystem events through Scheduler.Event.Queue.

Move filesystem-event handling and Fs_memo initialization into the build loop, so the scheduler event queue only needs to handle memo invalidations, worker/job notifications, and shutdown.

Add expect coverage for the thread-safe channel and update file watcher tests to use a test event sink.

Signed-off-by: Rudi Grinberg <me@rgrinberg.com>

scheduler: simplify file watcher invalidation plumbing

Combine queued build-input invalidations before delivering them to the scheduler, so Build_inputs_changed carries one invalidation.

Keep sync ids private to File_watcher and store pending flush ivars directly in the sync table, removing the separate pending-sync table.

Remove duplicated build-loop file-watcher state and narrow Fs_memo watcher hooks under a build-loop-facing submodule.

Signed-off-by: Rudi Grinberg <me@rgrinberg.com>

scheduler: factor thread-safe channel wakeups

Signed-off-by: Rudi Grinberg <me@rgrinberg.com>

scheduler: hide thread-safe channel fill writes

Signed-off-by: Rudi Grinberg <me@rgrinberg.com>

scheduler: localize file watcher event batching

Signed-off-by: Rudi Grinberg <me@rgrinberg.com>

test: construct thread-safe channel with local queue

Signed-off-by: Rudi Grinberg <me@rgrinberg.com>

scheduler: remove test-only channel wrapper

Signed-off-by: Rudi Grinberg <me@rgrinberg.com>

scheduler: inline channel wakeup helper

Signed-off-by: Rudi Grinberg <me@rgrinberg.com>
@rgrinberg rgrinberg force-pushed the push-yonkvokymlln branch from 7018617 to 88a09f6 Compare May 29, 2026 22:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant