Plasma GitLab Archive
Projects Blog Knowledge

(* $Id$ *)

let configure rpc_program_number cf addr : Cache_server.cache_instance =
  let get_param name =
    try cf # resolve_parameter addr name
    with Not_found ->
      failwith ("Missing parameter '" ^ name ^ "'") in

  let get_string_param name =
    cf # string_param (get_param name) in

  let get_int_param name =
    cf # int_param (get_param name) in

  let directory = get_string_param "cache_directory" in
  let max_size = Int64.of_int (get_int_param "cache_max_size") in
  let save_cache_period = get_int_param "save_cache_period" in
  let save_cache_speed = get_int_param "save_cache_speed" in

  let cconfig =
    ( object
	method directory = directory
	method max_size = max_size
	method save_cache_period = save_cache_period
	method save_cache_speed = save_cache_speed
	method rpc_program_number = rpc_program_number
      end
    ) in

  Cache_server.create cconfig
;;


let do_setup rpc_enable also_setup srv (cache : Cache_server.cache_instance) =
  if rpc_enable then
    Cache_server.bind srv cache;
  also_setup srv cache
;;


let hooks post_start_hook (cache : Cache_server.cache_instance) 
    : Netplex_types.processor_hooks =
  object
    inherit Netplex_kit.empty_processor_hooks()

    method post_start_hook cont =
      (* It is important that the cache is first activated in the 
         container process!
       *)
      Cache_server.activate cont#event_system cache;
      cont # log `Notice "Container started";
      post_start_hook cache cont

    method pre_finish_hook cont =
      cont # log `Notice "Container shut down";

    method receive_admin_message cont cmd args =
      match cmd with
	| "verify" ->
	    let log = cont # log `Notice in
	    Cache_server.verify log cache
	| "save" ->
	    Cache_server.save cache
	| _ ->
	    ()
  end
;;


let factory ?(post_start_hook = fun _ _ -> ()) 
            ?(setup = fun _ _ -> ()) 
	    ?(rpc_enable = true) 
            ?(rpc_program_number = 600l)
            ~name () =
  Rpc_netplex.rpc_factory
    ~configure:(configure rpc_program_number)
    ~setup:(do_setup rpc_enable setup)
    ~hooks:(hooks post_start_hook)
    ~name
    ()
;;

This web site is published by Informatikbüro Gerd Stolpmann
Powered by Caml