Mon, 3 Nov 2014 19:18:51 -0200 от Fabrízio de Royes Mello <fabriziome...@gmail.com>: > > > > > Should I change my patch and send it by email? And also as I understand I > > should change message ID for > > https://commitfest.postgresql.org/action/patch_view?id=1636 , isn't it? > > > > You should just send another version of your patch by email and add a new > "comment" to commit-fest using the "Patch" comment type. Added new patch. -- Alexey Vasiliev
From a5d941717df71e4c16941b8a02f0dca40a1107a0 Mon Sep 17 00:00:00 2001 From: Alexey Vasiliev <leopard.not.a@gmail.com> Date: Mon, 3 Nov 2014 00:21:14 +0200 Subject: [PATCH] add recovery_timeout to controll timeout between restore_command nonzero --- doc/src/sgml/recovery-config.sgml | 24 ++++++++++++++++++++++++ src/backend/access/transam/recovery.conf.sample | 5 +++++ src/backend/access/transam/xlog.c | 20 ++++++++++++++++++-- 3 files changed, 47 insertions(+), 2 deletions(-) diff --git a/doc/src/sgml/recovery-config.sgml b/doc/src/sgml/recovery-config.sgml index 0f1ff34..98eb451 100644 --- a/doc/src/sgml/recovery-config.sgml +++ b/doc/src/sgml/recovery-config.sgml @@ -145,6 +145,30 @@ restore_command = 'copy "C:\\server\\archivedir\\%f" "%p"' # Windows </listitem> </varlistentry> + <varlistentry id="restore-command-retry-interval" xreflabel="restore_command_retry_interval"> + <term><varname>restore_command_retry_interval</varname> (<type>integer</type>) + <indexterm> + <primary><varname>restore_command_retry_interval</> recovery parameter</primary> + </indexterm> + </term> + <listitem> + <para> + By default, if <varname>restore_command</> return nonzero status, + server will retry command again after 5 seconds. This parameter + allow to change this time. This parameter is optional. This can + be useful to increase/decrease number of a restore_command calls. + </para> + <para> + This is useful, if I using for restore of wal logs some + external storage (like AWS S3) and no matter what the slave database + will lag behind the master. The problem, what for each request to + AWS S3 need to pay, what is why for N nodes, which try to get next + wal log each 5 seconds will be bigger price, than for example each + 30 seconds. + </para> + </listitem> + </varlistentry> + </variablelist> </sect1> diff --git a/src/backend/access/transam/recovery.conf.sample b/src/backend/access/transam/recovery.conf.sample index 7657df3..4eee8f4 100644 --- a/src/backend/access/transam/recovery.conf.sample +++ b/src/backend/access/transam/recovery.conf.sample @@ -58,6 +58,11 @@ # #recovery_end_command = '' # +# specifies an optional timeout after nonzero code of restore_command. +# This can be useful to increase/decrease number of a restore_command calls. +# +#restore_command_retry_interval = 5s +# #--------------------------------------------------------------------------- # RECOVERY TARGET PARAMETERS #--------------------------------------------------------------------------- diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 3c9aeae..c26101e 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -233,6 +233,7 @@ static TimestampTz recoveryTargetTime; static char *recoveryTargetName; static int recovery_min_apply_delay = 0; static TimestampTz recoveryDelayUntilTime; +static int restore_command_retry_interval = 0; /* options taken from recovery.conf for XLOG streaming */ static bool StandbyModeRequested = false; @@ -5245,6 +5246,20 @@ readRecoveryCommandFile(void) (errmsg_internal("trigger_file = '%s'", TriggerFile))); } + else if (strcmp(item->name, "restore_command_retry_interval") == 0) + { + const char *hintmsg; + + if (!parse_int(item->value, &restore_command_retry_interval, GUC_UNIT_MS, + &hintmsg)) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("parameter \"%s\" requires a temporal value", + "restore_command_retry_interval"), + hintmsg ? errhint("%s", _(hintmsg)) : 0)); + ereport(DEBUG2, + (errmsg_internal("restore_command_retry_interval = '%s'", item->value))); + } else if (strcmp(item->name, "recovery_min_apply_delay") == 0) { const char *hintmsg; @@ -11104,13 +11119,14 @@ WaitForWALToBecomeAvailable(XLogRecPtr RecPtr, bool randAccess, } /* - * Wait for more WAL to arrive. Time out after 5 seconds, + * Wait for more WAL to arrive. Time out after + * restore_command_retry_interval (5 seconds by default), * like when polling the archive, to react to a trigger * file promptly. */ WaitLatch(&XLogCtl->recoveryWakeupLatch, WL_LATCH_SET | WL_TIMEOUT, - 5000L); + restore_command_retry_interval > 0 ? restore_command_retry_interval : 5000L); ResetLatch(&XLogCtl->recoveryWakeupLatch); break; } -- 1.9.3 (Apple Git-50)
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers