Squashed commit of the following:

commit f0d82151b91828fece28a57d2de24f5ccc92e0d1
Author: David Steele <github@thelabyrinth.net>
Date:   Mon Mar 3 16:38:01 2014 -0500

    Changed thread timeout from WARN to ERROR

commit 571d449717fecee1eac64088bde42606fcddc4eb
Author: David Steele <github@thelabyrinth.net>
Date:   Thu Feb 27 19:15:00 2014 -0500

    Redirect find error output to /dev/null.  Sometimes files are removed from the db while find is running.  We only want to error if the find process errors.

commit 84c4cec257b25fc026f12560d6c0bc5cfb5822ec
Author: David Steele <github@thelabyrinth.net>
Date:   Thu Feb 27 13:00:41 2014 -0500

    Put redirects in common places where errors are be output but we don't want to see them.

commit ae782d08845e2d9f5fd9df8ce8a05cb472da6f56
Author: David Steele <github@thelabyrinth.net>
Date:   Tue Feb 25 07:30:45 2014 -0500

    Made archiving single-threaded so it will work

commit a84478045e7e25d197368a19ac375509f80dfc9c
Author: David Steele <github@thelabyrinth.net>
Date:   Mon Feb 24 18:04:42 2014 -0500

    No attempt to kill threads - just abort

commit da41eb3883622a333e6e84056c05964bc2e4e402
Author: David Steele <github@thelabyrinth.net>
Date:   Mon Feb 24 17:59:42 2014 -0500

    Added more warnings

commit 21b15b7cf6a8b48a4e9c65691eaece5306e47c22
Author: David Steele <github@thelabyrinth.net>
Date:   Mon Feb 24 09:33:47 2014 -0500

    Added thread timeout.

commit 5de8f275f0e9f06a45f1d2dafb540d5db244d505
Author: David Steele <github@thelabyrinth.net>
Date:   Sat Feb 22 11:14:01 2014 -0500

    Removed stderr redirects from the master ssh connection

commit 0e4f0f1308e15dad9e6d6d07cf9bc92bc1aa1492
Author: David Steele <github@thelabyrinth.net>
Date:   Sat Feb 22 10:54:02 2014 -0500

    Fixed issue with archive path expiration

commit e8c7d7aca69dae3ff14cf0065815bced3f2002f1
Author: David Steele <github@thelabyrinth.net>
Date:   Sat Feb 22 09:05:58 2014 -0500

    When archive_retention_type is full, use the oldest backup if there are fewer than required

commit 9270a6789206a0f2fcd5f92d5faaae5e6ac54973
Author: David Steele <github@thelabyrinth.net>
Date:   Fri Feb 21 16:09:34 2014 -0500

    Removed some more stderr redirects

commit 6d975d283073e90247214961e31d49959e7765c6
Author: David Steele <github@thelabyrinth.net>
Date:   Fri Feb 21 08:49:27 2014 -0500

    No longer discarding stderr

commit 0387a8ee09e5fbd66fe8d4dae055f9fea07e6039
Author: David Steele <github@thelabyrinth.net>
Date:   Fri Feb 21 07:34:17 2014 -0500

    replaced process id with thread id.  Added use thread to all modules.

commit ac3ce81621fab54c925eead8c53dee01c797d63e
Author: David Steele <github@thelabyrinth.net>
Date:   Fri Feb 21 06:42:42 2014 -0500

    Add process id to logging, don't generate checksum for 0 length files

commit 3d8e933343d8b7fa0900d37f68cd235b923980bf
Author: David Steele <github@thelabyrinth.net>
Date:   Wed Feb 19 16:06:21 2014 -0500

    More threads

commit 857e1774292da086f3ad4e9fca4ed28efea6683f
Author: David Steele <github@thelabyrinth.net>
Date:   Wed Feb 19 15:13:07 2014 -0500

    Using separate master queues

commit 800cd898317d76b24e8aa7f3acdbcb39cb2de052
Author: David Steele <github@thelabyrinth.net>
Date:   Wed Feb 19 13:37:18 2014 -0500

    Thread files are no longer in an array

commit 81433c0fdde660c3357526a3447cd1146a6b9f8c
Author: David Steele <github@thelabyrinth.net>
Date:   Wed Feb 19 13:03:52 2014 -0500

    Now using one control master for threading.

commit b4ac9552d24a12ddf06d4df293a360cd72a1cf4d
Author: David Steele <github@thelabyrinth.net>
Date:   Tue Feb 18 19:29:57 2014 -0500

    Skipped files removed from manifest, checksums stored

commit 27b820cfb4c5ac0ff5695202cdab98d471e0b95f
Author: David Steele <github@thelabyrinth.net>
Date:   Tue Feb 18 15:42:51 2014 -0500

    Backup handles files that were removed by the db

commit 187fdaf49bd1d9abb1805e28afc2fab9161bc405
Author: David Steele <github@thelabyrinth.net>
Date:   Sun Feb 16 19:01:06 2014 -0500

    Better compression choices.

commit 5c695a6522fd0092934e60dec7634760cde0673f
Author: David Steele <github@thelabyrinth.net>
Date:   Sun Feb 16 18:20:55 2014 -0500

    Improved archive logging and put in max limit

commit 13086e96266f8872ad0a07dfbac3289233742242
Author: David Steele <github@thelabyrinth.net>
Date:   Sun Feb 16 17:02:25 2014 -0500

    Renamed processes.

