Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package pgbackrest for openSUSE:Factory 
checked in at 2026-09-28 10:47:25
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/pgbackrest (Old)
 and      /work/SRC/openSUSE:Factory/.pgbackrest.new.383539 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "pgbackrest"

Mon Sep 28 10:47:25 2026 rev:26 rq:1380950 version:2.59.2

Changes:
--------
--- /work/SRC/openSUSE:Factory/pgbackrest/pgbackrest.changes    2026-08-25 
13:21:41.469348649 +0200
+++ /work/SRC/openSUSE:Factory/.pgbackrest.new.383539/pgbackrest.changes        
2026-09-28 10:48:08.010177882 +0200
@@ -1,0 +2,23 @@
+Sun Sep 27 11:51:08 UTC 2026 - Marcus Rueckert <[email protected]>
+
+- update to 2.59.2
+  - Bug Fixes:
+    - Fix empty block map when file is truncated to zero during
+      backup. (Reviewed by Douglas J Hunley. Reported by
+      JPCOSTA78.)
+    - Disable read retry when filters are passed to the driver.
+      (Reviewed by Douglas J Hunley. Reported by megamaced.)
+    - Fix pagination of S3 version listing. (Reviewed by Douglas J
+      Hunley, guruguruguru. Reported by guruguruguru.)
+    - Set the Azure version header for SAS authentication.
+      (Reviewed by Douglas J Hunley. Reported by Florian
+      Helmberger.)
+    - Fix async archive-push stalling on a zero-size backup history
+      file. (Fixed by Andrew Kroh. Reviewed by David Steele,
+      Douglas J Hunley.)
+    - Fix annotate command on a remote encrypted repository. (Fixed
+      by Douglas J Hunley. Reviewed by David Steele.)
+  - Features:
+    - PostgreSQL 19beta4 support.
+
+-------------------------------------------------------------------

Old:
----
  pgbackrest-2.59.1.tar.gz

New:
----
  pgbackrest-2.59.2.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ pgbackrest.spec ++++++
--- /var/tmp/diff_new_pack.BlQQHN/_old  2026-09-28 10:48:09.261230299 +0200
+++ /var/tmp/diff_new_pack.BlQQHN/_new  2026-09-28 10:48:09.264230424 +0200
@@ -19,7 +19,7 @@
 
 %define services pgbackrest.target [email protected] 
[email protected] [email protected] pgbackrest.service 
[email protected] [email protected] [email protected]
 Name:           pgbackrest
-Version:        2.59.1
+Version:        2.59.2
 Release:        0
 Summary:        Reliable PostgreSQL Backup & Restore
 License:        MIT

++++++ pgbackrest-2.59.1.tar.gz -> pgbackrest-2.59.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pgbackrest-2.59.1/dist new/pgbackrest-2.59.2/dist
--- old/pgbackrest-2.59.1/dist  2026-08-17 11:10:21.775967600 +0200
+++ new/pgbackrest-2.59.2/dist  2026-09-27 13:17:13.529786000 +0200
@@ -1 +1 @@
-2.59.1
+2.59.2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pgbackrest-2.59.1/doc/html/command.html 
new/pgbackrest-2.59.2/doc/html/command.html
--- old/pgbackrest-2.59.1/doc/html/command.html 2026-08-17 11:10:21.774024000 
+0200
+++ new/pgbackrest-2.59.2/doc/html/command.html 2026-09-27 13:17:13.527605000 
+0200
@@ -15667,5 +15667,5 @@
 <pre class="code-block">default: text
 example: --output=num</pre>
 </div></div></div></div></div></div></div><div class="page-footer">
-Copyright &copy; 2015-2026, The PostgreSQL Global Development Group, <a 
href="https://github.com/pgbackrest/pgbackrest/blob/main/LICENSE";>MIT 
License</a>. Updated August 17, 2026
+Copyright &copy; 2015-2026, The PostgreSQL Global Development Group, <a 
href="https://github.com/pgbackrest/pgbackrest/blob/main/LICENSE";>MIT 
License</a>. Updated September 27, 2026
 </div></body></html>
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pgbackrest-2.59.1/doc/html/configuration.html 
new/pgbackrest-2.59.2/doc/html/configuration.html
--- old/pgbackrest-2.59.1/doc/html/configuration.html   2026-08-17 
11:10:21.774469400 +0200
+++ new/pgbackrest-2.59.2/doc/html/configuration.html   2026-09-27 
13:17:13.527993700 +0200
@@ -2191,5 +2191,5 @@
 </div>
 <pre class="code-block">example: pg1-user=backupuser</pre>
 </div></div></div></div></div><div class="page-footer">
-Copyright &copy; 2015-2026, The PostgreSQL Global Development Group, <a 
href="https://github.com/pgbackrest/pgbackrest/blob/main/LICENSE";>MIT 
License</a>. Updated August 17, 2026
+Copyright &copy; 2015-2026, The PostgreSQL Global Development Group, <a 
href="https://github.com/pgbackrest/pgbackrest/blob/main/LICENSE";>MIT 
License</a>. Updated September 27, 2026
 </div></body></html>
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pgbackrest-2.59.1/doc/html/faq.html 
new/pgbackrest-2.59.2/doc/html/faq.html
--- old/pgbackrest-2.59.1/doc/html/faq.html     2026-08-17 11:10:21.774563800 
+0200
+++ new/pgbackrest-2.59.2/doc/html/faq.html     2026-09-27 13:17:13.528116000 
+0200
@@ -153,5 +153,5 @@
 </div><div class="section-body-text">
 Please note that recovering this backup will not result in a timeline switch, 
