mldonkey-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Mldonkey-commits] mldonkey distrib/ChangeLog src/daemon/common/co...


From: mldonkey-commits
Subject: [Mldonkey-commits] mldonkey distrib/ChangeLog src/daemon/common/co...
Date: Sun, 29 Oct 2006 18:58:59 +0000

CVSROOT:        /sources/mldonkey
Module name:    mldonkey
Changes by:     spiralvoice <spiralvoice>       06/10/29 18:58:59

Modified files:
        distrib        : ChangeLog 
        src/daemon/common: commonComplexOptions.ml 
                           commonComplexOptions.mli commonInteractive.ml 
                           commonShared.ml 

Log message:
        patch #5475

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/mldonkey/distrib/ChangeLog?cvsroot=mldonkey&r1=1.1070&r2=1.1071
http://cvs.savannah.gnu.org/viewcvs/mldonkey/src/daemon/common/commonComplexOptions.ml?cvsroot=mldonkey&r1=1.63&r2=1.64
http://cvs.savannah.gnu.org/viewcvs/mldonkey/src/daemon/common/commonComplexOptions.mli?cvsroot=mldonkey&r1=1.18&r2=1.19
http://cvs.savannah.gnu.org/viewcvs/mldonkey/src/daemon/common/commonInteractive.ml?cvsroot=mldonkey&r1=1.82&r2=1.83
http://cvs.savannah.gnu.org/viewcvs/mldonkey/src/daemon/common/commonShared.ml?cvsroot=mldonkey&r1=1.36&r2=1.37

Patches:
Index: distrib/ChangeLog
===================================================================
RCS file: /sources/mldonkey/mldonkey/distrib/ChangeLog,v
retrieving revision 1.1070
retrieving revision 1.1071
diff -u -b -r1.1070 -r1.1071
--- distrib/ChangeLog   27 Oct 2006 08:33:40 -0000      1.1070
+++ distrib/ChangeLog   29 Oct 2006 18:58:59 -0000      1.1071
@@ -14,6 +14,12 @@
 ChangeLog
 =========
 
+2006/10/29
+5475: Multiuser: Implement user_commit_dir
+- directories with strategy incoming_files are shared recursively now
+- support several directories with incoming_* strategies, use the
+  first one with enough space to commit the finished file
+
 2006/10/27
 5499: Configure: find camlp4 in local, fix patch 5479 (dunk)
 

Index: src/daemon/common/commonComplexOptions.ml
===================================================================
RCS file: /sources/mldonkey/mldonkey/src/daemon/common/commonComplexOptions.ml,v
retrieving revision 1.63
retrieving revision 1.64
diff -u -b -r1.63 -r1.64
--- src/daemon/common/commonComplexOptions.ml   25 Oct 2006 11:14:02 -0000      
1.63
+++ src/daemon/common/commonComplexOptions.ml   29 Oct 2006 18:58:59 -0000      
1.64
@@ -729,7 +729,7 @@
     sharing_incoming = true;
     sharing_directories = false;
     sharing_extensions = [];
-    sharing_recursive = false;
+    sharing_recursive = true;
     sharing_minsize = zero;
     sharing_maxsize = Int64.max_int;
   }
@@ -928,7 +928,7 @@
 
 let search_incoming_files () =
   try
-    List.find (fun s -> s.shdir_strategy = "incoming_files") 
+    List.find_all (fun s -> s.shdir_strategy = "incoming_files") 
     !!shared_directories
   with Not_found ->
         let dirname = Filename.concat "incoming" "files" in
@@ -940,17 +940,11 @@
           }
         in
         shared_directories =:= s :: !!shared_directories;
-        s
-
-let incoming_files () =
-  let dir = search_incoming_files () in
-    Unix2.safe_mkdir dir.shdir_dirname;
-    Unix2.can_write_to_directory dir.shdir_dirname;
-    dir
+        [s]
 
 let search_incoming_directories () =
   try
-    List.find (fun s -> s.shdir_strategy = "incoming_directories") 
+    List.find_all (fun s -> s.shdir_strategy = "incoming_directories") 
     !!shared_directories
   with Not_found ->
       let dirname = Filename.concat "incoming" "directories" in
