Moved one fsync() call.
[rsync-patches.git] / slow-down.diff
1 This patch adds a --slow-down=USECs option that causes the sender to scan
2 the filelist more slowly, and the generator to scan for deletions more
3 slowly.  It doesn't do anything to make anyone slow down during the normal
4 transfer processing, though.
5
6 The idea is to lessen rsync's impact on disk I/O.  Unfortunately, there
7 should really be a way to affect more of rsync's processing, perhaps by
8 specifying a maximum disk I/O rate (and have that affect a maximum stat()
9 rate or something like that).
10
11 To use this patch, run these commands for a successful build:
12
13     patch -p1 <patches/slow-down.diff
14     ./configure                           (optional if already run)
15     make
16
17 --- old/flist.c
18 +++ new/flist.c
19 @@ -58,6 +58,7 @@ extern int copy_links;
20  extern int copy_unsafe_links;
21  extern int protocol_version;
22  extern int sanitize_paths;
23 +extern unsigned long sleep_asec;
24  extern struct stats stats;
25  
26  extern char curr_dir[MAXPATHLEN];
27 @@ -1246,6 +1247,9 @@ static void send_directory(int f, struct
28                 }
29  
30                 send_file_name(f, flist, fbuf, NULL, flags, filter_flags);
31 +               /* Sleep for a bit, to avoid hammering the disk. */
32 +               if (sleep_asec)
33 +                       usleep(sleep_asec);
34         }
35  
36         fbuf[len] = '\0';
37 --- old/options.c
38 +++ new/options.c
39 @@ -102,6 +102,7 @@ int size_only = 0;
40  int daemon_bwlimit = 0;
41  int bwlimit = 0;
42  int fuzzy_basis = 0;
43 +unsigned long sleep_asec = 0;
44  size_t bwlimit_writemax = 0;
45  int ignore_existing = 0;
46  int ignore_non_existing = 0;
47 @@ -374,6 +375,7 @@ void usage(enum logcode F)
48    rprintf(F,"     --password-file=FILE    read daemon-access password from FILE\n");
49    rprintf(F,"     --list-only             list the files instead of copying them\n");
50    rprintf(F,"     --bwlimit=KBPS          limit I/O bandwidth; KBytes per second\n");
51 +  rprintf(F,"     --slow-down=USECs       sleep N usec while creating the filelist\n");
52    rprintf(F,"     --write-batch=FILE      write a batched update to FILE\n");
53    rprintf(F,"     --only-write-batch=FILE like --write-batch but w/o updating destination\n");
54    rprintf(F,"     --read-batch=FILE       read a batched update from FILE\n");
55 @@ -514,6 +516,7 @@ static struct poptOption long_options[] 
56    {"log-format",       0,  POPT_ARG_STRING, &stdout_format, 0, 0, 0 }, /* DEPRECATED */
57    {"itemize-changes", 'i', POPT_ARG_NONE,   0, 'i', 0, 0 },
58    {"bwlimit",          0,  POPT_ARG_INT,    &bwlimit, 0, 0, 0 },
59 +  {"slow-down",        0,  POPT_ARG_LONG,   &sleep_asec, 0, 0, 0 },
60    {"backup",          'b', POPT_ARG_NONE,   &make_backups, 0, 0, 0 },
61    {"backup-dir",       0,  POPT_ARG_STRING, &backup_dir, 0, 0, 0 },
62    {"suffix",           0,  POPT_ARG_STRING, &backup_suffix, 0, 0, 0 },