which means that this cluster should not push WAL to the original repository 
that it was exported from. If the new cluster is in a network-isolated 
environment this should not be a problem.
 </div></div></div></div><div class="page-footer">
-Copyright &copy; 2015-2026, The PostgreSQL Global Development Group, <a 
href="https://github.com/pgbackrest/pgbackrest/blob/main/LICENSE";>MIT 
License</a>. Updated August 17, 2026
+Copyright &copy; 2015-2026, The PostgreSQL Global Development Group, <a 
href="https://github.com/pgbackrest/pgbackrest/blob/main/LICENSE";>MIT 
License</a>. Updated September 27, 2026
 </div></body></html>
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pgbackrest-2.59.1/doc/html/index.html 
new/pgbackrest-2.59.2/doc/html/index.html
--- old/pgbackrest-2.59.1/doc/html/index.html   2026-08-17 11:10:21.774604000 
+0200
+++ new/pgbackrest-2.59.2/doc/html/index.html   2026-09-27 13:17:13.528155000 
+0200
@@ -27,7 +27,7 @@
 </div></div><div class="section-body"><div class="section-body-text">
 <span class="backrest">pgBackRest</span> is a reliable backup and restore 
solution for <span class="postgres">PostgreSQL</span> that seamlessly scales up 
to the largest databases and workloads.
 </div><div class="section-body-text">
-<span class="backrest">pgBackRest</span> <a 
href="https://github.com/pgbackrest/pgbackrest/releases/tag/release/2.59.1";>v2.59.1</a>
 is the current stable release. Release notes are on the <a 
href="release.html">Releases</a> page.
+<span class="backrest">pgBackRest</span> <a 
href="https://github.com/pgbackrest/pgbackrest/releases/tag/release/2.59.2";>v2.59.2</a>
 is the current stable release. Release notes are on the <a 
href="release.html">Releases</a> page.
 </div><div class="section-body-text">
 Please give us a star on <a 
href="https://github.com/pgbackrest/pgbackrest";>GitHub</a> if you like <span 
class="backrest">pgBackRest</span>!
 </div></div></div><div class="section1"><a id="features"></a><div 
class="section1-header"><div class="section1-title">
@@ -137,5 +137,5 @@
 </div><div class="section-body-text">
 Creating a robust disaster recovery policy with proper replication and backup 
strategies can be a very complex and daunting task. You may find that you need 
help during the architecture phase and ongoing support to ensure that your 
enterprise continues running smoothly.
 </div></div></div></div><div class="page-footer">
-Copyright &copy; 2015-2026, The PostgreSQL Global Development Group, <a 
href="https://github.com/pgbackrest/pgbackrest/blob/main/LICENSE";>MIT 
License</a>. Updated August 17, 2026
+Copyright &copy; 2015-2026, The PostgreSQL Global Development Group, <a 
href="https://github.com/pgbackrest/pgbackrest/blob/main/LICENSE";>MIT 
License</a>. Updated September 27, 2026
 </div></body></html>
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pgbackrest-2.59.1/doc/html/release.html 
new/pgbackrest-2.59.2/doc/html/release.html
--- old/pgbackrest-2.59.1/doc/html/release.html 2026-08-17 11:10:21.774642700 
+0200
+++ new/pgbackrest-2.59.2/doc/html/release.html 2026-09-27 13:17:13.528193000 
+0200
@@ -26,8 +26,8 @@
 Introduction
 </a></div></div><div class="section1-toc"><div class="section1-toc-title"><a 
href="#current">
 Current Stable Release
-</a></div><div class="section2-toc"><div class="section2-toc-title"><a 
href="#2.59.1">
-v2.59.1 Release Notes
+</a></div><div class="section2-toc"><div class="section2-toc-title"><a 
href="#2.59.2">
+v2.59.2 Release Notes
 </a></div></div></div><div class="section1-toc"><div 
class="section1-toc-title"><a href="#supported">
 Stable Releases
 </a></div></div><div class="section1-toc"><div class="section1-toc-title"><a 
href="#unsupported">
@@ -42,6 +42,32 @@
 The notes for a release may also contain <q>Additional Notes</q> but changes 
in this section are only to documentation or the test suite and have no direct 
impact on the <span class="backrest">pgBackRest</span> codebase.
 </div><div class="section-body"></div></div><div class="section1"><a 
id="current"></a><div class="section1-header"><div class="section1-title">
 Current Stable Release
+</div></div><div class="section-body"><div class="section2"><a 
id="2.59.2"></a><div class="section2-header"><div class="section2-title">
+v2.59.2 Release Notes
+</div></div><div class="section-body"><div class="section2-subtitle">
+PostgreSQL 19beta4 Support
+</div><div class="section2-subsubtitle">
+Released September 27, 2026
+</div><div class="section-body-text">
+<b> Bug Fixes:</b>
+</div><ul class="list-unordered"><li class="list-unordered">
+Fix empty block map when file is truncated to zero during backup. (<i>Reviewed 
by Douglas J Hunley. Reported by JPCOSTA78.</i>)
+</li><li class="list-unordered">
+Disable read retry when filters are passed to the driver. (<i>Reviewed by 
Douglas J Hunley. Reported by megamaced.</i>)
+</li><li class="list-unordered">
+Fix pagination of <span class="host">S3</span> version listing. (<i>Reviewed 
by Douglas J Hunley, guruguruguru. Reported by guruguruguru.</i>)
+</li><li class="list-unordered">
+Set the <span class="host">Azure</span> version header for <span 
class="id">SAS</span> authentication. (<i>Reviewed by Douglas J Hunley. 
Reported by Florian Helmberger.</i>)
+</li><li class="list-unordered">
+Fix async <span class="cmd">archive-push</span> stalling on a zero-size backup 
history file. (<i>Fixed by Andrew Kroh. Reviewed by David Steele, Douglas J 
Hunley.</i>)
+</li><li class="list-unordered">
+Fix <span class="cmd">annotate</span> command on a remote encrypted 
repository. (<i>Fixed by Douglas J Hunley. Reviewed by David Steele.</i>)
+</li></ul><div class="section-body-text">
+<b> Features:</b>
+</div><ul class="list-unordered"><li class="list-unordered">
+<span class="host">PostgreSQL 19beta4</span> support.
+</li></ul></div></div></div></div><div class="section1"><a 
id="supported"></a><div class="section1-header"><div class="section1-title">
+Stable Releases
 </div></div><div class="section-body"><div class="section2"><a 