commit eb25dbdb9dedae5ef7dd35e8e5dbff839168373d
Author: David Steele <github@thelabyrinth.net>
Date:   Sun Feb 16 16:58:25 2014 -0500

    Added stanza to command string

commit b45d9c946e74434a01e62b371f9c382dcb64210d
Author: David Steele <github@thelabyrinth.net>
Date:   Sun Feb 16 16:51:05 2014 -0500

    Improved command string

commit 6d7f89fc98ad2e511e6e549943ff5c8311de89cf
Author: David Steele <github@thelabyrinth.net>
Date:   Sun Feb 16 01:31:24 2014 -0500

    change process string

commit 577c5af33fe05c961273d0d62c42dbd3320b4d87
Author: David Steele <github@thelabyrinth.net>
Date:   Sun Feb 16 01:24:54 2014 -0500

    testing

commit b514058cee5801897530e6d27d1a61b0f6b7692f
Author: David Steele <github@thelabyrinth.net>
Date:   Sat Feb 15 16:46:13 2014 -0500

    Changed to perl storable - at least it works

commit 392da9162084cb17eb7eff8bf1815e970df8ac3e
Author: David Steele <github@thelabyrinth.net>
Date:   Sat Feb 15 15:28:22 2014 -0500

    Remove old local archive dirs.

commit 0bc40d206cdbf777f56bfa2cb21472da71185872
Author: David Steele <github@thelabyrinth.net>
Date:   Sat Feb 15 14:33:31 2014 -0500

    Some fixes for config

commit 0979841f1a08352ece1ade8821d69080f82b1132
Author: David Steele <github@thelabyrinth.net>
Date:   Sat Feb 15 14:18:15 2014 -0500

    Async compress, thread kill improvements

commit bd00fb7f0ceb86092c3998ac1ac923bb4f28ae2f
Author: David Steele <github@thelabyrinth.net>
Date:   Sat Feb 15 10:45:01 2014 -0500

    Still working on thread kill

commit 3b2dd68aac9bc00e1b45d2a8d6dfd74da17112f7
Author: David Steele <github@thelabyrinth.net>
Date:   Sat Feb 15 10:31:57 2014 -0500

    More robust join code.

commit 27bf9b65720e278419c0c0a414141fb7b729c789
Author: David Steele <github@thelabyrinth.net>
Date:   Sat Feb 15 10:09:47 2014 -0500

    First SSH session is shared between objects and thread 0

commit c7aebf05c4e12dc9fbd7ba4bed838c6110e6cdd0
Author: David Steele <github@thelabyrinth.net>
Date:   Fri Feb 14 21:39:18 2014 -0500

    Handle term signals gracefully.

commit d100294894e1f1a5b2d35f6807d3e3a18a8c0b7e
Author: David Steele <github@thelabyrinth.net>
Date:   Fri Feb 14 19:56:28 2014 -0500

    Ability to resume failed backups, better locking

commit 308652cc657f5f015c6affde2d01a784862c96a0
Author: David Steele <github@thelabyrinth.net>
Date:   Fri Feb 14 09:05:14 2014 -0500

    Remove a lot of path creates - percent logging.

commit e14d52c42a48b2c707ae585e9470c637c9966d46
Author: David Steele <github@thelabyrinth.net>
Date:   Fri Feb 14 08:23:25 2014 -0500

    Improved backup threading

commit e93a444a415244de15769f07b69741530254f882
Author: David Steele <github@thelabyrinth.net>
Date:   Thu Feb 13 23:37:52 2014 -0500

    Changes to manifest.

commit 5c393a0df9beb7ce8e78b3b3627bc1114aa1f94d
Author: David Steele <github@thelabyrinth.net>
Date:   Thu Feb 13 21:44:19 2014 -0500

    Increased time to wait for log files

commit dccdec2ffa5d145f0dd8efceafaef651f59d72c6
Author: David Steele <github@thelabyrinth.net>
Date:   Thu Feb 13 21:41:20 2014 -0500

    trying to make labels stick

commit ae3dcc57f01983e4eac6ca72bb482b9fa2e6e4d3
Author: David Steele <github@thelabyrinth.net>
Date:   Thu Feb 13 21:31:57 2014 -0500

    Thread errors now exit

commit 6d9e7db1c69ee2f862e2941574c5c60ec8d5130f
Author: David Steele <github@thelabyrinth.net>
Date:   Thu Feb 13 20:54:41 2014 -0500

    Increased thread total.

commit 405d36497dc326b12dbc243a1b3bcd97ce438168
Author: David Steele <github@thelabyrinth.net>
Date:   Thu Feb 13 20:33:05 2014 -0500

    Less logging

commit a78d677b1e226cf9cda517ffeb662b63480c4099
Author: David Steele <github@thelabyrinth.net>
Date:   Thu Feb 13 20:29:42 2014 -0500

    Wait for archive files.

commit d4ba078183f0edd290f136cdb13c43f9f70ffd43
Author: David Steele <github@thelabyrinth.net>
Date:   Thu Feb 13 18:14:15 2014 -0500

    Only save manifest once

commit 1bec36b65b9ed5f2ca31879dc03877708ce048df
Author: David Steele <github@thelabyrinth.net>
Date:   Thu Feb 13 18:07:58 2014 -0500

    Better thread logging.

