On 2020/09/26 2:58, Grigory Smolkin wrote:
Fujii Masao, David Zhang, Anastasia Lubennikova, many thanks to you for efforts 
with this patch!
Can I mark it as ready for committer?

Ok, but I attached the updated version of the patch. It's helpful if you review 
that.

In the latest patch, I changed walreceiver so that it creates .done file for the streamed 
timeline history file when archive_mode is NOT "always".

Walreceiver does the same thing for the streamed WAL files to prevent them from 
being archived later. Without this, the streamed WAL files can exist in pg_wal 
without any archive status files, and then they will be archived later 
accidentally because of lack of archive status.

OTOH, timeline history files will not be archived later even without archive 
status files. So there is no strong reason to make walreceiver create .doen 
file for the timeline history files. But at least for me it's strange to keep 
the file in pg_wal without archive status. So for now I'm just inclined to 
create .done files.... Thought?

Regards,

--
Fujii Masao
Advanced Computing Technology Center
Research and Development Headquarters
NTT DATA CORPORATION
diff --git a/doc/src/sgml/high-availability.sgml 
b/doc/src/sgml/high-availability.sgml
index beb309e668..42f01c515f 100644
--- a/doc/src/sgml/high-availability.sgml
+++ b/doc/src/sgml/high-availability.sgml
@@ -1395,7 +1395,8 @@ synchronous_standby_names = 'ANY 2 (s1, s2, s3)'
      If <varname>archive_mode</varname> is set to <literal>on</literal>, the
      archiver is not enabled during recovery or standby mode. If the standby
      server is promoted, it will start archiving after the promotion, but
-     will not archive any WAL it did not generate itself. To get a complete
+     will not archive any WAL or timeline history files that
+     it did not generate itself. To get a complete
      series of WAL files in the archive, you must ensure that all WAL is
      archived, before it reaches the standby. This is inherently true with
      file-based log shipping, as the standby can only restore files that
diff --git a/src/backend/replication/walreceiver.c 
b/src/backend/replication/walreceiver.c
index 17f1a49f87..bb1d44ccb7 100644
--- a/src/backend/replication/walreceiver.c
+++ b/src/backend/replication/walreceiver.c
@@ -758,6 +758,15 @@ WalRcvFetchTimeLineHistoryFiles(TimeLineID first, 
TimeLineID last)
                         */
                        writeTimeLineHistoryFile(tli, content, len);
 
+                       /*
+                        * Mark the streamed history file as ready for archiving
+                        * if archive_mode is always.
+                        */
+                       if (XLogArchiveMode != ARCHIVE_MODE_ALWAYS)
+                               XLogArchiveForceDone(fname);
+                       else
+                               XLogArchiveNotify(fname);
+
                        pfree(fname);
                        pfree(content);
                }

Reply via email to