id="2.59.1"></a><div class="section2-header"><div class="section2-title">
 v2.59.1 Release Notes
 </div></div><div class="section-body"><div class="section2-subtitle">
@@ -66,9 +92,7 @@
 Document exception for dots in <span class="host">S3</span> bucket names when 
<span class="br-setting">repo-s3-uri-style=path</span>.
 </li><li class="list-unordered">
 Remove explicit <span class="pg-setting">hot_standby</span> configuration from 
user guide.
-</li></ul></div></div></div></div><div class="section1"><a 
id="supported"></a><div class="section1-header"><div class="section1-title">
-Stable Releases
-</div></div><div class="section-body"><div class="section2"><a 
id="2.59.0"></a><div class="section2-header"><div class="section2-title">
+</li></ul></div></div><div class="section2"><a id="2.59.0"></a><div 
class="section2-header"><div class="section2-title">
 v2.59.0 Release Notes
 </div></div><div class="section-body"><div class="section2-subtitle">
 PostgreSQL 19beta2 Support
@@ -3429,5 +3453,5 @@
 </div><ul class="list-unordered"><li class="list-unordered">
 Absolutely no documentation (outside the code). Well, excepting these release 
notes.
 </li></ul></div></div></div></div></div><div class="page-footer">
-Copyright &copy; 2015-2026, The PostgreSQL Global Development Group, <a 
href="https://github.com/pgbackrest/pgbackrest/blob/main/LICENSE";>MIT 
License</a>. Updated August 17, 2026
+Copyright &copy; 2015-2026, The PostgreSQL Global Development Group, <a 
href="https://github.com/pgbackrest/pgbackrest/blob/main/LICENSE";>MIT 
License</a>. Updated September 27, 2026
 </div></body></html>
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pgbackrest-2.59.1/doc/html/user-guide-index.html 
new/pgbackrest-2.59.2/doc/html/user-guide-index.html
--- old/pgbackrest-2.59.1/doc/html/user-guide-index.html        2026-08-17 
11:10:21.774852800 +0200
+++ new/pgbackrest-2.59.2/doc/html/user-guide-index.html        2026-09-27 
13:17:13.528400000 +0200
@@ -29,5 +29,5 @@
 </li><li class="list-unordered">
 <a href="user-guide-rhel.html">RHEL</a>
 </li></ul></div></div></div><div class="page-footer">
-Copyright &copy; 2015-2026, The PostgreSQL Global Development Group, <a 
href="https://github.com/pgbackrest/pgbackrest/blob/main/LICENSE";>MIT 
License</a>. Updated August 17, 2026
+Copyright &copy; 2015-2026, The PostgreSQL Global Development Group, <a 
href="https://github.com/pgbackrest/pgbackrest/blob/main/LICENSE";>MIT 
License</a>. Updated September 27, 2026
 </div></body></html>
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pgbackrest-2.59.1/doc/html/user-guide-rhel.html 
new/pgbackrest-2.59.2/doc/html/user-guide-rhel.html
--- old/pgbackrest-2.59.1/doc/html/user-guide-rhel.html 2026-08-17 
11:10:21.774757100 +0200
+++ new/pgbackrest-2.59.2/doc/html/user-guide-rhel.html 2026-09-27 
13:17:13.528307700 +0200
@@ -223,11 +223,11 @@
 </div><div class="section-body-text">
 When building from source it is best to use a build host rather than building 
on production. Many of the tools required for the build should generally not be 
installed in production. <span class="backrest">pgBackRest</span> consists of a 
single executable so it is easy to copy to a new host once it is built.
 </div><div class="execute"><div class="execute-title">
-<span class="host">build</span> <b>&#x21d2;</b> Download version <span 
class="id">2.59.1</span> of <span class="backrest">pgBackRest</span> to <span 
class="path">/build</span> path
+<span class="host">build</span> <b>&#x21d2;</b> Download version <span 
class="id">2.59.2</span> of <span class="backrest">pgBackRest</span> to <span 
class="path">/build</span> path
 </div><div class="execute-body">
 <pre class="execute-body-cmd">mkdir -p /build</pre>
 <pre class="execute-body-cmd">curl -fsSL \
-       
https://github.com/pgbackrest/pgbackrest/releases/download/release%2F2.59.1/pgbackrest-2.59.1.tar.gz
 | \
+       
https://github.com/pgbackrest/pgbackrest/releases/download/release%2F2.59.2/pgbackrest-2.59.2.tar.gz
 | \
        tar zx -C /build</pre>
 </div></div><div class="execute"><div class="execute-title">
 <span class="host">build</span> <b>&#x21d2;</b> Install build dependencies
@@ -237,7 +237,7 @@
 </div></div><div class="execute"><div class="execute-title">
 <span class="host">build</span> <b>&#x21d2;</b> Configure and compile <span 
