- Updated to apply to latest source.
[rsync/rsync-patches.git] / slow-down.diff
CommitLineData
6f921167
WD
1This patch adds a --slow-down=USECs option that causes the sender to scan
2the filelist more slowly, and the generator to scan for deletions more
3slowly. It doesn't do anything to make anyone slow down during the normal
4transfer processing, though.
5
6The idea is to lessen rsync's impact on disk I/O. Unfortunately, there
7should really be a way to affect more of rsync's processing, perhaps by
8specifying a maximum disk I/O rate (and have that affect a maximum stat()
9rate or something like that).
10
03019e41
WD
11To 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
6f921167
WD
17--- old/flist.c
18+++ new/flist.c
03019e41 19@@ -53,6 +53,7 @@ extern int copy_links;
6f921167
WD
20 extern int copy_unsafe_links;
21 extern int protocol_version;
22 extern int sanitize_paths;
23+extern unsigned long sleep_asec;
6f921167
WD
24 extern struct stats stats;
25 extern struct file_list *the_file_list;
56e792f1 26
03019e41 27@@ -1036,6 +1037,9 @@ static void send_directory(int f, struct
6f921167
WD
28 }
29
30 send_file_name(f, flist, fbuf, NULL, 0);
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
03019e41 39@@ -102,6 +102,7 @@ int size_only = 0;
6f921167
WD
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;
03019e41 47@@ -377,6 +378,7 @@ void usage(enum logcode F)
6f921167
WD
48 rprintf(F," --password-file=FILE read 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");
03019e41
WD
55@@ -516,6 +518,7 @@ static struct poptOption long_options[]
56 {"log-format", 0, POPT_ARG_STRING, &stdout_format, 0, 0, 0 }, /* DEPRECATED */
6f921167
WD
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 },