commit 2bafa5cf26773ba14da891c1079140c2b9ff08af
Author: David Steele <github@thelabyrinth.net>
Date:   Thu Feb 13 17:52:38 2014 -0500

    Logging tweak

commit 8453681ccdb41e8ad1e3cf71c2df761bb2341768
Author: David Steele <github@thelabyrinth.net>
Date:   Thu Feb 13 17:50:14 2014 -0500

    Logging tweaks

commit 4349f0caff1e9a9e1501483af8a64ec594513082
Author: David Steele <github@thelabyrinth.net>
Date:   Thu Feb 13 17:47:53 2014 -0500

    Fixes to log level and more logging

commit 7d55ce865bf9bf0580c256ae25acbf776692ec3a
Author: David Steele <github@thelabyrinth.net>
Date:   Thu Feb 13 17:11:53 2014 -0500

    Work on log levels

commit 133e27d813e3e70f7c322fe6705e7104909e8b3f
Author: David Steele <github@thelabyrinth.net>
Date:   Thu Feb 13 15:26:07 2014 -0500

    Archive tmp file fix.

commit 19f9a5193f547a874b871e7388328043da4ad274
Author: David Steele <github@thelabyrinth.net>
Date:   Thu Feb 13 14:54:28 2014 -0500

    Minor config changes.

commit 13a1f0cf246f24dd1fba09543b5fc19ebb065c70
Author: David Steele <github@thelabyrinth.net>
Date:   Thu Feb 13 13:54:43 2014 -0500

    Lots and lots of logging improvements

commit 14b13d48404aedaf629ea647592b058db324b5c4
Author: David Steele <github@thelabyrinth.net>
Date:   Thu Feb 13 12:02:45 2014 -0500

    Async archive log backup working.

commit f0df759bb97f3499e6c245fee88fceb491e4b551
Author: David Steele <github@thelabyrinth.net>
Date:   Thu Feb 13 00:21:25 2014 -0500

    Small debug fix

commit 7c4d463b1da98c4f9c94693ee64c4776075e36e3
Author: David Steele <github@thelabyrinth.net>
Date:   Wed Feb 12 23:49:40 2014 -0500

    More balanced backup.

commit b770c8ebece6c40190cc9d62f6798eeb32d4a105
Author: David Steele <github@thelabyrinth.net>
Date:   Wed Feb 12 22:33:09 2014 -0500

    More work on archive-pull

commit 8e60a3111fd22095c6bdbbe99b51c3af87e661a0
Author: David Steele <github@thelabyrinth.net>
Date:   Wed Feb 12 20:28:27 2014 -0500

    Lots of archive-pull plumbing

commit 16df430b73834c97410565bd96edeb7e7f79714d
Author: David Steele <github@thelabyrinth.net>
Date:   Wed Feb 12 17:34:34 2014 -0500

    New constants and basic fork.

commit 564bd65b3e8241113998558208d561c61b73fbb3
Author: David Steele <github@thelabyrinth.net>
Date:   Wed Feb 12 16:01:48 2014 -0500

    Basic plumbing for archive-pull function

commit 5181282b7402ecbba88544e4cafddac1c7eb8f76
Author: David Steele <github@thelabyrinth.net>
Date:   Wed Feb 12 08:04:42 2014 -0500

    Command line parameter checks

commit 729b07fed5eaa8247eaee65bd8f3e1a996bd7752
Author: David Steele <github@thelabyrinth.net>
Date:   Wed Feb 12 07:45:29 2014 -0500

    Hardlink now a conf option.

commit 219120ba811ad102f3c0df60119d645d919d534b
Author: David Steele <github@thelabyrinth.net>
Date:   Wed Feb 12 07:39:42 2014 -0500

    Archiving and flag changes.

commit b9a2e7093ef381ce3b5e6bf2ee9ebf9cf03fa3d7
Author: David Steele <github@thelabyrinth.net>
Date:   Tue Feb 11 21:17:30 2014 -0500

    Some more file debug info

commit 1a9f73b781db87e98ea1a42db2b43a29dec950f3
Author: David Steele <github@thelabyrinth.net>
Date:   Tue Feb 11 17:07:49 2014 -0500

    Added timestamp to log

commit 49dbc897a635262db27de5091e8d330f92efa948
Author: David Steele <github@thelabyrinth.net>
Date:   Tue Feb 11 16:57:51 2014 -0500

    Small file allocation improvements.

commit 9a1de327a197af06ab647d88cd7669ff938b4daa
Author: David Steele <github@thelabyrinth.net>
Date:   Tue Feb 11 16:37:20 2014 -0500

    Turned ssh compression on

commit 71812fca996ca53d205694c796694bb46dd4fbae
Author: David Steele <github@thelabyrinth.net>
Date:   Tue Feb 11 16:21:33 2014 -0500

    Thread total is defined in the conf file.

commit 171ca709d62a129907e241012e493162c6be2472
Author: David Steele <github@thelabyrinth.net>
Date:   Tue Feb 11 16:08:55 2014 -0500

    Better file ordering for threads.

commit c58ccb588e846d7012923a927c2b955cffef3a3c
Author: David Steele <github@thelabyrinth.net>
Date:   Tue Feb 11 15:31:16 2014 -0500

    Parallel backup now working