class="backrest">pgBackRest</span>
 </div><div class="execute-body">
-<pre class="execute-body-cmd">meson setup /build/pgbackrest 
/build/pgbackrest-2.59.1</pre>
+<pre class="execute-body-cmd">meson setup /build/pgbackrest 
/build/pgbackrest-2.59.2</pre>
 <pre class="execute-body-cmd">ninja -C /build/pgbackrest</pre>
 </div></div><div class="execute"><div class="execute-title">
 <span class="host">build</span> <b>&#x21d2;</b> Optionally run smoke tests to 
verify <span class="backrest">pgBackRest</span> was built correctly
@@ -1982,5 +1982,5 @@
 </div><div class="config-body"><div class="config-body-output">
 Config suppressed for testing
 </div></div></div></div></div></div><div class="page-footer">
-Copyright &copy; 2015-2026, The PostgreSQL Global Development Group, <a 
href="https://github.com/pgbackrest/pgbackrest/blob/main/LICENSE";>MIT 
License</a>. Updated August 17, 2026
+Copyright &copy; 2015-2026, The PostgreSQL Global Development Group, <a 
href="https://github.com/pgbackrest/pgbackrest/blob/main/LICENSE";>MIT 
License</a>. Updated September 27, 2026
 </div></body></html>
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pgbackrest-2.59.1/doc/html/user-guide.html 
new/pgbackrest-2.59.2/doc/html/user-guide.html
--- old/pgbackrest-2.59.1/doc/html/user-guide.html      2026-08-17 
11:10:21.773832300 +0200
+++ new/pgbackrest-2.59.2/doc/html/user-guide.html      2026-09-27 
13:17:13.527422700 +0200
@@ -229,11 +229,11 @@
 </div><div class="section-body-text">
 When building from source it is best to use a build host rather than building 
on production. Many of the tools required for the build should generally not be 
installed in production. <span class="backrest">pgBackRest</span> consists of a 
single executable so it is easy to copy to a new host once it is built.
 </div><div class="execute"><div class="execute-title">
-<span class="host">build</span> <b>&#x21d2;</b> Download version <span 
class="id">2.59.1</span> of <span class="backrest">pgBackRest</span> to <span 
class="path">/build</span> path
+<span class="host">build</span> <b>&#x21d2;</b> Download version <span 
class="id">2.59.2</span> of <span class="backrest">pgBackRest</span> to <span 
class="path">/build</span> path
 </div><div class="execute-body">
 <pre class="execute-body-cmd">mkdir -p /build</pre>
 <pre class="execute-body-cmd">curl -fsSL \
-       
https://github.com/pgbackrest/pgbackrest/releases/download/release%2F2.59.1/pgbackrest-2.59.1.tar.gz
 | \
+       
https://github.com/pgbackrest/pgbackrest/releases/download/release%2F2.59.2/pgbackrest-2.59.2.tar.gz
 | \
        tar zx -C /build</pre>
 </div></div><div class="execute"><div class="execute-title">
 <span class="host">build</span> <b>&#x21d2;</b> Install build dependencies
@@ -243,7 +243,7 @@
 </div></div><div class="execute"><div class="execute-title">
 <span class="host">build</span> <b>&#x21d2;</b> Configure and compile <span 
class="backrest">pgBackRest</span>
 </div><div class="execute-body">
-<pre class="execute-body-cmd">meson setup /build/pgbackrest 
/build/pgbackrest-2.59.1</pre>
+<pre class="execute-body-cmd">meson setup /build/pgbackrest 
/build/pgbackrest-2.59.2</pre>
 <pre class="execute-body-cmd">ninja -C /build/pgbackrest</pre>
 </div></div><div class="execute"><div class="execute-title">
 <span class="host">build</span> <b>&#x21d2;</b> Optionally run smoke tests to 
verify <span class="backrest">pgBackRest</span> was built correctly
@@ -2092,5 +2092,5 @@
 </div><div class="config-body"><div class="config-body-output">
 Config suppressed for testing
 </div></div></div></div></div></div><div class="page-footer">
