module Nn_commit_monitor: sig .. end
This monitor ensures that only certain commits can be done in parallel.
The model is as follows:
- Each worker process serializes its own commits
- The commits done by two worker commits can usually run in parallel
The criterion whether two commits c1 and c2 can run in parallel:
- Only one of the commits may modify the datastores table
- Only one of the commits may modify data related to the same
inode (with the exception
inode_upd_time and the exceptions
directory names)
- Only one of the commits may modify the same block allocation row
The updates done by
inode_upd_time are ignored here - this is only
used for updating the mtime of directories if a file is added or
deleted. (Or better: The DB will implicitly serialize these updates.)
module I64Set: Set.S with type elt = int64
module BRowSet: Set.S with type elt = int * int64
type update_characteristics = {
|
upd_ds : bool; |
|
upd_inodes : I64Set.t; |
|
upd_blocks : BRowSet.t; |
}
type commit_monitor
The process-local part of the monitor
type commit_monitor_shm
The shm part of the monitor
val create_commit_monitor_heap : Netmcore.res_id -> commit_monitor_shm Netmcore_ref.sref
val create_commit_monitor : Netmcore.res_id ->
commit_monitor_shm Netmcore_ref.sref ->
Unixqueue.event_system -> commit_monitor
val monitor_e : commit_monitor ->
update_characteristics ->
(int -> 'a Uq_engines.engine) -> 'a Uq_engines.engine
monitor_e cm uc f:
Tries to get a slot for doing a commit described by uc. When the
commit can be done, f commit_id is called, and the result is
returned.
val get_update_characteristics : Nn_db.modification Queue.t -> update_characteristics
Extract uc from a queue of DB updates