<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Tue, Mar 11, 2014 at 3:11 PM, Doug Robinson <span dir="ltr"><<a href="mailto:doug.robinson@wandisco.com" target="_blank">doug.robinson@wandisco.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">I was wondering what folks thought of a proposal to enhance rsync to be able to create and maintain a cache of {filePath, 64-bit mtime, checksum} beforehand on both source and target systems and then use that cache later on when asked to sync the two systems together? </blockquote>

</div><br>See patches (in order of recommendation): db.diff, checksum-updating.diff, checksum-xattr.diff.</div><div class="gmail_extra"><br></div><div class="gmail_extra">I personally use db.diff in one situation at work combined with a sqlite DB on the source and destination machines.  You just need to periodically weed out any old inode values (via rsyncdb --clean /dirs) if things start to bloat.  In the future I'd like to see the db.diff code included by default as loadable libraries, which would allow someone to install plain rsync and only also install sqlite-using rsync and/or mysql-using modules if they want the extra functionality.  There is also a plan to eventually have the db code map the inodes in the db to paths for things like rename optimizations.</div>

<div class="gmail_extra"><br></div><div class="gmail_extra">That said, all these patches currently do is cache checksums.  The db patch's default strict checking only uses a cached inode's info if the size+mtime+ctime all match what we knew about the file when it was cached (which makes it pretty safe).  If you switch to a more lax algorithm (no ctime) you need to be extra sure the files don't get updated in some way as to leave the file matching the laxer inode info (e.g. only let rsync make changes to the files and/or make sure that modify timestamps always increase so that there is no chance of accidentally matching an older inode record).</div>

<div class="gmail_extra"><br></div><div class="gmail_extra">If you're wondering how an mtime-using algorithm helps your use case, keep in mind that the mtimes don't need to match between hosts, just between each host's files and its db cache (and any non-matching or missing ones get (re)computed to the new checksum).</div>

<div class="gmail_extra"><br></div><div class="gmail_extra">I'll also point out that if you want to use sqlite, I recommend you use the very latest db.diff (from the git patches repo) since it has a change that alleviates locking contention between the multiple rsync processes in a single copy (you can't really share the db between simultaneous rsync copies due to sqlite's poor multi-process locking -- use mysql for that).</div>

<div class="gmail_extra"><br></div><div class="gmail_extra">The rsyncdb manpage has info on initializing the db, noting mounts, maintenance, etc.</div><div class="gmail_extra"><br></div><div class="gmail_extra">The other patches might also be useful to you, so feel free to check them out:  <a href="https://git.samba.org/?p=rsync-patches.git">https://git.samba.org/?p=rsync-patches.git</a></div>

<div class="gmail_extra"><br clear="all"><div>..wayne..</div>
</div></div>