## 1.29 2018-07-05

Critical Bug Fix for Backup Resume

IMPORTANT NOTE: This release fixes a critical bug in the backup resume feature. All resumed backups prior to this release should be considered inconsistent. A backup will be resumed after a prior backup fails, unless resume=n has been specified. A resumed backup can be identified by checking the backup log for the message aborted backup of same type exists, will be cleaned to remove invalid files and resumed. If the message exists, do not use this backup or any backup in the same set for a restore and check the restore logs to see if a resumed backup was restored. If so, there may be inconsistent data in the cluster.

Fix critical bug in resume that resulted in inconsistent backups. A regression in v0.82 removed the timestamp comparison when deciding which files from the aborted backup to keep on resume. See note above for more details.

Fix non-compliant ISO-8601 timestamp format in S3 authorization headers. AWS and some gateways were tolerant of space rather than zero-padded hours while others were not.

Fix directory syncs running recursively when only the specified directory should be synced.

Fix --target-action and --recovery-option options being reported as invalid when restoring with --type=immediate.

Fix archive-copy throwing path not found error for incr/diff backups.

Fix failure in manifest build when two or more files in PGDATA are linked to the same directory.

Fix delta restore failing when a linked file was missing.

Fix error in selective restore when only one user database exists in the cluster.

Improve the HTTP client to set content-length to 0 when not specified by the server. S3 (and gateways) always set content-length or transfer-encoding but HTTP 1.1 does not require it and proxies (e.g. HAProxy) may not include either.

Improve performance of HTTPS client. Buffering now takes the `pending` bytes on the socket into account (when present) rather than relying entirely on `select()`. In some instances the final bytes would not be flushed until the connection was closed.

Improve S3 delete performance. The constant S3_BATCH_MAX had been replaced with a hard-coded value of 2, probably during testing.

Make backup/restore path sync more efficient. Scanning the entire directory can be very expensive if there are a lot of small tables. The backup manifest contains the path list so use it to perform syncs instead of scanning the backup/restore path. Remove recursive path sync functionality since it is no longer used.

Make backup.history sync more efficient. Only the backup.history/[year] directory was being synced, so check if the backup.history is newly created and sync it as well.

Add log-level-stderr option for stanza-* commands.

Update docs with 32-bit support and caveats. 32-bit support was added in v1.26.

Clarify that S3 buckets must be created by the user.

Update out-of-date description for the spool-path option.

Remove call to lscpu which can vary widely by build host.

Add new test for `Common::Io::Process` to show that output on stderr will raise an exception on `close()` even if the exit code is 0.

Add zero-length file to mock/all test.

Disable package build tests since v1 will no longer be packaged. Users installing packages should update to v2. v1 builds are intended for users installing from source.

Update SSL error message test on CentOS 7.

Update URL for Debian package repository.

Make ls ordering deterministic in mock/all test.

Change backup test user from backrest to pgbackrest.