## 1.13 2017-02-05

Parallel Archiving, Stanza Create, Improved Info and Check

IMPORTANT NOTE: The new implementation of asynchronous archiving no longer copies WAL to a separate queue. If there is any WAL left over in the old queue after upgrading to 1.13, it will be abandoned and not pushed to the repository.

To prevent this outcome, stop archiving by setting archive_command = false. Next, drain the async queue by running `pgbackrest --stanza=[stanza-name] archive-push` and wait for the process to complete. Check that the queue in [spool-path]/archive/[stanza-name]/out is empty. Finally, install `1.13` and restore the original archive_command.

IMPORTANT NOTE: The stanza-create command is not longer optional and must be executed before backup or archiving can be performed on a new stanza. Pre-existing stanzas do not require stanza-create to be executed.

Fixed const assignment giving compiler warning in C library.

Fixed a few directory syncs that were missed for the --repo-sync option.

Fixed an issue where a missing user/group on restore could cause an uninitialized value error in `File->owner()`.

Fixed an issue where protocol mismatch errors did not output the expected value.

Fixed a spurious archive-get log message that indicated an exit code of 1 was an abnormal termination.

Improved, multi-process implementation of asynchronous archiving.

Improved stanza-create command so that it can repair broken repositories in most cases and is robust enough to be made mandatory.

Improved check command to run on a standby, though only basic checks are done because `pg_switch_xlog()` cannot be executed on a replica.

Added archive and backup WAL ranges to the info command.

Added warning to update `pg_tablespace.spclocation` when remapping tablespaces in < 9.2.

Remove remote lock requirements for the archive-get, restore, info, and check commands since they are read-only operations.

Log file banner is not output until the first log entry is written.

Reduced the likelihood of torn pages causing a false positive in page checksums by filtering on start backup LSN.

Remove Intel-specific optimization from C library build flags.

Remove --lock option. This option was introduced before the lock directory could be located outside the repository and is now obsolete.

Added --log-timestamp option to allow timestamps to be suppressed in logging. This is primarily used to avoid filters in the automated documentation.

Return proper error code when unable to convert a relative path to an absolute path.

Refactor `File` and `BackupCommon` modules to improve test coverage.

Moved `File->manifest()` into the `FileCommon.pm` module.

Moved the `Archive` modules to the Archive directory and split the archive-get and archive-push commands into separate modules.

Split the check command out of the `Archive.pm` module.

Allow logging to be suppressed via `logDisable()` and `logEnable()`.

Allow for locks to be taken more than once in the same process without error.

Lock directories can be created when more than one directory level is required.

Clean up `optionValid()`/`optionTest()` logic in `Lock.pm`.

Added `Exception::exceptionCode()` and `Exception::exceptionMessage()` to simplify error handling logic.

Represent .gz extension with a constant.

Allow empty files to be created with `FileCommon::fileStringWrite()` and use temp files to avoid partial reads.

Refactor process IO and process master/minion code out from the common protocol code.

Fixed alignment issues with multiline logging.

Added documentation to the User Guide for the process-max option.

Update LICENSE.txt for 2017.

Fixed --no-online tests to suppress expected errors.

Added integration for testing coverage with `Devel::Cover`.

Added unit tests for low-level functions in the `File` and `BackupCommon` modules.

C Library builds only run when C library has actually changed.

Added more flexibility in initializing and cleaning up after modules and tests.

`testResult()` suppresses logging and reports exceptions.

`testException()` allows messages to be matched with regular expressions.

Split test modules into separate files to make the code more maintainable. Tests are dynamically loaded by name rather than requiring an if-else block.

Allow multiple --module, --test, and --run options to be used for test.pl.

Added expect log expression to replace year subdirectories in backup.history.

Refactor name/locations of common modules that setup test environments.