commit a55b37efc31e6a6074ed98fe8c92ff10cfaf277b
Author: David Steele <github@thelabyrinth.net>
Date:   Fri Feb 7 19:34:14 2014 -0500

    Working on parallel backup

commit 820791cf922e4c186288ee005e87a914df4d6c3e
Author: David Steele <github@thelabyrinth.net>
Date:   Thu Feb 6 17:31:33 2014 -0500

    FF log is skipped for pre-9.3 databases.

commit 60b2be58ac5e410719335993dabf218decc266d5
Author: David Steele <github@thelabyrinth.net>
Date:   Thu Feb 6 16:37:37 2014 -0500

    Finished db object abstraction

commit f20f3b3ee642c02b3b4295b235bc59b99a48af20
Author: David Steele <github@thelabyrinth.net>
Date:   Thu Feb 6 15:54:22 2014 -0500

    Started db object abstraction.

commit 9d08f2a64494c9528c30531bd95b7306484f229e
Author: David Steele <github@thelabyrinth.net>
Date:   Thu Feb 6 12:49:54 2014 -0500

    More robust config.  Retention is read from config.

commit a2b0d7a674a1524f53440be45d333409a3ad1a2b
Author: David Steele <github@thelabyrinth.net>
Date:   Wed Feb 5 22:26:10 2014 -0500

    Backup expiration working again.  Other changes.

commit 27986e0c10999660078e7c74b25bc99eb3e028ce
Author: David Steele <github@thelabyrinth.net>
Date:   Wed Feb 5 21:39:08 2014 -0500

    File is now an object.

commit 3e7faf0e5f7d3f61856f0c7f3b50329172e69585
Author: David Steele <github@thelabyrinth.net>
Date:   Wed Feb 5 16:53:25 2014 -0500

    Some path fixes.

commit 7bee0f3141a301c0a1fa1bb8d092dbbd317fe296
Author: David Steele <github@thelabyrinth.net>
Date:   Wed Feb 5 15:56:05 2014 -0500

    Moved backup location.

commit a15fcb8c23e11bb2ec056abe13120591cd70c515
Author: David Steele <github@thelabyrinth.net>
Date:   Wed Feb 5 13:10:36 2014 -0500

    Moved tmp path.

commit 7ffade2453afafb98d2d67d3612742e17075947e
Author: David Steele <github@thelabyrinth.net>
Date:   Wed Feb 5 11:35:09 2014 -0500

    Fixed file mod time and permissions

commit c86a61ca3e15acc1afc09c400aa866a958e1fd27
Author: David Steele <github@thelabyrinth.net>
Date:   Wed Feb 5 10:40:49 2014 -0500

    Relative links working for tablespaces.

commit 12a960f91a59fbcce53659b1ed4fbed5a1ba8fc9
Author: David Steele <github@thelabyrinth.net>
Date:   Wed Feb 5 08:21:27 2014 -0500

    File copy supports decompression

commit a81049995859666f378ee804ef15aba1d87543e2
Author: David Steele <github@thelabyrinth.net>
Date:   Tue Feb 4 18:48:39 2014 -0500

    Remote backup fully working.

commit e38c482a26d270b19813c67829f0df977afa0996
Author: David Steele <github@thelabyrinth.net>
Date:   Mon Feb 3 20:48:02 2014 -0500

    Cleanup

commit 946b8261cfedd62114642344614392426196ba00
Author: David Steele <github@thelabyrinth.net>
Date:   Mon Feb 3 20:29:03 2014 -0500

    Moved archive_push function

commit d5832a70c05dd40e73d6457e2b287f500454b781
Author: David Steele <github@thelabyrinth.net>
Date:   Mon Feb 3 20:23:04 2014 -0500

    Moved last backup function.

commit aef6730267af465eea3ab99ecd06917f1628d176
Author: David Steele <github@thelabyrinth.net>
Date:   Mon Feb 3 19:57:21 2014 -0500

    Moved backup functions.

commit 316a5b559858b3aea89306efd4f0557c2f386d09
Author: David Steele <github@thelabyrinth.net>
Date:   Mon Feb 3 19:03:17 2014 -0500

    Working on remote

commit fa668d50072542890f15d9ebda77bb2ed552e3e9
Author: David Steele <github@thelabyrinth.net>
Date:   Mon Feb 3 14:50:23 2014 -0500

    Move file init code to file module

commit aef4adf1f3864de9e844d7fb7bb31afce5e887d2
Author: David Steele <github@thelabyrinth.net>
Date:   Sun Feb 2 19:03:05 2014 -0500

    Splitting main perl file

commit 4c2e4f7e4924a0cd4ba9d3cae1f99f5fe115d147
Author: David Steele <github@thelabyrinth.net>
Date:   Sun Feb 2 12:45:59 2014 -0500

    Lots more work on remote functionality

commit bf8ac7abe6210b2300375ba879ade54f8dd69167
Author: David Steele <github@thelabyrinth.net>
Date:   Sun Feb 2 11:12:55 2014 -0500

    manifest_get() now works remotely

commit 4556de472240b161eb3e8ac37ece2eac7f5c3278
Author: David Steele <github@thelabyrinth.net>
Date:   Sun Feb 2 10:40:05 2014 -0500

    Source and destination can now be remote.

commit de972ef5d3bb73f69839a06a43dc9448ccd500cd
Author: David Steele <github@thelabyrinth.net>
Date:   Sat Feb 1 12:57:27 2014 -0500

    More work on file_copy

