Merge ChangeSet@1.4: Documentation about future development.
[rsync/rsync.git] / TODO
CommitLineData
46ef7d1d 1-*- indented-text -*-
a0365806 2
46ef7d1d
MP
3URGENT ---------------------------------------------------------------
4
33d213bb
MP
5
6IMPORTANT ------------------------------------------------------------
7
8Cross-test versions
9
10 Part of the regression suite should be making sure that we don't
11 break backwards compatibility: old clients vs new servers and so
12 on. Ideally we would test the cross product of versions.
13
14 It might be sufficient to test downloads from well-known public
15 rsync servers running different versions of rsync. This will give
16 some testing and also be the most common case for having different
17 versions and not being able to upgrade.
18
a2d2e5c0
MP
19use chroot
20
21 If the platform doesn't support it, then don't even try.
22
23 If running as non-root, then don't fail, just give a warning.
24 (There was a thread about this a while ago?)
25
26 http://lists.samba.org/pipermail/rsync/2001-August/thread.html
27 http://lists.samba.org/pipermail/rsync/2001-September/thread.html
28
29--files-from
30
31 Avoids traversal. Better option than a pile of --include statements
32 for people who want to generate the file list using a find(1)
33 command or a script.
34
35Performance
36
37 Traverse just one directory at a time. Tridge says it's possible.
a6a3c3df
MP
38
39 At the moment rsync reads the whole file list into memory at the
40 start, which makes us use a lot of memory and also not pipeline
41 network access as much as we could.
42
43Memory accounting
44
45 At exit, show how much memory was used for the file list, etc.
46
47Hard-link handling
48
49 At the moment hardlink handling is very expensive, so it's off by
50 default. It does not need to be so.
51
52 We can rule out hardlinked directories since they will probably
53 screw us up in all kinds of ways. They simply should not be used.
54
55 At the moment rsync only cares about hardlinks to regular files. I
56 guess you could also use them for sockets, devices and other beasts,
57 but I have not seen them.
58
59 When trying to reproduce hard links, we only need to worry about
60 files that have more than one name (nlinks>1 && !S_ISDIR).
61
62 The basic point of this is to discover alternate names that refer to
63 the same file. All operations, including creating the file and
64 writing modifications to it need only to be done for the first name.
65 For all later names, we just create the link and then leave it
66 alone.
67
68 If hard links are to be preserved:
69
70 Before the generator/receiver fork, the list of files is received
71 from the sender (recv_file_list), and a table for detecting hard
72 links is built.
73
74 The generator looks for hard links within the file list and does
75 not send checksums for them, though it does send other metadata.
76
77 The sender sends the device number and inode with file entries, so
78 that files are uniquely identified.
79
80 The receiver goes through and creates hard links (do_hard_links)
81 after all data has been written, but before directory permissions
82 are set.
83
84 At the moment device and inum are sent as 4-byte integers, which
85 will probably cause problems on large filesystems. On Linux the
86 kernel uses 64-bit ino_t's internally, and people will soon have
87 filesystems big enough to use them. We ought to follow NFS4 in
88 using 64-bit device and inode identification, perhaps with a
89 protocol version bump.
90
91 Once we've seen all the names for a particular file, we no longer
92 need to think about it and we can deallocate the memory.
93
94 We can also have the case where there are links to a file that are
95 not in the tree being transferred. There's nothing we can do about
96 that. Because we rename the destination into place after writing,
97 any hardlinks to the old file are always going to be orphaned. In
98 fact that is almost necessary because otherwise we'd get really
99 confused if we were generating checksums for one name of a file and
100 modifying another.
101
102 At the moment the code seems to make a whole second copy of the file
103 list, which seems unnecessary.
104
105 We should have a test case that exercises hard links. Since it
106 might be hard to compare ./tls output where the inodes change we
107 might need a little program to check whether several names refer to
108 the same file.
a2d2e5c0
MP
109
110IPv6
111
c33e3e39
MP
112 Implement suggestions from http://www.kame.net/newsletter/19980604/
113 and ftp://ftp.iij.ad.jp/pub/RFC/rfc2553.txt
114
115 If a host has multiple addresses, then listen try to connect to all
116 in order until we get through. (getaddrinfo may return multiple
c10b0bdd 117 addresses.) This is kind of implemented already.
c33e3e39
MP
118
119 Possibly also when starting as a server we may need to listen on
120 multiple passive addresses. This might be a bit harder, because we
121 may need to select on all of them. Hm.
122
a2d2e5c0
MP
123 Define a syntax for IPv6 literal addresses. Since they include
124 colons, they tend to break most naming systems, including ours.
125 Based on the HTTP IPv6 syntax, I think we should use
126
127 rsync://[::1]/foo/bar
128 [::1]::bar
129
130 which should just take a small change to the parser code.
131
5aafd07b
MP
132Errors
133
134 If we hang or get SIGINT, then explain where we were up to. Perhaps
135 have a static buffer that contains the current function name, or
136 some kind of description of what we were trying to do. This is a
137 little easier on people than needing to run strace/truss.
138
139 "The dungeon collapses! You are killed." Rather than "unexpected
140 eof" give a message that is more detailed if possible and also more
141 helpful.
142
5575de14
MP
143File attributes
144
145 Device major/minor numbers should be at least 32 bits each. See
146 http://lists.samba.org/pipermail/rsync/2001-November/005357.html
147
148 Transfer ACLs. Need to think of a standard representation.
149 Probably better not to even try to convert between NT and POSIX.
150 Possibly can share some code with Samba.
5aafd07b 151
28a69e25
MP
152Empty directories
153
154 With the current common --include '*/' --exclude '*' pattern, people
155 can end up with many empty directories. We might avoid this by
156 lazily creating such directories.
157
158zlib
159
160 Perhaps don't use our own zlib. Will we actually be incompatible,
161 or just be slightly less efficient?
162
163logging
164
165 Perhaps flush stdout after each filename, so that people trying to
166 monitor progress in a log file can do so more easily. See
167 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=48108
168
7c583c73
MP
169rsyncd over ssh
170
171 There are already some patches to do this.
172
a2d2e5c0
MP
173PLATFORMS ------------------------------------------------------------
174
175Win32
176
177 Don't detach, because this messes up --srvany.
178
179 http://sources.redhat.com/ml/cygwin/2001-08/msg00234.html
180
181 According to "Effective TCP/IP Programming" (??) close() on a socket
182 has incorrect behaviour on Windows -- it sends a RST packet to the
183 other side, which gives a "connection reset by peer" error. On that
184 platform we should probably do shutdown() instead. However, on Unix
185 we are correct to call close(), because shutdown() discards
186 untransmitted data.
187
7c583c73
MP
188DOCUMENTATION --------------------------------------------------------
189
190Update README
191
a2d2e5c0
MP
192BUILD FARM -----------------------------------------------------------
193
194Add machines
195
196 AMDAHL UTS (Dave Dykstra)
197
198 Cygwin (on different versions of Win32?)
199
200 HP-UX variants (via HP?)
33d213bb 201
5aafd07b
MP
202 SCO
203
46ef7d1d
MP
204NICE -----------------------------------------------------------------
205
71b3374b
MP
206SIGHUP
207
208 Re-read config file (just exec() ourselves) rather than exiting.
209
a2d2e5c0
MP
210--no-detach and --no-fork options
211
212 Very useful for debugging. Also good when running under a
213 daemon-monitoring process that tries to restart the service when the
214 parent exits.
215
216hang/timeout friendliness
217
218 On
219
50f2f002
MP
220verbose output
221
222 Indicate whether files are new, updated, or deleted
223
a2d2e5c0
MP
224internationalization
225
226 Change to using gettext(). Probably need to ship this for platforms
227 that don't have it.
228
229 Solicit translations.
230
231 Does anyone care?
232
46ef7d1d
MP
233rsyncsh
234
235 Write a small emulation of interactive ftp as a Pythonn program
236 that calls rsync. Commands such as "cd", "ls", "ls *.c" etc map
237 fairly directly into rsync commands: it just needs to remember the
238 current host, directory and so on. We can probably even do
239 completion of remote filenames.
240