-Copyright &copy; 2015-2026, The PostgreSQL Global Development Group, <a 
href="https://github.com/pgbackrest/pgbackrest/blob/main/LICENSE";>MIT 
License</a>. Updated August 17, 2026
+Copyright &copy; 2015-2026, The PostgreSQL Global Development Group, <a 
href="https://github.com/pgbackrest/pgbackrest/blob/main/LICENSE";>MIT 
License</a>. Updated September 27, 2026
 </div></body></html>
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pgbackrest-2.59.1/meson.build 
new/pgbackrest-2.59.2/meson.build
--- old/pgbackrest-2.59.1/meson.build   2026-08-17 11:08:40.000000000 +0200
+++ new/pgbackrest-2.59.2/meson.build   2026-09-27 13:15:45.000000000 +0200
@@ -4,7 +4,7 @@
 project(
     'pgbackrest',
     ['c'],
-    version: '2.59.1',
+    version: '2.59.2',
     license: 'MIT',
     meson_version: '>=0.47',
     default_options: [
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pgbackrest-2.59.1/src/command/annotate/annotate.c 
new/pgbackrest-2.59.2/src/command/annotate/annotate.c
--- old/pgbackrest-2.59.1/src/command/annotate/annotate.c       2026-08-17 
11:08:40.000000000 +0200
+++ new/pgbackrest-2.59.2/src/command/annotate/annotate.c       2026-09-27 
13:15:45.000000000 +0200
@@ -52,6 +52,9 @@
         {
             TRY_BEGIN()
             {
+                // Get the repo storage in case it is remote and encryption 
settings need to be pulled down
+                storageRepoIdx(repoIdx);
+
                 // Attempt to load the backup info file
                 const CipherType repoCipherType = 
cfgOptionIdxStrId(cfgOptRepoCipherType, repoIdx);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pgbackrest-2.59.1/src/command/archive/push/push.c 
new/pgbackrest-2.59.2/src/command/archive/push/push.c
--- old/pgbackrest-2.59.1/src/command/archive/push/push.c       2026-08-17 
11:08:40.000000000 +0200
+++ new/pgbackrest-2.59.2/src/command/archive/push/push.c       2026-09-27 
13:15:45.000000000 +0200
@@ -559,18 +559,38 @@
 
             // If not dropping then limit the number of WAL files pushed in a 
single run to archive-push-batch-size. The queue is
             // only rechecked at the start of each run so this bounds how 
large it can grow before the next run rechecks it. Convert
-            // the size to a segment count using the size of the first ready 
segment and always push at least one segment. A ready
-            // WAL segment should never be missing or zero size, so error 
immediately if it is.
+            // the size to a segment count using the size of the first ready 
segment and always push at least one file. Files that
+            // are not segments also count against the batch, so a run may 
push only those files when the batch size is small, but
+            // they are acknowledged and drop out of the list for the next run.
             if (!drop)
             {
-                const uint64_t segmentSize = storageInfoP(
-                    storagePg(), strNewFmt("%s/%s", strZ(jobData.walPath), 
strZ(strLstGet(jobData.walFileList, 0)))).size;
-                CHECK_FMT(FormatError, segmentSize != 0, "size of WAL segment 
'%s' is 0", strZ(strLstGet(jobData.walFileList, 0)));
+                // Find the first ready WAL segment. The ready list also 
contains backup and timeline history files, which are
+                // smaller than a segment and may even be zero size when 
PostgreSQL did not sync them before the cluster was
+                // copied, so they cannot be used to determine the segment 
size.
+                const String *walSegment = NULL;
 
-                const uint64_t batchMax = 
cfgOptionUInt64(cfgOptArchivePushBatchSize) / segmentSize;
+                for (unsigned int walFileIdx = 0; walFileIdx < 
strLstSize(jobData.walFileList); walFileIdx++)
+                {
+                    if (walIsSegment(strLstGet(jobData.walFileList, 
walFileIdx)))
+                    {
+                        walSegment = strLstGet(jobData.walFileList, 
walFileIdx);
+                        break;
+                    }
+                }
 
-                while (strLstSize(jobData.walFileList) > 1 && 
strLstSize(jobData.walFileList) > batchMax)
-                    strLstRemoveIdx(jobData.walFileList, 
strLstSize(jobData.walFileList) - 1);
+                // Apply the batch size when a segment is ready. When none is 
ready every file is small so there is nothing to
+                // limit. A ready WAL segment should never be missing or zero 
size, so error immediately if it is.
+                if (walSegment != NULL)
+                {
+                    const uint64_t segmentSize = storageInfoP(
+                        storagePg(), strNewFmt("%s/%s", strZ(jobData.walPath), 
strZ(walSegment))).size;
+                    CHECK_FMT(FormatError, segmentSize != 0, "size of WAL 
segment '%s' is 0", strZ(walSegment));
+
+                    const uint64_t batchMax = 
cfgOptionUInt64(cfgOptArchivePushBatchSize) / segmentSize;
+
+                    while (strLstSize(jobData.walFileList) > 1 && 
strLstSize(jobData.walFileList) > batchMax)
+                        strLstRemoveIdx(jobData.walFileList, 
strLstSize(jobData.walFileList) - 1);
+                }
             }
 
             LOG_INFO_FMT(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pgbackrest-2.59.1/src/command/backup/blockIncr.c 
new/pgbackrest-2.59.2/src/command/backup/blockIncr.c
--- old/pgbackrest-2.59.1/src/command/backup/blockIncr.c        2026-08-17 
11:08:40.000000000 +0200
+++ new/pgbackrest-2.59.2/src/command/backup/blockIncr.c        2026-09-27 
13:15:45.000000000 +0200
@@ -232,10 +232,13 @@
             this->blockMapWrite = true;
         }
 
-        // Write the block map if done processing and there are new/changed 
blocks or block list has been truncated
+        // Write the block map if done processing and there are new/changed 
blocks or block list has been truncated. A block map
+        // with no blocks is never written because it cannot be read back. 
That happens when the file is truncated to zero during
+        // the backup, in which case the file is stored as truncated and the 
map is not needed.
         if (this->done && this->blockOutOffset == 0 &&
             (this->blockMapWrite ||
-             (this->blockMapPrior != NULL && blockMapSize(this->blockMapOut) < 
blockMapSize(this->blockMapPrior))))
+             (this->blockMapPrior != NULL && blockMapSize(this->blockMapOut) > 
0 &&
+              blockMapSize(this->blockMapOut) < 
blockMapSize(this->blockMapPrior))))
         {
             MEM_CONTEXT_TEMP_BEGIN()
             {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pgbackrest-2.59.1/src/command/backup/file.c 
new/pgbackrest-2.59.2/src/command/backup/file.c
--- old/pgbackrest-2.59.1/src/command/backup/file.c     2026-08-17 
11:08:40.000000000 +0200
+++ new/pgbackrest-2.59.2/src/command/backup/file.c     2026-09-27 
13:15:45.000000000 +0200
@@ -314,9 +314,10 @@
                             fileResult->copySize = pckReadU64P(
                                 
ioFilterGroupResultP(ioReadFilterGroup(readIo), SIZE_FILTER_TYPE, .idx = 0));
 
-                            // If file is zero-length then it was truncated 
during the backup. When bundling we can simply mark it
-                            // as truncated since no file needs to be stored.
-                            if (bundleId != 0 && fileResult->copySize == 0)
+                            // If file is zero-length then it was truncated 
during the backup. When bundling we can simply mark
+                            // it as truncated since no file needs to be 
stored. The same is true for block incremental, which
+                            // additionally must not be stored because a block 
map with no blocks cannot be read back.
+                            if ((bundleId != 0 || file->blockIncrSize != 0) && 
fileResult->copySize == 0)
                             {
                                 fileResult->backupCopyResult = 
backupCopyResultTruncate;
                                 fileResult->copyChecksum = 
HASH_TYPE_SHA1_ZERO_BUF;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pgbackrest-2.59.1/src/command/manifest/manifest.c 
new/pgbackrest-2.59.2/src/command/manifest/manifest.c
--- old/pgbackrest-2.59.1/src/command/manifest/manifest.c       2026-08-17 
11:08:40.000000000 +0200
+++ new/pgbackrest-2.59.2/src/command/manifest/manifest.c       2026-09-27 
13:15:45.000000000 +0200
@@ -437,6 +437,9 @@
 
     MEM_CONTEXT_TEMP_BEGIN()
     {
+        // Get the repo storage in case it is remote and encryption settings 
need to be pulled down
+        storageRepo();
+
         // Load backup.info and cipher
         const InfoBackup *const infoBackup = infoBackupLoadFile(
             storageRepo(), INFO_BACKUP_PATH_FILE_STR, 
cfgOptionStrId(cfgOptRepoCipherType),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pgbackrest-2.59.1/src/postgres/interface/static.vendor.h 
new/pgbackrest-2.59.2/src/postgres/interface/static.vendor.h
--- old/pgbackrest-2.59.1/src/postgres/interface/static.vendor.h        
2026-08-17 11:08:40.000000000 +0200
+++ new/pgbackrest-2.59.2/src/postgres/interface/static.vendor.h        
2026-09-27 13:15:45.000000000 +0200
@@ -62,19 +62,14 @@
 // ChecksumStateType enum
 // 
---------------------------------------------------------------------------------------------------------------------------------
 /*
- * Checksum state 0 is used for when data checksums are disabled (OFF).
- * PG_DATA_CHECKSUM_INPROGRESS_{ON|OFF} defines that data checksums are either
- * currently being enabled or disabled, and PG_DATA_CHECKSUM_VERSION defines
- * that data checksums are enabled.  The ChecksumStateType is stored in
- * pg_control so changing requires a catversion bump, and the values cannot
- * be reordered.  New states must be added at the end.
+ * Checksum state 0 is used for when data checksums are disabled (OFF), and
+ * PG_DATA_CHECKSUM_VERSION defines that data checksums are enabled. New
+ * states must be added at the end.
  */
 typedef enum ChecksumStateType
 {
        PG_DATA_CHECKSUM_OFF = 0,
        PG_DATA_CHECKSUM_VERSION = 1,
-       PG_DATA_CHECKSUM_INPROGRESS_OFF = 2,
-       PG_DATA_CHECKSUM_INPROGRESS_ON = 3,
 } ChecksumStateType;
 
 
/***********************************************************************************************************************************
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pgbackrest-2.59.1/src/postgres/interface/version.vendor.h 
new/pgbackrest-2.59.2/src/postgres/interface/version.vendor.h
--- old/pgbackrest-2.59.1/src/postgres/interface/version.vendor.h       
2026-08-17 11:08:40.000000000 +0200
+++ new/pgbackrest-2.59.2/src/postgres/interface/version.vendor.h       
2026-09-27 13:15:45.000000000 +0200
@@ -296,7 +296,7 @@
 #elif PG_VERSION >= PG_VERSION_19
 
 /* Version identifier for this pg_control format */
-#define PG_CONTROL_VERSION     1902
+#define PG_CONTROL_VERSION     1905
 
 #elif PG_VERSION >= PG_VERSION_18
 
@@ -388,9 +388,6 @@
         * set to InvalidTransactionId.
         */
        TransactionId oldestActiveXid;
-
-       /* data checksums state at the time of the checkpoint  */
-       uint32          dataChecksumState;
 } CheckPoint;
 
 #elif PG_VERSION >= PG_VERSION_17
@@ -694,7 +691,13 @@
 
        bool            float8ByVal;    /* float8, int8, etc pass-by-value? */
 
-       /* Are data pages protected by checksums? Zero if no checksum version */
+       /*
+        * Data checksum state at cluster initialization. Since the state can be
+        * changed during runtime, we need to store the initial value for system
+        * functions which report initdb settings.
+        */
+       uint32          data_checksum_version_init;
+       /* Current data checksums state */
        uint32          data_checksum_version;
 
        /*
@@ -1701,7 +1704,7 @@
 
 #elif PG_VERSION >= PG_VERSION_19
 
-#define XLOG_PAGE_MAGIC 0xD121 /* can be used as WAL version indicator */
+#define XLOG_PAGE_MAGIC 0xD122 /* can be used as WAL version indicator */
 
 #elif PG_VERSION >= PG_VERSION_18
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pgbackrest-2.59.1/src/postgres/interface.c 
new/pgbackrest-2.59.2/src/postgres/interface.c
--- old/pgbackrest-2.59.1/src/postgres/interface.c      2026-08-17 
11:08:40.000000000 +0200
+++ new/pgbackrest-2.59.2/src/postgres/interface.c      2026-09-27 
13:15:45.000000000 +0200
@@ -322,18 +322,12 @@
     pgPageSizeCheck(result.pageSize);
 
     // Check the checksum version
-    if ((result.version <= PG_VERSION_18 && result.pageChecksumVersion > 
PG_DATA_CHECKSUM_VERSION) ||
-        (result.version > PG_VERSION_18 && result.pageChecksumVersion > 
PG_DATA_CHECKSUM_INPROGRESS_ON))
+    if (result.pageChecksumVersion > PG_DATA_CHECKSUM_VERSION)
     {
         THROW_FMT(
-            FormatError, "page checksum version is %u but must be <= %d", 
result.pageChecksumVersion,
-            result.version <= PG_VERSION_18 ? PG_DATA_CHECKSUM_VERSION : 
PG_DATA_CHECKSUM_INPROGRESS_ON);
+            FormatError, "page checksum version is %u but must be <= %d", 
result.pageChecksumVersion, PG_DATA_CHECKSUM_VERSION);
     }
 
-    // Clear checksum version values that represent clusters with incomplete 
checksums
-    if (result.version > PG_VERSION_18 && result.pageChecksumVersion > 
PG_DATA_CHECKSUM_VERSION)
-        result.pageChecksumVersion = 0;
-
     FUNCTION_LOG_RETURN(PG_CONTROL, result);
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pgbackrest-2.59.1/src/storage/azure/storage.c 
new/pgbackrest-2.59.2/src/storage/azure/storage.c
--- old/pgbackrest-2.59.1/src/storage/azure/storage.c   2026-08-17 
11:08:40.000000000 +0200
+++ new/pgbackrest-2.59.2/src/storage/azure/storage.c   2026-09-27 
13:15:45.000000000 +0200
@@ -153,9 +153,10 @@
         if (this->keyType == storageAzureKeyTypeShared)
             httpHeaderPut(httpHeader, HTTP_HEADER_DATE_STR, dateTime);
 
-        // Set version header (required for shared key and auto auth types, 
not for SAS) but never on batch sub-requests,
-        // which inherit the version from the top-level batch request
-        if (this->keyType != storageAzureKeyTypeSas && !subRequest)
+        // Set version header but never on batch sub-requests, which inherit 
the version from the top-level batch request. SAS
+        // specifies a version in the sv parameter, but that is not sufficient 
for batch, which rejects the request when the version
+        // is not set explicitly.
+        if (!subRequest)
             httpHeaderPut(httpHeader, AZURE_HEADER_VERSION_STR, 
AZURE_HEADER_VERSION_VALUE_STR);
 
         // Shared key authentication
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pgbackrest-2.59.1/src/storage/read.c 
new/pgbackrest-2.59.2/src/storage/read.c
--- old/pgbackrest-2.59.1/src/storage/read.c    2026-08-17 11:08:40.000000000 
+0200
+++ new/pgbackrest-2.59.2/src/storage/read.c    2026-09-27 13:15:45.000000000 
+0200
@@ -119,6 +119,10 @@
                             .limit = this->pub.limit != NULL ? 
varNewUInt64(varUInt64(this->pub.limit) - this->bytesRead) : NULL,
                             .versionId = this->pub.versionId);
 
+                        // The filter group is never set on the recreated 
driver, so retry must already be disabled for any driver
+                        // that requires one (see storageReadNew())
+                        
ASSERT(storageReadDriverInterface(this->driver)->filterGroup == NULL);
+
                         // Error when the file is missing since it must have 
existed when the read began
                         if 
(!storageReadDriverInterface(this->driver)->open(this->driver))
                             THROW_FMT(FileMissingError, 
STORAGE_ERROR_READ_MISSING, strZ(storageReadName(this)));
@@ -259,7 +263,15 @@
 
         // Set filter group when interface function exists
         if (storageReadDriverInterface(this->driver)->filterGroup != NULL)
+        {
             
storageReadDriverInterface(this->driver)->filterGroup(this->driver, 
ioReadFilterGroup(storageReadIo(this)));
+
+            // Disable retry when the driver requires the filter group. The 
filters are passed to the driver when the read is
+            // opened, e.g. to be run on a remote host, so they cannot be run 
again for a retry. Also, bytes read are counted after
+            // the filters have been applied so the offset to restart the read 
cannot be determined. Retry in this case is expected
+            // to be handled by the driver, e.g. the remote host retries reads 
on object stores.
+            this->retry = false;
+        }
     }
     OBJ_NEW_END();
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pgbackrest-2.59.1/src/storage/s3/storage.c 
new/pgbackrest-2.59.2/src/storage/s3/storage.c
--- old/pgbackrest-2.59.1/src/storage/s3/storage.c      2026-08-17 
11:08:40.000000000 +0200
+++ new/pgbackrest-2.59.2/src/storage/s3/storage.c      2026-09-27 
13:15:45.000000000 +0200
@@ -49,8 +49,10 @@
 STRING_STATIC(S3_QUERY_CONTINUATION_TOKEN_STR,                      
"continuation-token");
 STRING_STATIC(S3_QUERY_DELETE_STR,                                  "delete");
 STRING_STATIC(S3_QUERY_DELIMITER_STR,                               
"delimiter");
+STRING_STATIC(S3_QUERY_KEY_MARKER_STR,                              
"key-marker");
 STRING_STATIC(S3_QUERY_LIST_TYPE_STR,                               
"list-type");
 STRING_STATIC(S3_QUERY_PREFIX_STR,                                  "prefix");
+STRING_STATIC(S3_QUERY_VERSION_ID_MARKER_STR,                       
"version-id-marker");
 STRING_STATIC(S3_QUERY_VERSIONS_STR,                                
"versions");
 
 STRING_STATIC(S3_QUERY_VALUE_LIST_TYPE_2_STR,                       "2");
@@ -68,6 +70,9 @@
 STRING_STATIC(S3_XML_TAG_LAST_MODIFIED_STR,                         
"LastModified");
 #define S3_XML_TAG_NEXT_CONTINUATION_TOKEN                          
"NextContinuationToken"
 STRING_STATIC(S3_XML_TAG_NEXT_CONTINUATION_TOKEN_STR,               
S3_XML_TAG_NEXT_CONTINUATION_TOKEN);
+#define S3_XML_TAG_NEXT_KEY_MARKER                                  
"NextKeyMarker"
+STRING_STATIC(S3_XML_TAG_NEXT_KEY_MARKER_STR,                       
S3_XML_TAG_NEXT_KEY_MARKER);
+STRING_STATIC(S3_XML_TAG_NEXT_VERSION_ID_MARKER_STR,                
"NextVersionIdMarker");
 STRING_STATIC(S3_XML_TAG_OBJECT_STR,                                "Object");
 STRING_STATIC(S3_XML_TAG_PREFIX_STR,                                "Prefix");
 STRING_STATIC(S3_XML_TAG_QUIET_STR,                                 "Quiet");
@@ -839,16 +844,42 @@
                 // If list is truncated then send an async request to get more 
data
                 if (strEq(xmlNodeContent(xmlNodeChild(xmlRoot, 
S3_XML_TAG_IS_TRUNCATED_STR, true)), TRUE_STR))
                 {
-                    const String *const nextContinuationToken = xmlNodeContent(
-                        xmlNodeChild(xmlRoot, 
S3_XML_TAG_NEXT_CONTINUATION_TOKEN_STR, true));
-                    CHECK(FormatError, !strEmpty(nextContinuationToken), 
S3_XML_TAG_NEXT_CONTINUATION_TOKEN " may not be empty");
+                    // Build the query for the next page from the base query 
since the markers are set per page
+                    HttpQuery *const queryNext = httpQueryDupP(query);
 
-                    httpQueryPut(query, S3_QUERY_CONTINUATION_TOKEN_STR, 
nextContinuationToken);
+                    // Version listing is paginated with key and version id 
markers
+                    if (targetTime != 0)
+                    {
+                        const String *const nextKeyMarker = xmlNodeContent(
+                            xmlNodeChild(xmlRoot, 
S3_XML_TAG_NEXT_KEY_MARKER_STR, true));
+                        CHECK(FormatError, !strEmpty(nextKeyMarker), 
S3_XML_TAG_NEXT_KEY_MARKER " may not be empty");
+
+                        httpQueryAdd(queryNext, S3_QUERY_KEY_MARKER_STR, 
nextKeyMarker);
+
+                        // The version id marker may be missing or empty when 
the next result is a common prefix. In that case the
+                        // next page starts at the key after the key marker, 
which is what is needed.
+                        const String *const nextVersionIdMarker = 
xmlNodeContent(
+                            xmlNodeChild(xmlRoot, 
S3_XML_TAG_NEXT_VERSION_ID_MARKER_STR, false));
+
+                        if (nextVersionIdMarker != NULL && 
!strEmpty(nextVersionIdMarker))
+                            httpQueryAdd(queryNext, 
S3_QUERY_VERSION_ID_MARKER_STR, nextVersionIdMarker);
+                    }
+                    // Else object listing is paginated with a continuation 
token
+                    else
+                    {
+                        const String *const nextContinuationToken = 
xmlNodeContent(
+                            xmlNodeChild(xmlRoot, 
S3_XML_TAG_NEXT_CONTINUATION_TOKEN_STR, true));
+                        CHECK(
+                            FormatError, !strEmpty(nextContinuationToken),
+                            S3_XML_TAG_NEXT_CONTINUATION_TOKEN " may not be 
empty");
+
+                        httpQueryAdd(queryNext, 
S3_QUERY_CONTINUATION_TOKEN_STR, nextContinuationToken);
+                    }
 
                     // Store request in the outer temp context
                     MEM_CONTEXT_PRIOR_BEGIN()
                     {
-                        request = storageS3RequestAsyncP(this, 
HTTP_VERB_GET_STR, FSLASH_STR, .query = query);
+                        request = storageS3RequestAsyncP(this, 
HTTP_VERB_GET_STR, FSLASH_STR, .query = queryNext);
                     }
                     MEM_CONTEXT_PRIOR_END();
                 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pgbackrest-2.59.1/src/version.h 
new/pgbackrest-2.59.2/src/version.h
--- old/pgbackrest-2.59.1/src/version.h 2026-08-17 11:08:40.000000000 +0200
+++ new/pgbackrest-2.59.2/src/version.h 2026-09-27 13:15:45.000000000 +0200
@@ -35,10 +35,10 @@
 
***********************************************************************************************************************************/
 #define PROJECT_VERSION_MAJOR                                       2
 #define PROJECT_VERSION_MINOR                                       59
-#define PROJECT_VERSION_PATCH                                       1
+#define PROJECT_VERSION_PATCH                                       2
 #define PROJECT_VERSION_SUFFIX                                      ""
 
-#define PROJECT_VERSION                                             "2.59.1"
-#define PROJECT_VERSION_NUM                                         2059001
+#define PROJECT_VERSION                                             "2.59.2"
+#define PROJECT_VERSION_NUM                                         2059002
 
 #endif

Reply via email to