@@ -962,13 +956,71 @@
         }
       in
       shared_directories =:= s :: !!shared_directories;
-      s
+      [s]
+
+exception Incoming_full
+
+let incoming_dir usedir ?user ?needed_space ?network () =
+
+  let directories =
+    if usedir then
+      search_incoming_directories ()
+    else
+      search_incoming_files ()
+  in
+
+  let dirname_user =
+    match user with
+    | None -> ""
+    | Some user -> (user2_user_find user).user_commit_dir
+  in
+
+(*
+  let dirname_network =
+    match network with
+    | None -> ""
+    | Some network -> network
+  in
+*)
+(* todo: make the dir naming order user configurable *)
+  let compute_dir_name dir =
+    let dirname = Filename.concat dir dirname_user in
+(*    let dirname = Filename.concat dirname dirname_network in *)
+    dirname
+  in
+
+  let checkdir =
+    try
+      List.find (fun d ->
+       let dirname = compute_dir_name d.shdir_dirname in
+(* check if temp_directory and incoming are on different partitions *)
+       try
+          if (Unix.stat dirname).Unix.st_dev <> (Unix.stat 
!!temp_directory).Unix.st_dev then
+            begin
+              match needed_space with
+              | None -> true
+              | Some needed_space ->
+                  match Unix32.diskfree dirname with
+                    Some v -> v >= needed_space
+                 | _ -> true
+            end
+          else true
+       with _ -> true
+        ) directories
+    with Not_found -> raise Incoming_full;
+  in
+
+  let newdir = {
+      shdir_dirname = (compute_dir_name checkdir.shdir_dirname);
+      shdir_priority = checkdir.shdir_priority;
+      shdir_networks = checkdir.shdir_networks;
+      shdir_strategy = checkdir.shdir_strategy;
+    }
+  in
+  Unix2.safe_mkdir newdir.shdir_dirname;
+  Unix2.can_write_to_directory newdir.shdir_dirname;
+  newdir
 
