mirror of
https://github.com/postgres/postgres.git
synced 2025-05-20 05:13:53 +03:00
Prohibit max_slot_wal_keep_size to value other than -1 during upgrade.
We don't want existing slots in the old cluster to get invalidated during the upgrade. During an upgrade, we set this variable to -1 via the command line in an attempt to prevent such invalidations, but users have ways to override it. This patch ensures the value is not overridden by the user. Author: Kyotaro Horiguchi Reviewed-by: Peter Smith, Alvaro Herrera Discussion: http://postgr.es/m/20231027.115759.2206827438943188717.horikyota.ntt@gmail.com
This commit is contained in:
parent
5ba1ac99a8
commit
8bfb231b43
@ -2063,6 +2063,25 @@ check_wal_segment_size(int *newval, void **extra, GucSource source)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* GUC check_hook for max_slot_wal_keep_size
|
||||||
|
*
|
||||||
|
* We don't allow the value of max_slot_wal_keep_size other than -1 during the
|
||||||
|
* binary upgrade. See start_postmaster() in pg_upgrade for more details.
|
||||||
|
*/
|
||||||
|
bool
|
||||||
|
check_max_slot_wal_keep_size(int *newval, void **extra, GucSource source)
|
||||||
|
{
|
||||||
|
if (IsBinaryUpgrade && *newval != -1)
|
||||||
|
{
|
||||||
|
GUC_check_errdetail("\"%s\" must be set to -1 during binary upgrade mode.",
|
||||||
|
"max_slot_wal_keep_size");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* At a checkpoint, how many WAL segments to recycle as preallocated future
|
* At a checkpoint, how many WAL segments to recycle as preallocated future
|
||||||
* XLOG segments? Returns the highest segment that should be preallocated.
|
* XLOG segments? Returns the highest segment that should be preallocated.
|
||||||
|
@ -1424,18 +1424,12 @@ InvalidatePossiblyObsoleteSlot(ReplicationSlotInvalidationCause cause,
|
|||||||
SpinLockRelease(&s->mutex);
|
SpinLockRelease(&s->mutex);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The logical replication slots shouldn't be invalidated as
|
* The logical replication slots shouldn't be invalidated as GUC
|
||||||
* max_slot_wal_keep_size GUC is set to -1 during the upgrade.
|
* max_slot_wal_keep_size is set to -1 during the binary upgrade. See
|
||||||
*
|
* check_old_cluster_for_valid_slots() where we ensure that no
|
||||||
* The following is just a sanity check.
|
* invalidated before the upgrade.
|
||||||
*/
|
*/
|
||||||
if (*invalidated && SlotIsLogical(s) && IsBinaryUpgrade)
|
Assert(!(*invalidated && SlotIsLogical(s) && IsBinaryUpgrade));
|
||||||
{
|
|
||||||
ereport(ERROR,
|
|
||||||
errcode(ERRCODE_INVALID_PARAMETER_VALUE),
|
|
||||||
errmsg("replication slots must not be invalidated during the upgrade"),
|
|
||||||
errhint("\"max_slot_wal_keep_size\" must be set to -1 during the upgrade"));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (active_pid != 0)
|
if (active_pid != 0)
|
||||||
{
|
{
|
||||||
|
@ -2845,7 +2845,7 @@ struct config_int ConfigureNamesInt[] =
|
|||||||
},
|
},
|
||||||
&max_slot_wal_keep_size_mb,
|
&max_slot_wal_keep_size_mb,
|
||||||
-1, -1, MAX_KILOBYTES,
|
-1, -1, MAX_KILOBYTES,
|
||||||
NULL, NULL, NULL
|
check_max_slot_wal_keep_size, NULL, NULL
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -84,6 +84,8 @@ extern bool check_maintenance_io_concurrency(int *newval, void **extra,
|
|||||||
extern void assign_maintenance_io_concurrency(int newval, void *extra);
|
extern void assign_maintenance_io_concurrency(int newval, void *extra);
|
||||||
extern bool check_max_connections(int *newval, void **extra, GucSource source);
|
extern bool check_max_connections(int *newval, void **extra, GucSource source);
|
||||||
extern bool check_max_wal_senders(int *newval, void **extra, GucSource source);
|
extern bool check_max_wal_senders(int *newval, void **extra, GucSource source);
|
||||||
|
extern bool check_max_slot_wal_keep_size(int *newval, void **extra,
|
||||||
|
GucSource source);
|
||||||
extern void assign_max_wal_size(int newval, void *extra);
|
extern void assign_max_wal_size(int newval, void *extra);
|
||||||
extern bool check_max_worker_processes(int *newval, void **extra,
|
extern bool check_max_worker_processes(int *newval, void **extra,
|
||||||
GucSource source);
|
GucSource source);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user