<release date="2017-02-05" version="1.13" title="Parallel Archiving, Stanza Create, Improved Info and Check">
    <release-core-list>
        <text>
            <p><b>IMPORTANT NOTE</b>: 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 <id>1.13</id>, it will be abandoned and <b>not</b> pushed to the repository.</p>

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

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

        <release-bug-list>
            <release-item>
                <release-item-contributor-list>
                    <release-item-contributor id="adrian.vondendriesch"/>
                </release-item-contributor-list>

                <p>Fixed const assignment giving compiler warning in C library.</p>
            </release-item>

            <release-item>
                <p>Fixed a few directory syncs that were missed for the <br-option>--repo-sync</br-option> option.</p>
            </release-item>

            <release-item>
                <release-item-contributor-list>
                    <release-item-ideator id="leonardo.gg.avellar"/>
                </release-item-contributor-list>

                <p>Fixed an issue where a missing user/group on restore could cause an <quote>uninitialized value</quote> error in <code>File->owner()</code>.</p>
            </release-item>

            <release-item>
                <p>Fixed an issue where protocol mismatch errors did not output the expected value.</p>
            </release-item>

            <release-item>
                <p>Fixed a spurious <cmd>archive-get</cmd> log message that indicated an exit code of 1 was an abnormal termination.</p>
            </release-item>
        </release-bug-list>

        <release-feature-list>
            <release-item>
                <p>Improved, multi-process implementation of asynchronous archiving.</p>
            </release-item>

            <release-item>
                <release-item-contributor-list>
                    <release-item-contributor id="cynthia.shang"/>
                </release-item-contributor-list>

                <p>Improved <cmd>stanza-create</cmd> command so that it can repair broken repositories in most cases and is robust enough to be made mandatory.</p>
            </release-item>

            <release-item>
                <release-item-contributor-list>
                    <release-item-contributor id="cynthia.shang"/>
                </release-item-contributor-list>

                <p>Improved <cmd>check</cmd> command to run on a standby, though only basic checks are done because <code>pg_switch_xlog()</code> cannot be executed on a replica.</p>
            </release-item>

            <release-item>
                <p>Added archive and backup WAL ranges to the <cmd>info</cmd> command.</p>
            </release-item>

            <release-item>
                <release-item-contributor-list>
                    <release-item-contributor id="benoit.lobréau"/>
                </release-item-contributor-list>

                <p>Added warning to update <code>pg_tablespace.spclocation</code> when remapping tablespaces in <postgres/> &lt; 9.2.</p>
            </release-item>

            <release-item>
                <release-item-contributor-list>
                    <release-item-ideator id="michael.vitale"/>
                </release-item-contributor-list>

                <p>Remove remote lock requirements for the <cmd>archive-get</cmd>, <cmd>restore</cmd>, <cmd>info</cmd>, and <cmd>check</cmd> commands since they are read-only operations.</p>
            </release-item>
        </release-feature-list>

        <release-improvement-list>
            <release-item>
                <release-item-contributor-list>
                    <release-item-ideator id="jens.wilke"/>
                </release-item-contributor-list>

                <p>Log file banner is not output until the first log entry is written.</p>
            </release-item>

            <release-item>
                <p>Reduced the likelihood of torn pages causing a false positive in page checksums by filtering on start backup LSN.</p>
            </release-item>

            <release-item>
                <release-item-contributor-list>
                    <release-item-contributor id="adrian.vondendriesch"/>
                </release-item-contributor-list>

                <p>Remove Intel-specific optimization from C library build flags.</p>
            </release-item>

            <release-item>
                <p>Remove <br-option>--lock</br-option> option. This option was introduced before the lock directory could be located outside the repository and is now obsolete.</p>
            </release-item>

            <release-item>
                <p>Added <br-option>--log-timestamp</br-option> option to allow timestamps to be suppressed in logging. This is primarily used to avoid filters in the automated documentation.</p>
            </release-item>

            <release-item>
                <release-item-contributor-list>
                    <release-item-ideator id="yogesh.sharma"/>
                </release-item-contributor-list>

                <p>Return proper error code when unable to convert a relative path to an absolute path.</p>
            </release-item>
        </release-improvement-list>

        <release-development-list>
            <release-item>
                <p>Refactor <code>File</code> and <code>BackupCommon</code> modules to improve test coverage.</p>
            </release-item>

            <release-item>
                <p>Moved <code>File->manifest()</code> into the <code>FileCommon.pm</code> module.</p>
            </release-item>

            <release-item>
                <p>Moved the <code>Archive</code> modules to the <path>Archive</path> directory and split the <cmd>archive-get</cmd> and <cmd>archive-push</cmd> commands into separate modules.</p>
            </release-item>

            <release-item>
                <p>Split the <cmd>check</cmd> command out of the <code>Archive.pm</code> module.</p>
            </release-item>

            <release-item>
                <p>Allow logging to be suppressed via <code>logDisable()</code> and <code>logEnable()</code>.</p>
            </release-item>

            <release-item>
                <p>Allow for locks to be taken more than once in the same process without error.</p>
            </release-item>

            <release-item>
                <p>Lock directories can be created when more than one directory level is required.</p>
            </release-item>

            <release-item>
                <p>Clean up <code>optionValid()</code>/<code>optionTest()</code> logic in <code>Lock.pm</code>.</p>
            </release-item>

            <release-item>
                <p>Added <code>Exception::exceptionCode()</code> and <code>Exception::exceptionMessage()</code> to simplify error handling logic.</p>
            </release-item>

            <release-item>
                <p>Represent <file>.gz</file> extension with a constant.</p>
            </release-item>

            <release-item>
                <p>Allow empty files to be created with <code>FileCommon::fileStringWrite()</code> and use temp files to avoid partial reads.</p>
            </release-item>

            <release-item>
                <p>Refactor process IO and process master/minion code out from the common protocol code.</p>
            </release-item>

            <release-item>
                <p>Fixed alignment issues with multiline logging.</p>
            </release-item>
        </release-development-list>
    </release-core-list>

    <release-doc-list>
        <release-feature-list>
            <release-item>
                <release-item-contributor-list>
                    <release-item-contributor id="cynthia.shang"/>
                </release-item-contributor-list>

                <p>Added documentation to the User Guide for the <br-option>process-max</br-option> option.</p>
            </release-item>
        </release-feature-list>

        <release-development-list>
            <release-item>
                <p>Update LICENSE.txt for 2017.</p>
            </release-item>
        </release-development-list>
    </release-doc-list>

    <release-test-list>
        <release-development-list>
            <release-item>
                <p>Fixed <br-option>--no-online</br-option> tests to suppress expected errors.</p>
            </release-item>

            <release-item>
                <p>Added integration for testing coverage with <code>Devel::Cover</code>.</p>
            </release-item>

            <release-item>
                <p>Added unit tests for low-level functions in the <code>File</code> and <code>BackupCommon</code> modules.</p>
            </release-item>

            <release-item>
                <p>C Library builds only run when C library has actually changed.</p>
            </release-item>

            <release-item>
                <p>Added more flexibility in initializing and cleaning up after modules and tests.</p>
            </release-item>

            <release-item>
                <p><code>testResult()</code> suppresses logging and reports exceptions.</p>
            </release-item>

            <release-item>
                <p><code>testException()</code> allows messages to be matched with regular expressions.</p>
            </release-item>

            <release-item>
                <p>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.</p>
            </release-item>

            <release-item>
                <p>Allow multiple <setting>--module</setting>, <setting>--test</setting>, and <setting>--run</setting> options to be used for <file>test.pl</file>.</p>
            </release-item>

            <release-item>
                <p>Added expect log expression to replace year subdirectories in <path>backup.history</path>.</p>
            </release-item>

            <release-item>
                <p>Refactor name/locations of common modules that setup test environments.</p>
            </release-item>
        </release-development-list>
    </release-test-list>
</release>