-let incoming_directories () =
-  let dir = search_incoming_directories () in
-    Unix2.safe_mkdir dir.shdir_dirname;
-    Unix2.can_write_to_directory dir.shdir_dirname;
-    dir
 
 let _ =
 (* Check the definition of the incoming_files and incoming_directories in
@@ -977,8 +1029,8 @@
   option_hook shared_directories (fun _ ->
       if not !verification then begin
           verification := true;
-          ignore (incoming_files ());
-          ignore (incoming_directories ());
+          ignore (incoming_dir false ());
+          ignore (incoming_dir true ());
           verification := false
         end
   )

Index: src/daemon/common/commonComplexOptions.mli
===================================================================
RCS file: 
/sources/mldonkey/mldonkey/src/daemon/common/commonComplexOptions.mli,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -b -r1.18 -r1.19
--- src/daemon/common/commonComplexOptions.mli  25 Oct 2006 11:14:02 -0000      
1.18
+++ src/daemon/common/commonComplexOptions.mli  29 Oct 2006 18:58:59 -0000      
1.19
@@ -40,10 +40,9 @@
 val shared_directories : 
   CommonTypes.shared_directory list Options.option_record
   
-val incoming_files : unit -> CommonTypes.shared_directory
-val incoming_directories : unit -> CommonTypes.shared_directory
-val search_incoming_files : unit -> CommonTypes.shared_directory
-val search_incoming_directories : unit -> CommonTypes.shared_directory
+val incoming_dir : bool -> ?user:string -> ?needed_space:int64 -> 
?network:string -> unit -> CommonTypes.shared_directory
+val search_incoming_files : unit -> CommonTypes.shared_directory list
+val search_incoming_directories : unit -> CommonTypes.shared_directory list
   
 val sharing_only_directory : CommonTypes.sharing_strategy
 

Index: src/daemon/common/commonInteractive.ml
===================================================================
RCS file: /sources/mldonkey/mldonkey/src/daemon/common/commonInteractive.ml,v
retrieving revision 1.82
retrieving revision 1.83
diff -u -b -r1.82 -r1.83
--- src/daemon/common/commonInteractive.ml      23 Sep 2006 20:29:46 -0000      
1.82
+++ src/daemon/common/commonInteractive.ml      29 Oct 2006 18:58:59 -0000      
1.83
@@ -212,26 +212,13 @@
        (try
          let file_name = file_disk_name file in
          let incoming =
-            if Unix2.is_directory file_name then
-              incoming_directories ()
-            else
-              incoming_files ()
+            incoming_dir
+            (Unix2.is_directory file_name)
+            ~needed_space:(file_size file)
+            ~user:(file_owner file)
+            ()
           in
 
-(* check if temp_directory and incoming are on different partitions *)
-         if (Unix.stat incoming.shdir_dirname).Unix.st_dev <>
-            (Unix.stat !!temp_directory).Unix.st_dev
-         then
-           begin
-             match Unix32.diskfree incoming.shdir_dirname with
-               Some v -> if v < (file_size file) then begin
-                   send_dirfull_warning incoming.shdir_dirname true
-                     (Printf.sprintf "can not commit %s" (file_best_name 
file));
-                   raise Incoming_full
-                 end
-             | _ -> ()
-           end;
-
          let new_name = file_commited_name incoming.shdir_dirname file in
            if Unix2.is_directory file_name then begin
              Unix2.safe_mkdir new_name;
@@ -280,8 +267,11 @@
                 with e ->
                     lprintf_nl "Exception %s in file_commit secondaries" 
(Printexc2.to_string e);
             ) secondary_files
-        with e ->
-              lprintf_nl "Exception in file_commit: %s" (Printexc2.to_string 
e))
+       with
+         Incoming_full ->
+           send_dirfull_warning "" true
+             (Printf.sprintf "all incoming dirs are full, can not commit %s" 
(file_best_name file))
+       | e -> lprintf_nl "Exception in file_commit: %s" (Printexc2.to_string 
e))
     | _ -> assert false
 
 let file_cancel file user =
@@ -337,12 +327,8 @@
         Printf.sprintf "address@hidden, file received" (Unix.gethostname ())
     in
 
-    let incoming =
-      if Unix2.is_directory (file_disk_name file) then
-        incoming_directories ()
-      else
-        incoming_files ()
-    in
+(* TODO: This information can be wrong *)
+    let incoming = incoming_dir (Unix2.is_directory (file_disk_name file)) () 
in
 
     let line4 = if !!url_in_mail = "" then "" else
       Printf.sprintf "\r\n<%s/%s/%s>\r\n" !!url_in_mail incoming.shdir_dirname 
(Url.encode (file_best_name file))

Index: src/daemon/common/commonShared.ml
===================================================================
RCS file: /sources/mldonkey/mldonkey/src/daemon/common/commonShared.ml,v
retrieving revision 1.36
retrieving revision 1.37
diff -u -b -r1.36 -r1.37
--- src/daemon/common/commonShared.ml   25 Oct 2006 11:14:02 -0000      1.36
+++ src/daemon/common/commonShared.ml   29 Oct 2006 18:58:59 -0000      1.37
@@ -237,10 +237,10 @@
   
 let shared_scan_directory shared_dir local_dir =
   let incoming_files_inode = 
-    ((Unix.stat ((CommonComplexOptions.incoming_files 
()).shdir_dirname)).Unix.st_ino)
+    ((Unix.stat ((CommonComplexOptions.incoming_dir false 
()).shdir_dirname)).Unix.st_ino)
   in
   let incoming_directories_inode = 
-    ((Unix.stat ((CommonComplexOptions.incoming_directories 
()).shdir_dirname)).Unix.st_ino)
+    ((Unix.stat ((CommonComplexOptions.incoming_dir true 
()).shdir_dirname)).Unix.st_ino)
   in
   let temp_directory_inode =
     ((Unix.stat !!temp_directory).Unix.st_ino)




reply via email to

[Prev in Thread] Current Thread [Next in Thread]