X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=frontend.ml;h=ab4f176b1c7f2957ddbf493ff2e1b87dbd457c4f;hb=210b03e8a5cfffb3c25ea04a03548a430fd13372;hp=fc7a88fd40565c918fe70b8e791f70ecf323527e;hpb=2955cde23cac50c0ad569745974746993b171524;p=vsys.git diff --git a/frontend.ml b/frontend.ml index fc7a88f..ab4f176 100644 --- a/frontend.ml +++ b/frontend.ml @@ -1,17 +1,34 @@ +(* frontend.ml: Routines that implement frontend actions, such as creating directories in a slice, creating pipes etc. *) + open Printf open Unix open Globals open Fifowatcher +(** frontendhandler class: Methods to create and unlink pipes and directories + @param root_dir vsys directory inside a slice + @param slice_name actual slice name - set with care, since the acl functionality refers to these names *) class frontendHandler (root_dir,slice_name) = object(this) + method get_slice_name () = slice_name + + (** A new script was copied into the backend, make a corresponding entry in + the frontend. + @param rp Relative path of the entry in the backend + @param abspath Absolute path of the entry + @param perm Permissions of the entry at the frontend *) method mkentry (rp:relpath) abspath perm = let realperm = perm land (lnot 0o111) in match rp with Relpath(rel) -> let fqp = String.concat "/" [root_dir;rel] in - Fifowatcher.mkentry fqp abspath realperm; - Fifowatcher.openentry fqp (abspath,slice_name) realperm + let res = Fifowatcher.mkentry fqp abspath realperm slice_name in + match res with + | Success -> + Fifowatcher.openentry fqp (abspath,slice_name) realperm + | _ -> () + (** A new directory was created at the backend, make a corresponding directory + at the frontend. Refer to mkentry for parameters *) method mkdir rp perm = match rp with Relpath(rel) -> let fqp = String.concat "/" [root_dir;rel] in @@ -24,21 +41,34 @@ object(this) end else if (s.st_perm <> perm) then begin - printf "Removing directory %s\n" fqp; - flush Pervasives.stdout; + fprintf logfd "Removing directory %s\n" fqp; + flush logfd; Unix.rmdir fqp; Unix.mkdir fqp perm end with Unix.Unix_error(_,_,_) -> Unix.mkdir fqp perm + (** Functions corresponding to file deletion/directory removal *) + + (** *) method unlink rp = match rp with Relpath(rel) -> - let fqp = String.concat "/" [root_dir;rel] in - Unix.unlink fqp + let fqp1 = String.concat "/" [root_dir;rel] in + let fqp_in = String.concat "." [fqp1;"in"] in + let fqp2 = String.concat "/" [root_dir;rel] in + let fqp_out = String.concat "." [fqp2;"out"] in + try + Unix.unlink fqp_in; + Unix.unlink fqp_out + with _ -> + fprintf logfd "Hm. %s disappeared. Looks like slice %s shot itself in the foot\n" fqp1 (this#get_slice_name ());flush logfd method rmdir rp = match rp with Relpath(rel) -> let fqp = String.concat "/" [root_dir;rel] in + try Unix.rmdir fqp + with _ -> + fprintf logfd "Hm. %s disappeared. Looks like slice %s shot itself in the foot\n" fqp (this#get_slice_name ());flush logfd end