Annotation of embedaddon/rsync/TODO, revision 1.1

1.1     ! misho       1: -*- indented-text -*-
        !             2: 
        !             3: FEATURES ------------------------------------------------------------
        !             4: Use chroot only if supported
        !             5: Allow supplementary groups in rsyncd.conf                      2002/04/09
        !             6: Handling IPv6 on old machines
        !             7: Other IPv6 stuff
        !             8: Add ACL support                                                        2001/12/02
        !             9: proxy authentication                                           2002/01/23
        !            10: SOCKS                                                          2002/01/23
        !            11: FAT support
        !            12: --diff                                         david.e.sewell  2002/03/15
        !            13: Add daemon --no-fork option
        !            14: Create more granular verbosity                                 2003/05/15
        !            15: 
        !            16: DOCUMENTATION --------------------------------------------------------
        !            17: Keep list of open issues and todos on the web site
        !            18: Perhaps redo manual as SGML
        !            19: 
        !            20: LOGGING --------------------------------------------------------------
        !            21: Memory accounting
        !            22: Improve error messages
        !            23: Better statistics                                      Rasmus  2002/03/08
        !            24: Perhaps flush stdout like syslog
        !            25: Log child death on signal
        !            26: verbose output                                 David Stein     2001/12/20
        !            27: internationalization
        !            28: 
        !            29: DEVELOPMENT --------------------------------------------------------
        !            30: Handling duplicate names
        !            31: Use generic zlib                                               2002/02/25
        !            32: TDB                                                            2002/03/12
        !            33: Splint                                                         2002/03/12
        !            34: 
        !            35: PERFORMANCE ----------------------------------------------------------
        !            36: Traverse just one directory at a time
        !            37: Allow skipping MD4 file_sum                                    2002/04/08
        !            38: Accelerate MD4
        !            39: 
        !            40: TESTING --------------------------------------------------------------
        !            41: Torture test
        !            42: Cross-test versions                                            2001/08/22
        !            43: Test on kernel source
        !            44: Test large files
        !            45: Create mutator program for testing
        !            46: Create configure option to enable dangerous tests
        !            47: Create pipe program for testing
        !            48: Create test makefile target for some tests
        !            49: 
        !            50: RELATED PROJECTS -----------------------------------------------------
        !            51: rsyncsh
        !            52: http://rsync.samba.org/rsync-and-debian/
        !            53: rsyncable gzip patch
        !            54: rsyncsplit as alternative to real integration with gzip?
        !            55: reverse rsync over HTTP Range
        !            56: 
        !            57: 
        !            58: 
        !            59: FEATURES ------------------------------------------------------------
        !            60: 
        !            61: 
        !            62: Use chroot only if supported
        !            63: 
        !            64:   If the platform doesn't support it, then don't even try.
        !            65: 
        !            66:   If running as non-root, then don't fail, just give a warning.
        !            67:   (There was a thread about this a while ago?)
        !            68: 
        !            69:     http://lists.samba.org/pipermail/rsync/2001-August/thread.html
        !            70:     http://lists.samba.org/pipermail/rsync/2001-September/thread.html
        !            71: 
        !            72:                       --          --
        !            73: 
        !            74: 
        !            75: Allow supplementary groups in rsyncd.conf                      2002/04/09
        !            76: 
        !            77:   Perhaps allow supplementary groups to be specified in rsyncd.conf;
        !            78:   then make the first one the primary gid and all the rest be
        !            79:   supplementary gids.
        !            80: 
        !            81:                       --          --
        !            82: 
        !            83: 
        !            84: Handling IPv6 on old machines
        !            85: 
        !            86:   The KAME IPv6 patch is nice in theory but has proved a bit of a
        !            87:   nightmare in practice.  The basic idea of their patch is that rsync
        !            88:   is rewritten to use the new getaddrinfo()/getnameinfo() interface,
        !            89:   rather than gethostbyname()/gethostbyaddr() as in rsync 2.4.6.
        !            90:   Systems that don't have the new interface are handled by providing
        !            91:   our own implementation in lib/, which is selectively linked in.
        !            92: 
        !            93:   The problem with this is that it is really hard to get right on
        !            94:   platforms that have a half-working implementation, so redefining
        !            95:   these functions clashes with system headers, and leaving them out
        !            96:   breaks.  This affects at least OSF/1, RedHat 5, and Cobalt, which
        !            97:   are moderately improtant.
        !            98: 
        !            99:   Perhaps the simplest solution would be to have two different files
        !           100:   implementing the same interface, and choose either the new or the
        !           101:   old API.  This is probably necessary for systems that e.g. have
        !           102:   IPv6, but gethostbyaddr() can't handle it.  The Linux manpage claims
        !           103:   this is currently the case.
        !           104: 
        !           105:   In fact, our internal sockets interface (things like
        !           106:   open_socket_out(), etc) is much narrower than the getaddrinfo()
        !           107:   interface, and so probably simpler to get right.  In addition, the
        !           108:   old code is known to work well on old machines.
        !           109: 
        !           110:   We could drop the rather large lib/getaddrinfo files.
        !           111: 
        !           112:                       --          --
        !           113: 
        !           114: 
        !           115: Other IPv6 stuff
        !           116:   
        !           117:   Implement suggestions from http://www.kame.net/newsletter/19980604/
        !           118:   and ftp://ftp.iij.ad.jp/pub/RFC/rfc2553.txt
        !           119: 
        !           120:   If a host has multiple addresses, then listen try to connect to all
        !           121:   in order until we get through.  (getaddrinfo may return multiple
        !           122:   addresses.)  This is kind of implemented already.
        !           123: 
        !           124:   Possibly also when starting as a server we may need to listen on
        !           125:   multiple passive addresses.  This might be a bit harder, because we
        !           126:   may need to select on all of them.  Hm.
        !           127: 
        !           128:                       --          --
        !           129: 
        !           130: 
        !           131: Add ACL support                                                        2001/12/02
        !           132: 
        !           133:   Transfer ACLs.  Need to think of a standard representation.
        !           134:   Probably better not to even try to convert between NT and POSIX.
        !           135:   Possibly can share some code with Samba.
        !           136:   NOTE: there is a patch that implements this in the "patches" subdir.
        !           137: 
        !           138:                       --          --
        !           139: 
        !           140: 
        !           141: proxy authentication                                           2002/01/23
        !           142: 
        !           143:   Allow RSYNC_PROXY to be http://user:pass@proxy.foo:3128/, and do
        !           144:   HTTP Basic Proxy-Authentication.
        !           145: 
        !           146:   Multiple schemes are possible, up to and including the insanity that
        !           147:   is NTLM, but Basic probably covers most cases.
        !           148: 
        !           149:                       --          --
        !           150: 
        !           151: 
        !           152: SOCKS                                                          2002/01/23
        !           153: 
        !           154:   Add --with-socks, and then perhaps a command-line option to put them
        !           155:   on or off.  This might be more reliable than LD_PRELOAD hacks.
        !           156: 
        !           157:                       --          --
        !           158: 
        !           159: 
        !           160: FAT support
        !           161: 
        !           162:   rsync to a FAT partition on a Unix machine doesn't work very well at
        !           163:   the moment.  I think we get errors about invalid filenames and
        !           164:   perhaps also trying to do atomic renames.
        !           165: 
        !           166:   I guess the code to do this is currently #ifdef'd on Windows;
        !           167:   perhaps we ought to intelligently fall back to it on Unix too.
        !           168: 
        !           169:                       --          --
        !           170: 
        !           171: 
        !           172: --diff                                         david.e.sewell  2002/03/15
        !           173: 
        !           174:   Allow people to specify the diff command.  (Might want to use wdiff,
        !           175:   gnudiff, etc.)
        !           176: 
        !           177:   Just diff the temporary file with the destination file, and delete
        !           178:   the tmp file rather than moving it into place.
        !           179: 
        !           180:   Interaction with --partial.
        !           181: 
        !           182:   Security interactions with daemon mode?
        !           183: 
        !           184:                       --          --
        !           185: 
        !           186: 
        !           187: Add daemon --no-fork option
        !           188: 
        !           189:   Very useful for debugging.  Also good when running under a
        !           190:   daemon-monitoring process that tries to restart the service when the
        !           191:   parent exits.
        !           192: 
        !           193:                       --          --
        !           194: 
        !           195: 
        !           196: Create more granular verbosity                                 2003/05/15
        !           197: 
        !           198:   Control output with the --report option.
        !           199: 
        !           200:   The option takes as a single argument (no whitespace) a
        !           201:   comma delimited lists of keywords.
        !           202: 
        !           203:   This would separate debugging from "logging" as well as
        !           204:   fine grained selection of statistical reporting and what
        !           205:   actions are logged.
        !           206: 
        !           207:   http://lists.samba.org/archive/rsync/2003-May/006059.html
        !           208: 
        !           209:                       --          --
        !           210: 
        !           211: DOCUMENTATION --------------------------------------------------------
        !           212: 
        !           213: 
        !           214: Keep list of open issues and todos on the web site
        !           215: 
        !           216:                       --          --
        !           217: 
        !           218: 
        !           219: Perhaps redo manual as SGML
        !           220: 
        !           221:   The man page is getting rather large, and there is more information
        !           222:   that ought to be added.
        !           223: 
        !           224:   TexInfo source is probably a dying format.
        !           225: 
        !           226:   Linuxdoc looks like the most likely contender.  I know DocBook is
        !           227:   favoured by some people, but it's so bloody verbose, even with emacs
        !           228:   support.
        !           229: 
        !           230:                       --          --
        !           231: 
        !           232: LOGGING --------------------------------------------------------------
        !           233: 
        !           234: 
        !           235: Memory accounting
        !           236: 
        !           237:   At exit, show how much memory was used for the file list, etc.
        !           238: 
        !           239:   Also we do a wierd exponential-growth allocation in flist.c.  I'm
        !           240:   not sure this makes sense with modern mallocs.  At any rate it will
        !           241:   make us allocate a huge amount of memory for large file lists.
        !           242: 
        !           243:                       --          --
        !           244: 
        !           245: 
        !           246: Improve error messages
        !           247: 
        !           248:   If we hang or get SIGINT, then explain where we were up to.  Perhaps
        !           249:   have a static buffer that contains the current function name, or
        !           250:   some kind of description of what we were trying to do.  This is a
        !           251:   little easier on people than needing to run strace/truss.
        !           252: 
        !           253:   "The dungeon collapses!  You are killed."  Rather than "unexpected
        !           254:   eof" give a message that is more detailed if possible and also more
        !           255:   helpful.
        !           256: 
        !           257:   If we get an error writing to a socket, then we should perhaps
        !           258:   continue trying to read to see if an error message comes across
        !           259:   explaining why the socket is closed.  I'm not sure if this would
        !           260:   work, but it would certainly make our messages more helpful.
        !           261: 
        !           262:   What happens if a directory is missing -x attributes.  Do we lose
        !           263:   our load?  (Debian #28416) Probably fixed now, but a test case would
        !           264:   be good.
        !           265: 
        !           266:                       --          --
        !           267: 
        !           268: 
        !           269: Better statistics                                      Rasmus  2002/03/08
        !           270: 
        !           271:   <Rasmus>
        !           272:       hey, how about an rsync option that just gives you the
        !           273:       summary without the list of files?  And perhaps gives
        !           274:       more information like the number of new files, number
        !           275:       of changed, deleted, etc. ?
        !           276: 
        !           277:   <mbp>
        !           278:       nice idea there is --stats but at the moment it's very
        !           279:       tridge-oriented rather than user-friendly it would be
        !           280:       nice to improve it that would also work well with
        !           281:       --dryrun
        !           282: 
        !           283:                       --          --
        !           284: 
        !           285: 
        !           286: Perhaps flush stdout like syslog
        !           287: 
        !           288:   Perhaps flush stdout after each filename, so that people trying to
        !           289:   monitor progress in a log file can do so more easily.  See
        !           290:   http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=48108
        !           291: 
        !           292:                       --          --
        !           293: 
        !           294: 
        !           295: Log child death on signal
        !           296: 
        !           297:   If a child of the rsync daemon dies with a signal, we should notice
        !           298:   that when we reap it and log a message.
        !           299: 
        !           300:                       --          --
        !           301: 
        !           302: 
        !           303: verbose output                                 David Stein     2001/12/20
        !           304:   
        !           305:   At end of transfer, show how many files were or were not transferred
        !           306:   correctly.
        !           307: 
        !           308:                       --          --
        !           309: 
        !           310: 
        !           311: internationalization
        !           312: 
        !           313:   Change to using gettext().  Probably need to ship this for platforms
        !           314:   that don't have it.
        !           315: 
        !           316:   Solicit translations.
        !           317: 
        !           318:   Does anyone care?  Before we bother modifying the code, we ought to
        !           319:   get the manual translated first, because that's possibly more useful
        !           320:   and at any rate demonstrates desire.
        !           321: 
        !           322:                       --          --
        !           323: 
        !           324: DEVELOPMENT --------------------------------------------------------
        !           325: 
        !           326: Handling duplicate names
        !           327: 
        !           328:   Some folks would like rsync to be deterministic in how it handles
        !           329:   duplicate names that come from mering multiple source directories
        !           330:   into a single destination directory; e.g. the last name wins.  We
        !           331:   could do this by switching our sort algorithm to one that will
        !           332:   guarantee that the names won't be reordered.  Alternately, we could
        !           333:   assign an ever-increasing number to each item as we insert it into
        !           334:   the list and then make sure that we leave the largest number when
        !           335:   cleaning the file list (see clean_flist()).  Another solution would
        !           336:   be to add a hash table, and thus never put any duplicate names into
        !           337:   the file list (and bump the protocol to handle this).
        !           338: 
        !           339:                       --          --
        !           340: 
        !           341: 
        !           342: Use generic zlib                                               2002/02/25
        !           343: 
        !           344:   Perhaps don't use our own zlib.
        !           345: 
        !           346:   Advantages:
        !           347:    
        !           348:     - will automatically be up to date with bugfixes in zlib
        !           349: 
        !           350:     - can leave it out for small rsync on e.g. recovery disks
        !           351: 
        !           352:     - can use a shared library
        !           353: 
        !           354:     - avoids people breaking rsync by trying to do this themselves and
        !           355:       messing up
        !           356: 
        !           357:   Should we ship zlib for systems that don't have it, or require
        !           358:   people to install it separately?
        !           359: 
        !           360:   Apparently this will make us incompatible with versions of rsync
        !           361:   that use the patched version of rsync.  Probably the simplest way to
        !           362:   do this is to just disable gzip (with a warning) when talking to old
        !           363:   versions.
        !           364: 
        !           365:                       --          --
        !           366: 
        !           367: 
        !           368: Splint                                                         2002/03/12
        !           369: 
        !           370:   Build rsync with SPLINT to try to find security holes.  Add
        !           371:   annotations as necessary.  Keep track of the number of warnings
        !           372:   found initially, and see how many of them are real bugs, or real
        !           373:   security bugs.  Knowing the percentage of likely hits would be
        !           374:   really interesting for other projects.
        !           375: 
        !           376:                       --          --
        !           377: 
        !           378: PERFORMANCE ----------------------------------------------------------
        !           379: 
        !           380: Allow skipping MD4 file_sum                                    2002/04/08
        !           381: 
        !           382:   If we're doing a local transfer, or using -W, then perhaps don't
        !           383:   send the file checksum.  If we're doing a local transfer, then
        !           384:   calculating MD4 checksums uses 90% of CPU and is unlikely to be
        !           385:   useful.
        !           386: 
        !           387:   We should not allow it to be disabled separately from -W, though
        !           388:   as it is the only thing that lets us know when the rsync algorithm
        !           389:   got out of sync and messed the file up (i.e. if the basis file
        !           390:   changed between checksum generation and reception).
        !           391: 
        !           392:                       --          --
        !           393: 
        !           394: 
        !           395: Accelerate MD4
        !           396: 
        !           397:   Perhaps borrow an assembler MD4 from someone?
        !           398: 
        !           399:   Make sure we call MD4 with properly-sized blocks whenever possible
        !           400:   to avoid copying into the residue region?
        !           401: 
        !           402:                       --          --
        !           403: 
        !           404: TESTING --------------------------------------------------------------
        !           405: 
        !           406: Torture test
        !           407: 
        !           408:   Something that just keeps running rsync continuously over a data set
        !           409:   likely to generate problems.
        !           410: 
        !           411:                       --          --
        !           412: 
        !           413: 
        !           414: Cross-test versions                                            2001/08/22
        !           415: 
        !           416:   Part of the regression suite should be making sure that we
        !           417:   don't break backwards compatibility: old clients vs new
        !           418:   servers and so on.  Ideally we would test both up and down
        !           419:   from the current release to all old versions.
        !           420: 
        !           421:   Run current rsync versions against significant past releases.
        !           422: 
        !           423:   We might need to omit broken old versions, or versions in which
        !           424:   particular functionality is broken
        !           425: 
        !           426:   It might be sufficient to test downloads from well-known public
        !           427:   rsync servers running different versions of rsync.  This will give
        !           428:   some testing and also be the most common case for having different
        !           429:   versions and not being able to upgrade.
        !           430: 
        !           431:   The new --protocol option may help in this.
        !           432: 
        !           433:                       --          --
        !           434: 
        !           435: 
        !           436: Test on kernel source
        !           437: 
        !           438:   Download all versions of kernel; unpack, sync between them.  Also
        !           439:   sync between uncompressed tarballs.  Compare directories after
        !           440:   transfer.
        !           441: 
        !           442:   Use local mode; ssh; daemon; --whole-file and --no-whole-file.
        !           443: 
        !           444:   Use awk to pull out the 'speedup' number for each transfer.  Make
        !           445:   sure it is >= x.
        !           446: 
        !           447:                       --          --
        !           448: 
        !           449: 
        !           450: Test large files
        !           451: 
        !           452:   Sparse and non-sparse
        !           453: 
        !           454:                       --          --
        !           455: 
        !           456: 
        !           457: Create mutator program for testing
        !           458: 
        !           459:   Insert bytes, delete bytes, swap blocks, ...
        !           460: 
        !           461:                       --          --
        !           462: 
        !           463: 
        !           464: Create configure option to enable dangerous tests
        !           465: 
        !           466:                       --          --
        !           467: 
        !           468: 
        !           469: Create pipe program for testing
        !           470: 
        !           471:   Create pipe program that makes slow/jerky connections for
        !           472:   testing Versions of read() and write() that corrupt the
        !           473:   stream, or abruptly fail
        !           474: 
        !           475:                       --          --
        !           476: 
        !           477: 
        !           478: Create test makefile target for some tests
        !           479: 
        !           480:   Separate makefile target to run rough tests -- or perhaps
        !           481:   just run them every time?
        !           482: 
        !           483:                       --          --
        !           484: 
        !           485: RELATED PROJECTS -----------------------------------------------------
        !           486: 
        !           487: rsyncsh
        !           488: 
        !           489:    Write a small emulation of interactive ftp as a Pythonn program
        !           490:    that calls rsync.  Commands such as "cd", "ls", "ls *.c" etc map
        !           491:    fairly directly into rsync commands: it just needs to remember the
        !           492:    current host, directory and so on.  We can probably even do
        !           493:    completion of remote filenames.
        !           494: 
        !           495:                       --          --
        !           496: 
        !           497: 
        !           498: http://rsync.samba.org/rsync-and-debian/
        !           499: 
        !           500: 
        !           501:                       --          --
        !           502: 
        !           503: 
        !           504: rsyncable gzip patch
        !           505: 
        !           506:   Exhaustive, tortuous testing
        !           507: 
        !           508:   Cleanups?
        !           509: 
        !           510:                       --          --
        !           511: 
        !           512: 
        !           513: rsyncsplit as alternative to real integration with gzip?
        !           514: 
        !           515:                       --          --
        !           516: 
        !           517: 
        !           518: reverse rsync over HTTP Range
        !           519: 
        !           520:   Goswin Brederlow suggested this on Debian; I think tridge and I
        !           521:   talked about it previous in relation to rproxy.
        !           522: 
        !           523:   Addendum:  It looks like someone is working on a version of this:
        !           524: 
        !           525:     http://zsync.moria.org.uk/
        !           526: 
        !           527:                       --          --
        !           528: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>