commit 52ba8801efe419988a8900b5696944e8015a3a12
Author: David Steele <github@thelabyrinth.net>
Date:   Sat Feb 1 11:04:33 2014 -0500

    Working on remote file copy

commit 2ad7a3d815da205d2b84372ad3f8279c2572a76e
Author: David Steele <github@thelabyrinth.net>
Date:   Fri Jan 31 00:04:08 2014 -0500

    Formatting.

commit c5de8fa6e637a877aee003ef623b606d113070c8
Author: David Steele <github@thelabyrinth.net>
Date:   Thu Jan 30 23:58:26 2014 -0500

    Created variable for compression extension

commit 151ff8ba6049b8a4b98900cbbde23bb540d71796
Author: David Steele <github@thelabyrinth.net>
Date:   Thu Jan 30 23:24:34 2014 -0500

    Removed unused strPath param from path_get()

commit 52004d3c84b5886e229dcab67729eff2e1ae7291
Author: David Steele <github@thelabyrinth.net>
Date:   Thu Jan 30 23:16:19 2014 -0500

    Comments

commit 447d83fcdc64c0a075772a6b6f7affb0191e2b2a
Author: David Steele <github@thelabyrinth.net>
Date:   Thu Jan 30 23:09:34 2014 -0500

    Removing more copies.

commit f86618377c5b8efe7fe18683f0fb009f7391ad59
Author: David Steele <github@thelabyrinth.net>
Date:   Thu Jan 30 11:35:34 2014 -0500

    Lots of backup refactoring.

commit e13a706c0a251baf9f69126653bb2eabb78064b5
Author: David Steele <github@thelabyrinth.net>
Date:   Wed Jan 29 15:38:57 2014 -0500

    More moving.  Links now also get references.

commit 54c73b38139127e0acb9a13be6cd7a94d84851ca
Author: David Steele <github@thelabyrinth.net>
Date:   Wed Jan 29 15:03:57 2014 -0500

    Moving stuff around

commit c26b47d4c7d346dd67168333114ee8770baa6efd
Author: David Steele <github@thelabyrinth.net>
Date:   Wed Jan 29 12:06:30 2014 -0500

    Abstracting file functions.

commit 47c3c82540ab3acbf741b6e511b86898e40c9b5c
Author: David Steele <github@thelabyrinth.net>
Date:   Wed Jan 29 06:40:15 2014 -0500

    Fixed checksum function.

commit 12f6d889de8ec6363b3275ccf887b41b3336d994
Author: David Steele <github@thelabyrinth.net>
Date:   Tue Jan 28 17:16:07 2014 -0500

    More modular file copy.

commit 6625ea1405aef8b19b0f5e0c347cb1b7f9761747
Author: David Steele <github@thelabyrinth.net>
Date:   Thu Jan 23 19:39:51 2014 -0500

    Coded paths needed for archive logging

commit cdd1ef73069062720af4061b1955d09c3af27330
Author: David Steele <github@thelabyrinth.net>
Date:   Wed Jan 22 21:40:56 2014 -0500

    Added general path function

commit 161de23c3bf7e4ce7e58f6611acbf227a675cd8f
Author: David Steele <github@thelabyrinth.net>
Date:   Wed Jan 22 19:03:20 2014 -0500

    Starting new structure

commit 89b96954f6f6aa87d7ad138c7a87a8cf64558fc4
Author: David Steele <github@thelabyrinth.net>
Date:   Tue Jan 21 22:02:14 2014 -0500

    Allow any archive file start starts with 24 hex characters.

commit 7e73cf22cf8df6410600760390c7600eff3b5152
Author: David Steele <github@thelabyrinth.net>
Date:   Tue Jan 21 21:59:54 2014 -0500

    Changed where .backup files were copied

commit 62ae46e2139e37d2a036131801c85db13148cd0d
Author: David Steele <github@thelabyrinth.net>
Date:   Tue Jan 21 21:12:24 2014 -0500

    Archive expiration working.

commit a83e94ba27dd0c0958eaca145d4630ef5d7e0fbe
Author: David Steele <github@thelabyrinth.net>
Date:   Tue Jan 21 20:38:58 2014 -0500

    Fixed error in the backup regexp

commit faaaa5690f5c2f7999a692a999e3b3de67ff648f
Author: David Steele <github@thelabyrinth.net>
Date:   Mon Jan 20 20:09:50 2014 -0500

    Working on archive retention.

commit df7ada85c226fb7e851fa4c3e1182e9f1a78fe47
Author: David Steele <github@thelabyrinth.net>
Date:   Sat Jan 18 10:14:35 2014 -0500

    Working on expiration

commit 1e0f2485dbcf73b730fb04e6f2ef212d46df725d
Author: David Steele <github@thelabyrinth.net>
Date:   Sat Jan 18 00:03:32 2014 -0500

    Working on expiration

commit 3719d54cc99d6be4b3d22fb853a2c7ff46b4b3dc
Author: David Steele <github@thelabyrinth.net>
Date:   Wed Jan 15 20:41:29 2014 -0500

    Some notes. removed dead .backup move

commit a7de734105b876654b7cbc8d9d448f2749176369
Author: David Steele <github@thelabyrinth.net>
Date:   Sun Jan 12 20:12:49 2014 -0500

    Some cleanup - fixed tablespace path regression.

