(* $Id$ *) (** Cache server *) (** Configuration data for a server *) class type cache_config = object method directory : string (** The directory where the cache contents are stored as file *) method max_size : int64 (** The (initial) maximum size in bytes *) method save_cache_period : int (** Save the cache to disk every this number of seconds (0 disables) *) method save_cache_speed : int (** Write this number of bytes per second (0 means as fast as possible) *) method rpc_program_number : int32 (** The program number to use in the RPC protocol *) end type cache_instance (** A cache server instance *) val create : cache_config -> cache_instance (** Creates a cache instance for the passed [cache_config] *) val bind : Rpc_server.t -> cache_instance -> unit (** Binds the cache procedures in the passed RPC server. One can bind the * cache to several servers, or even to no servers if only local accesses * happen. *) val activate : Unixqueue.event_system -> cache_instance -> unit (** Activates the cache: Loads contents from files, and establishes * timers. Must be called after [bind]. *) val save : cache_instance -> unit (** Saves the complete instance immediately to disk *) val verify : log:(string -> unit) -> cache_instance -> unit (** Runs a routine that checks the structure of the cache instance. * Messages are printed to [log]. *) type full_key = { key : Cache_client.key; modulo : int; } (** The key and the modulo (number of servers) *) val set_directly : cache_instance -> full_key -> string -> Cache_client.timestamp -> Cache_client.set_options -> [`Stored|`Not_stored] (** Modifies the cache directly *) val get_directly : cache_instance -> full_key -> Cache_client.get_options -> [`Found of Cache_client.entry|`Not_found] (** Reads from the cache directly *) val delete_directly : cache_instance -> full_key -> Cache_client.timestamp -> Cache_client.delete_options -> unit (** Deletes directly in the cache *) val clear_directly : cache_instance -> unit (** Clears the whole cache directly *) val get_config : cache_instance -> Cache_client.config (** Get the cache's config *) val set_config : cache_instance -> Cache_client.config -> unit (** Set the cache's config *) val get_stats : cache_instance -> Cache_client.stats (** Get the statistics *) val clear_counters : cache_instance -> unit (** Reset the statistics *) val shutdown : cache_instance -> unit (** Shuts the instance down. * This deletes any timers, and stops any save operations currently * being performed. It does not stop the RPC servers, however, because * the cache instance does not remember them, i.e. it is the task of * the user of this module to stop the RPC servers to which the * instance has been bound. *)