commit 05dcbc2246ed949fec256e45c6c441b26f30673b
Author: David Steele <github@thelabyrinth.net>
Date:   Sun Jan 12 15:28:19 2014 -0500

    Working on making backups consistent

commit c1e59048808f969b2380a0607a2447d27822d25b
Author: David Steele <github@thelabyrinth.net>
Date:   Sun Jan 12 01:46:27 2014 -0500

    Fixed xlog copy - working on correctness

commit 3ed83e78f2dd8a424a9adc396aa3c2eeed6cf39f
Author: David Steele <github@thelabyrinth.net>
Date:   Sat Jan 11 02:16:14 2014 -0500

    Working on archive log copy

commit 387439ac8e0b01d61f896c67bd92be88acb9b063
Author: David Steele <github@thelabyrinth.net>
Date:   Fri Jan 10 16:01:25 2014 -0500

    Working on processing archive logs

commit e23820098d7a1dc83e3e8a1f88616a7aa298e388
Author: David Steele <github@thelabyrinth.net>
Date:   Fri Jan 10 14:02:56 2014 -0500

    Notices are not emitted on start and stop backup

commit 8b73a26b8425a14ce233f16fa29d38fbaf428331
Author: David Steele <github@thelabyrinth.net>
Date:   Fri Jan 10 00:49:19 2014 -0500

    Some notes for things to do.

commit 49c1fcd3eb33873d402e486bc2b7ede8280d4fc9
Author: David Steele <github@thelabyrinth.net>
Date:   Fri Jan 10 00:43:26 2014 -0500

    Backup file is being copied to pg_xlog

commit 8e966c50dd1a28e5cfabc8670c88bfbdcb9913aa
Author: David Steele <github@thelabyrinth.net>
Date:   Fri Jan 10 00:22:51 2014 -0500

    Removed commented code

commit b5f965942bc370beb7803395f79872323f7c59ba
Author: David Steele <github@thelabyrinth.net>
Date:   Fri Jan 10 00:21:46 2014 -0500

    Added optional hard-linking.

commit cceac444ad357bf8babe36f906bacdc25b845841
Author: David Steele <github@thelabyrinth.net>
Date:   Thu Jan 9 21:55:09 2014 -0500

    Added comment

commit c47ec3d2609539d5437664aad4535bc2a2edad81
Author: David Steele <github@thelabyrinth.net>
Date:   Thu Jan 9 21:40:33 2014 -0500

    All backup references are now stored.

commit ed5f8226a4a08ca4665bd49b3413bcaf7e4959c5
Author: David Steele <github@thelabyrinth.net>
Date:   Thu Jan 9 20:12:46 2014 -0500

    References are from oldest backup

commit bb8fb5b54f14b622af02899c95ad9e8e88d74e8b
Author: David Steele <github@thelabyrinth.net>
Date:   Thu Jan 9 20:00:34 2014 -0500

    Sparse backup dirs implemented

commit 854972dde65f9560ff8177115e5b2e785e478a28
Author: David Steele <github@thelabyrinth.net>
Date:   Thu Jan 9 18:23:50 2014 -0500

    Basic deltas work.

commit c89984cd59dc2ca1792d8cd99df1978719aed16e
Author: David Steele <github@thelabyrinth.net>
Date:   Thu Jan 9 18:02:42 2014 -0500

    Revert 2914a6d..e31b21f

    This rolls back to commit 2914a6dcc67b120be0ee5d808590849ebe9c3664.

commit e31b21f95aa5bad69ab2a31f9fd569d1a2e01a78
Author: David Steele <github@thelabyrinth.net>
Date:   Thu Jan 9 18:01:34 2014 -0500

    Revert 52d8697..e0be213

    This rolls back to commit 52d86971183da8f8a88775f0196f44c3ab9440a1.

commit e0be2132063932108069a0754d7416c2e2c58624
Author: David Steele <github@thelabyrinth.net>
Date:   Thu Jan 9 18:01:12 2014 -0500

    Revert 2914a6d..9633e17

    This rolls back to commit 2914a6dcc67b120be0ee5d808590849ebe9c3664.

commit 9633e17d04d00e31c80c3d12f848a5351b97963b
Author: David Steele <github@thelabyrinth.net>
Date:   Thu Jan 9 17:58:40 2014 -0500

    Revert "Removed tmp file."

    This reverts commit 52d86971183da8f8a88775f0196f44c3ab9440a1.

commit 2914a6dcc67b120be0ee5d808590849ebe9c3664
Author: David Steele <github@thelabyrinth.net>
Date:   Thu Jan 9 17:58:01 2014 -0500

    Working on delta

commit 52d86971183da8f8a88775f0196f44c3ab9440a1
Author: David Steele <github@thelabyrinth.net>
Date:   Fri Jan 3 21:24:13 2014 -0500

    Removed tmp file.

commit ba5075a3e0458874f8b8dff0b4bc1f8cb07243ae
Author: David Steele <github@thelabyrinth.net>
Date:   Fri Jan 3 21:19:41 2014 -0500

    New implementation for archive logging

commit 6379b723dee94d63ef55134468ff86f588c717f8
Author: David Steele <github@thelabyrinth.net>
Date:   Fri Jan 3 20:10:53 2014 -0500

    Set the backup label

commit 78457a2f420428cab317e6cdb57446008ad9751c
Author: David Steele <github@thelabyrinth.net>
Date:   Fri Jan 3 19:59:47 2014 -0500

    Simplified incremental naming

commit ef846ac8db0d44339214676a88e0ee7c06d1a217
Author: David Steele <github@thelabyrinth.net>
Date:   Fri Jan 3 19:28:49 2014 -0500

    Working on backup rotation.

commit e6e995ec19f8cb01311ce0f9f2772edbc009b7d2
Author: David Steele <gitlab@thelabyrinth.net>
Date:   Wed Dec 18 22:08:49 2013 -0500

    Fixed typo in config.

commit ba72eda700cdde982a360cdf99a4a5d367403cf4
Author: David Steele <gitlab@thelabyrinth.net>
Date:   Wed Dec 18 21:30:51 2013 -0500

    Commented out dir mod time variable.

commit 9907c8b7b74bc2b3bef76a47567c695de680a2e3
Author: David Steele <gitlab@thelabyrinth.net>
Date:   Tue Dec 17 07:47:24 2013 -0500

    Set file mtime.

commit b1ffa9419034ef7f3b6795f64633cf3dab87d052
Author: David Steele <gitlab@thelabyrinth.net>
Date:   Mon Dec 16 21:59:22 2013 -0500

    New storage structure, saved archive start/stop location.

commit 6d992855d213edae6f1f6986226c7b9d9ad55116
Author: David Steele <gitlab@thelabyrinth.net>
Date:   Sun Dec 15 20:56:42 2013 -0500

    Cleaning up start stop backup code.

commit 0d3fa39117e17d1f7cf83927079da7fdaea826a9
Author: David Steele <gitlab@thelabyrinth.net>
Date:   Sun Dec 15 20:04:07 2013 -0500

    Added start and stop backup.

commit 1d21f4f9fa2f659d1f8e441fae00a87d4150373a
Author: David Steele <gitlab@thelabyrinth.net>
Date:   Sun Dec 15 18:18:54 2013 -0500

    Added diff to commands.

commit 31fca50eae78b777c1113957806ad8658d744235
Author: David Steele <gitlab@thelabyrinth.net>
Date:   Sun Dec 15 17:18:50 2013 -0500

    Backup more or less works - no start/stop backup or archiving.

commit 21b7a3f27a373e877f2da845f6f5ac4974d3daac
Author: David Steele <gitlab@thelabyrinth.net>
Date:   Sat Dec 14 15:02:47 2013 -0500

    Added manifest load and save.

commit 8b40ea7d598d3110c04f664b38060336c744290f
Author: David Steele <gitlab@thelabyrinth.net>
Date:   Sat Dec 14 14:03:08 2013 -0500

    Tablespace names are now recorded

commit 2ba26ffc262404347a46211545a5a2948a3e656c
Author: David Steele <gitlab@thelabyrinth.net>
Date:   Sat Dec 14 13:14:59 2013 -0500

    More refactoring.

commit d12773ca85fb73fedac018aecdc6ea5283ddbd2f
Author: David Steele <gitlab@thelabyrinth.net>
Date:   Wed Dec 11 20:39:07 2013 -0500

    Added generic config command

commit 4aa480b858bba7a0114c292132f7289b726258b0
Author: David Steele <gitlab@thelabyrinth.net>
Date:   Wed Dec 11 20:13:39 2013 -0500

    Cleaned up some var names.

commit 299d402209fd4535f1d7aa8dcb32d6c440f61577
Author: David Steele <gitlab@thelabyrinth.net>
Date:   Wed Dec 11 19:57:54 2013 -0500

    More cleanup

commit aa6e72bb9cf9e0523db135790c2cf3097db4c97d
Author: David Steele <gitlab@thelabyrinth.net>
Date:   Wed Dec 11 19:22:41 2013 -0500

    Refactoring

commit 0dba2ab8c7178ec592fe25a0178b5be482f6d544
Author: David Steele <gitlab@thelabyrinth.net>
Date:   Tue Dec 10 20:16:43 2013 -0500

    Added backup command

commit 0bdccd298269113aa0454506824a230923cfbb17
Author: David Steele <gitlab@thelabyrinth.net>
Date:   Tue Dec 10 19:18:41 2013 -0500

    Reversed order of tests.

commit f09505f60efbd715fd72b617036db4124c2b5054
Author: David Steele <gitlab@thelabyrinth.net>
Date:   Tue Dec 10 19:11:54 2013 -0500

    Working on unit tests for archiving.

commit 39989dd01c2fd77147a1b775ae6b092f3d86c65b
Author: David Steele <gitlab@thelabyrinth.net>
Date:   Mon Dec 9 17:26:47 2013 -0500

    Working on manifest.

commit 02a9a693b8881698008ba9f83cbffcc2e8be7f3f
Author: David Steele <gitlab@thelabyrinth.net>
Date:   Fri Dec 6 20:24:14 2013 -0500

    Working on backup.

commit 4d42d448e95df1c7535c3b73594483462f5f893c
Author: David Steele <gitlab@thelabyrinth.net>
Date:   Thu Dec 5 23:29:05 2013 -0500

    Working on backup.

commit 12518e72967ee6f54419f1acdb8f01b3cb2da26e
Author: David Steele <gitlab@thelabyrinth.net>
Date:   Thu Dec 5 08:59:39 2013 -0500

    Working on backup.

commit ae6886c8e058f3a094d7fbb7544122e3e33dc935
Author: David Steele <gitlab@thelabyrinth.net>
Date:   Wed Dec 4 22:30:26 2013 -0500

    Started backup command.

commit c9c7e340a7d89feb96d1070b45a15dd4fecfeb4d
Author: David Steele <gitlab@thelabyrinth.net>
Date:   Wed Dec 4 21:37:45 2013 -0500

    Added config file.

commit 53b2aae10640d6abb287f9c163f2b6700dc7b9de
Author: David Steele <gitlab@thelabyrinth.net>
Date:   Mon Dec 2 21:37:01 2013 -0500

    Added note.

commit 4a2b009c2e24c4c7c52849ad53358557658ee2a3
Author: David Steele <gitlab@thelabyrinth.net>
Date:   Mon Dec 2 21:34:25 2013 -0500

    Removed unused include.

commit 1e114cdc9de43efdf43ccbd1d296c01f297a2907
Author: David Steele <gitlab@thelabyrinth.net>
Date:   Mon Dec 2 21:26:32 2013 -0500

    Fix comments.

commit 9553baf540404c528b73a1608e5308b93d06d166
Author: David Steele <gitlab@thelabyrinth.net>
Date:   Mon Dec 2 21:23:10 2013 -0500

    Basic error checking and options for archive-local command

commit c7c049902fd87c6f4c43d25b9d60d9289a1742f5
Author: David Steele <gitlab@thelabyrinth.net>
Date:   Mon Dec 2 16:21:40 2013 -0500

    Added warnings, comments, removed dead code.

commit 5761832df5ce2e7655602d92f9d1a55a75a75bee
Author: David Steele <gitlab@thelabyrinth.net>
Date:   Mon Dec 2 15:10:18 2013 -0500

    Implemented strict.

commit a2c98391dfe7f360de7e97f0cb06d55dbb06af3d
Author: David Steele <gitlab@thelabyrinth.net>
Date:   Mon Dec 2 14:34:37 2013 -0500

    Starting on configuration.

commit 2be8c5d9e7cef1256bb9f530d0594aec8bbf1351
Author: David Steele <gitlab@thelabyrinth.net>
Date:   Sat Nov 23 20:05:04 2013 -0500

    Working on unit tests.

commit 5d0251be2f05dbb44063b874a62057040dcc0f66
Author: David Steele <gitlab@thelabyrinth.net>
Date:   Sat Nov 23 19:16:09 2013 -0500

    Working on archive-local and beefing up unit tests.

commit 8b37786e5b640c7a1c270388ac1158cce45ebf72
Author: David Steele <gitlab@thelabyrinth.net>
Date:   Fri Nov 22 23:24:37 2013 -0500

    Now connecting to db.

commit 8db52c115a18f690d42db975ee1bb28363b5135f
Author: David Steele <gitlab@thelabyrinth.net>
Date:   Fri Nov 22 17:29:01 2013 -0500

    Fixed whitespace.

commit d86e7eb6276bbe1df025c372690c19da8133c4bb
Author: David Steele <dsteele@Davids-MacBook-Pro.local>
Date:   Wed Nov 20 22:30:26 2013 -0500

    Added checksums.

commit bc46aefe61871e27281b9b8c9ffc185c8e2846af
Author: David Steele <dsteele@Davids-MacBook-Pro.local>
Date:   Wed Nov 20 22:24:30 2013 -0500

    Fixed for OSX.  Do not every use TextEditor on code!

commit e67821a23096f4788f6bef71e7d4d361b7d9858f
Author: David Steele <dsteele@Davids-MacBook-Pro.local>
Date:   Wed Nov 20 21:49:07 2013 -0500

    Working on OSX port.

commit 9ce37308b5a3fb81e204a37cfbe28bec968126e4
Author: David Steele <github@thelabyrinth.net>
Date:   Sun Nov 17 21:48:53 2013 -0500

    Working on archive-local command.

commit 548578c8c96d304fb777c9aeb233733f97145818
Author: David Steele <dsteele@laptop-dev.(none)>
Date:   Sun Nov 17 13:58:21 2013 -0500

    Working on unit test.
v0.01: Backup and archiving are functional

This version has been put into production at Resonate, so it does work, but there are a number of major caveats.

* No restore functionality, but the backup directories are consistent Postgres data directories.  You'll need to either uncompress the files or turn off compression in the backup.  Uncompressed backups on a ZFS (or similar) filesystem are a good option because backups can be restored locally via a snapshot to create logical backups or do spot data recovery.

* Archiving is single-threaded.  This has not posed an issue on our multi-terabyte databases with heavy write volume.  Recommend a large WAL volume or to use the async option with a large volume nearby.

* Backups are multi-threaded, but the Net::OpenSSH library does not appear to be 100% threadsafe so it will very occasionally lock up on a thread.  There is an overall process timeout that resolves this issue by killing the process.  Yes, very ugly.

* Checksums are lost on any resumed backup. Only the final backup will record checksum on multiple resumes.  Checksums from previous backups are correctly recorded and a full backup will reset everything.

* The backup.manifest is being written as Storable because Config::IniFile does not seem to handle large files well.  Would definitely like to save these as human-readable text.

* Absolutely no documentation (outside the code).  Well, excepting these release notes.

* Lots of other little things and not so little things.  Much refactoring to follow.