|
PostgreSQL Source Code git master
|
#include "access/xlog.h"#include "access/xlogreader.h"#include "storage/condition_variable.h"#include "storage/lwlock.h"#include "storage/shmem.h"#include "storage/spin.h"#include "replication/walreceiver.h"

Go to the source code of this file.
Data Structures | |
| struct | ReplicationSlotPersistentData |
| struct | ReplicationSlot |
| struct | ReplicationSlotCtlData |
Macros | |
| #define | PG_REPLSLOT_DIR "pg_replslot" |
| #define | CONFLICT_DETECTION_SLOT "pg_conflict_detection" |
| #define | RS_INVAL_MAX_CAUSES 4 |
| #define | SlotIsPhysical(slot) ((slot)->data.database == InvalidOid) |
| #define | SlotIsLogical(slot) ((slot)->data.database != InvalidOid) |
Typedefs | |
| typedef enum ReplicationSlotPersistency | ReplicationSlotPersistency |
| typedef enum ReplicationSlotInvalidationCause | ReplicationSlotInvalidationCause |
| typedef enum SlotSyncSkipReason | SlotSyncSkipReason |
| typedef struct ReplicationSlotPersistentData | ReplicationSlotPersistentData |
| typedef struct ReplicationSlot | ReplicationSlot |
| typedef struct ReplicationSlotCtlData | ReplicationSlotCtlData |
Enumerations | |
| enum | ReplicationSlotPersistency { RS_PERSISTENT , RS_EPHEMERAL , RS_TEMPORARY } |
| enum | ReplicationSlotInvalidationCause { RS_INVAL_NONE = 0 , RS_INVAL_WAL_REMOVED = (1 << 0) , RS_INVAL_HORIZON = (1 << 1) , RS_INVAL_WAL_LEVEL = (1 << 2) , RS_INVAL_IDLE_TIMEOUT = (1 << 3) } |
| enum | SlotSyncSkipReason { SS_SKIP_NONE , SS_SKIP_WAL_NOT_FLUSHED , SS_SKIP_WAL_OR_ROWS_REMOVED , SS_SKIP_NO_CONSISTENT_SNAPSHOT , SS_SKIP_INVALID } |
| #define SlotIsLogical | ( | slot | ) | ((slot)->data.database != InvalidOid) |
| #define SlotIsPhysical | ( | slot | ) | ((slot)->data.database == InvalidOid) |
| typedef struct ReplicationSlot ReplicationSlot |
| typedef struct ReplicationSlotCtlData ReplicationSlotCtlData |
| typedef enum ReplicationSlotPersistency ReplicationSlotPersistency |
| typedef struct ReplicationSlotPersistentData ReplicationSlotPersistentData |
| typedef enum SlotSyncSkipReason SlotSyncSkipReason |
| Enumerator | |
|---|---|
| RS_INVAL_NONE | |
| RS_INVAL_WAL_REMOVED | |
| RS_INVAL_HORIZON | |
| RS_INVAL_WAL_LEVEL | |
| RS_INVAL_IDLE_TIMEOUT | |
Definition at line 58 of file slot.h.
| Enumerator | |
|---|---|
| RS_PERSISTENT | |
| RS_EPHEMERAL | |
| RS_TEMPORARY | |
| enum SlotSyncSkipReason |
| Enumerator | |
|---|---|
| SS_SKIP_NONE | |
| SS_SKIP_WAL_NOT_FLUSHED | |
| SS_SKIP_WAL_OR_ROWS_REMOVED | |
| SS_SKIP_NO_CONSISTENT_SNAPSHOT | |
| SS_SKIP_INVALID | |
Definition at line 80 of file slot.h.
| void CheckPointReplicationSlots | ( | bool | is_shutdown | ) |
Definition at line 2126 of file slot.c.
References ReplicationSlotPersistentData::confirmed_flush, ReplicationSlot::data, DEBUG1, ReplicationSlot::dirty, elog, i, ReplicationSlot::in_use, ReplicationSlotPersistentData::invalidated, ReplicationSlot::just_dirtied, ReplicationSlot::last_saved_confirmed_flush, ReplicationSlot::last_saved_restart_lsn, LOG, LW_SHARED, LWLockAcquire(), LWLockRelease(), max_replication_slots, MAXPGPATH, ReplicationSlot::mutex, ReplicationSlotPersistentData::name, NameStr, PG_REPLSLOT_DIR, ReplicationSlotCtlData::replication_slots, ReplicationSlotCtl, ReplicationSlotsComputeRequiredLSN(), ReplicationSlotPersistentData::restart_lsn, RS_INVAL_NONE, SaveSlotToPath(), SlotIsLogical, SpinLockAcquire, SpinLockRelease, and sprintf.
Referenced by CheckPointGuts().
| void CheckSlotPermissions | ( | void | ) |
Definition at line 1555 of file slot.c.
References ereport, errcode(), errdetail(), errmsg(), ERROR, GetUserId(), and has_rolreplication().
Referenced by copy_replication_slot(), pg_create_logical_replication_slot(), pg_create_physical_replication_slot(), pg_drop_replication_slot(), pg_logical_slot_get_changes_guts(), pg_replication_slot_advance(), and pg_sync_replication_slots().
| void CheckSlotRequirements | ( | void | ) |
Definition at line 1533 of file slot.c.
References ereport, errcode(), errmsg(), ERROR, max_replication_slots, wal_level, and WAL_LEVEL_REPLICA.
Referenced by CheckLogicalDecodingRequirements(), copy_replication_slot(), pg_create_physical_replication_slot(), and pg_drop_replication_slot().
| ReplicationSlotInvalidationCause GetSlotInvalidationCause | ( | const char * | cause_name | ) |
Definition at line 2725 of file slot.c.
References Assert(), SlotInvalidationCauseMap::cause, i, RS_INVAL_MAX_CAUSES, RS_INVAL_NONE, and SlotInvalidationCauses.
Referenced by synchronize_slots().
| const char * GetSlotInvalidationCauseName | ( | ReplicationSlotInvalidationCause | cause | ) |
Definition at line 2745 of file slot.c.
References Assert(), SlotInvalidationCauseMap::cause_name, i, RS_INVAL_MAX_CAUSES, and SlotInvalidationCauses.
Referenced by pg_get_replication_slots(), and ReplicationSlotAcquire().
| bool InvalidateObsoleteReplicationSlots | ( | uint32 | possible_causes, |
| XLogSegNo | oldestSegno, | ||
| Oid | dboid, | ||
| TransactionId | snapshotConflictHorizon | ||
| ) |
Definition at line 2066 of file slot.c.
References Assert(), i, ReplicationSlot::in_use, InvalidatePossiblyObsoleteSlot(), IsBinaryUpgrade, LW_SHARED, LWLockAcquire(), LWLockRelease(), max_replication_slots, ReplicationSlotCtlData::replication_slots, ReplicationSlotCtl, ReplicationSlotsComputeRequiredLSN(), ReplicationSlotsComputeRequiredXmin(), RS_INVAL_HORIZON, RS_INVAL_NONE, RS_INVAL_WAL_REMOVED, SlotIsLogical, TransactionIdIsValid, wal_segment_size, and XLogSegNoOffsetToRecPtr.
Referenced by CreateCheckPoint(), CreateRestartPoint(), ResolveRecoveryConflictWithSnapshot(), and xlog_redo().
| void ReplicationSlotAcquire | ( | const char * | name, |
| bool | nowait, | ||
| bool | error_if_invalid | ||
| ) |
Definition at line 626 of file slot.c.
References ReplicationSlot::active_cv, ReplicationSlot::active_pid, am_walsender, Assert(), ConditionVariableBroadcast(), ConditionVariableCancelSleep(), ConditionVariablePrepareToSleep(), ConditionVariableSleep(), ReplicationSlot::data, DEBUG1, ereport, errcode(), errdetail(), errmsg(), ERROR, GetSlotInvalidationCauseName(), ReplicationSlot::in_use, ReplicationSlotPersistentData::invalidated, IsLogicalLauncher(), IsSlotForConflictCheck(), IsUnderPostmaster, LOG, log_replication_commands, LW_SHARED, LWLockAcquire(), LWLockRelease(), ReplicationSlot::mutex, MyProcPid, MyReplicationSlot, name, ReplicationSlotPersistentData::name, NameStr, pgstat_acquire_replslot(), ReplicationSlotSetInactiveSince(), RS_INVAL_NONE, SearchNamedReplicationSlot(), SlotIsLogical, SpinLockAcquire, and SpinLockRelease.
Referenced by acquire_conflict_slot_if_exists(), binary_upgrade_logical_slot_has_caught_up(), drop_local_obsolete_slots(), pg_logical_slot_get_changes_guts(), pg_replication_slot_advance(), ReplicationSlotAlter(), ReplicationSlotDrop(), StartLogicalReplication(), StartReplication(), and synchronize_one_slot().
| void ReplicationSlotAlter | ( | const char * | name, |
| const bool * | failover, | ||
| const bool * | two_phase | ||
| ) |
Definition at line 915 of file slot.c.
References Assert(), ReplicationSlot::data, ereport, errcode(), errdetail(), errmsg(), ERROR, failover, ReplicationSlotPersistentData::failover, ReplicationSlot::mutex, MyReplicationSlot, name, ReplicationSlotPersistentData::persistency, RecoveryInProgress(), ReplicationSlotAcquire(), ReplicationSlotMarkDirty(), ReplicationSlotRelease(), ReplicationSlotSave(), RS_TEMPORARY, SlotIsPhysical, SpinLockAcquire, SpinLockRelease, ReplicationSlotPersistentData::synced, two_phase, and ReplicationSlotPersistentData::two_phase.
Referenced by AlterReplicationSlot().
| void ReplicationSlotCleanup | ( | bool | synced_only | ) |
Definition at line 853 of file slot.c.
References ReplicationSlot::active_cv, ReplicationSlot::active_pid, Assert(), ConditionVariableBroadcast(), ReplicationSlot::data, i, ReplicationSlot::in_use, LW_SHARED, LWLockAcquire(), LWLockRelease(), max_replication_slots, ReplicationSlot::mutex, MyProcPid, MyReplicationSlot, ReplicationSlotPersistentData::persistency, ReplicationSlotCtlData::replication_slots, ReplicationSlotCtl, ReplicationSlotDropPtr(), RS_TEMPORARY, SpinLockAcquire, SpinLockRelease, and ReplicationSlotPersistentData::synced.
Referenced by PostgresMain(), ReplicationSlotShmemExit(), slotsync_failure_callback(), slotsync_worker_onexit(), SyncReplicationSlots(), and WalSndErrorCleanup().
| void ReplicationSlotCreate | ( | const char * | name, |
| bool | db_specific, | ||
| ReplicationSlotPersistency | persistency, | ||
| bool | two_phase, | ||
| bool | failover, | ||
| bool | synced | ||
| ) |
Definition at line 384 of file slot.c.
References ReplicationSlot::active_cv, ReplicationSlot::active_pid, Assert(), ReplicationSlot::candidate_catalog_xmin, ReplicationSlot::candidate_restart_lsn, ReplicationSlot::candidate_restart_valid, ReplicationSlot::candidate_xmin_lsn, ConditionVariableBroadcast(), CreateSlotOnDisk(), ReplicationSlot::data, ReplicationSlotPersistentData::database, ReplicationSlot::dirty, ReplicationSlot::effective_catalog_xmin, ReplicationSlot::effective_xmin, ereport, errcode(), ERRCODE_DUPLICATE_OBJECT, errhint(), errmsg(), ERROR, failover, ReplicationSlotPersistentData::failover, i, ReplicationSlot::in_use, ReplicationSlot::inactive_since, InvalidOid, InvalidTransactionId, InvalidXLogRecPtr, IsBinaryUpgrade, IsLogicalLauncher(), IsSyncingReplicationSlots(), ReplicationSlot::just_dirtied, ReplicationSlot::last_saved_confirmed_flush, ReplicationSlot::last_saved_restart_lsn, LW_EXCLUSIVE, LW_SHARED, LWLockAcquire(), LWLockRelease(), max_replication_slots, ReplicationSlot::mutex, MyDatabaseId, MyProcPid, MyReplicationSlot, name, ReplicationSlotPersistentData::name, NameStr, namestrcpy(), ReplicationSlotPersistentData::persistency, pgstat_create_replslot(), RecoveryInProgress(), ReplicationSlotCtlData::replication_slots, ReplicationSlotCtl, ReplicationSlotValidateName(), RS_TEMPORARY, SlotIsLogical, ReplicationSlot::slotsync_skip_reason, SpinLockAcquire, SpinLockRelease, SS_SKIP_NONE, ReplicationSlotPersistentData::synced, two_phase, ReplicationSlotPersistentData::two_phase, and ReplicationSlotPersistentData::two_phase_at.
Referenced by create_logical_replication_slot(), create_physical_replication_slot(), CreateConflictDetectionSlot(), CreateReplicationSlot(), and synchronize_one_slot().
| void ReplicationSlotDrop | ( | const char * | name, |
| bool | nowait | ||
| ) |
Definition at line 892 of file slot.c.
References Assert(), ReplicationSlot::data, ereport, errcode(), errdetail(), errmsg(), ERROR, MyReplicationSlot, name, RecoveryInProgress(), ReplicationSlotAcquire(), ReplicationSlotDropAcquired(), and ReplicationSlotPersistentData::synced.
Referenced by DropReplicationSlot(), and pg_drop_replication_slot().
| void ReplicationSlotDropAcquired | ( | void | ) |
Definition at line 997 of file slot.c.
References Assert(), MyReplicationSlot, and ReplicationSlotDropPtr().
Referenced by ApplyLauncherMain(), drop_local_obsolete_slots(), ReplicationSlotDrop(), ReplicationSlotRelease(), and ReplicationSlotsDropDBSlots().
| void ReplicationSlotDropAtPubNode | ( | WalReceiverConn * | wrconn, |
| char * | slotname, | ||
| bool | missing_ok | ||
| ) |
Definition at line 2299 of file subscriptioncmds.c.
References appendStringInfo(), Assert(), StringInfoData::data, ereport, WalRcvExecResult::err, errcode(), errmsg(), ERROR, initStringInfo(), load_file(), LOG, NOTICE, pfree(), PG_END_TRY, PG_FINALLY, PG_TRY, quote_identifier(), WalRcvExecResult::sqlstate, WalRcvExecResult::status, walrcv_clear_result(), WALRCV_ERROR, walrcv_exec, WALRCV_OK_COMMAND, and wrconn.
Referenced by AlterSubscription_refresh(), DropSubscription(), LogicalRepSyncTableStart(), and ProcessSyncingTablesForSync().
| int ReplicationSlotIndex | ( | ReplicationSlot * | slot | ) |
Definition at line 579 of file slot.c.
References Assert(), max_replication_slots, ReplicationSlotCtlData::replication_slots, and ReplicationSlotCtl.
Referenced by get_replslot_index(), pgstat_acquire_replslot(), pgstat_create_replslot(), pgstat_drop_replslot(), pgstat_report_replslot(), pgstat_report_replslotsync(), and pgstat_reset_replslot().
| void ReplicationSlotInitialize | ( | void | ) |
Definition at line 241 of file slot.c.
References before_shmem_exit(), and ReplicationSlotShmemExit().
Referenced by BaseInit().
| void ReplicationSlotMarkDirty | ( | void | ) |
Definition at line 1139 of file slot.c.
References Assert(), ReplicationSlot::dirty, ReplicationSlot::just_dirtied, ReplicationSlot::mutex, MyReplicationSlot, SpinLockAcquire, and SpinLockRelease.
Referenced by copy_replication_slot(), create_physical_replication_slot(), CreateDecodingContext(), CreateInitDecodingContext(), CreateReplicationSlot(), init_conflict_slot_xmin(), InvalidatePossiblyObsoleteSlot(), LogicalConfirmReceivedLocation(), LogicalSlotAdvanceAndCheckSnapState(), pg_logical_slot_get_changes_guts(), pg_physical_replication_slot_advance(), PhysicalConfirmReceivedLocation(), PhysicalReplicationSlotNewXmin(), ReplicationSlotAlter(), ReplicationSlotPersist(), synchronize_one_slot(), update_conflict_slot_xmin(), and update_local_synced_slot().
| bool ReplicationSlotName | ( | int | index, |
| Name | name | ||
| ) |
Definition at line 595 of file slot.c.
References ReplicationSlot::data, ReplicationSlot::in_use, LW_SHARED, LWLockAcquire(), LWLockRelease(), name, ReplicationSlotPersistentData::name, NameStr, namestrcpy(), ReplicationSlotCtlData::replication_slots, and ReplicationSlotCtl.
Referenced by pgstat_replslot_to_serialized_name_cb().
Definition at line 1203 of file tablesync.c.
References GetSystemIdentifier(), snprintf, and UINT64_FORMAT.
Referenced by AlterSubscription_refresh(), DropSubscription(), LogicalRepSyncTableStart(), ProcessSyncingTablesForSync(), and ReportSlotConnectionError().
| void ReplicationSlotPersist | ( | void | ) |
Definition at line 1156 of file slot.c.
References Assert(), ReplicationSlot::data, ReplicationSlot::mutex, MyReplicationSlot, ReplicationSlotPersistentData::persistency, ReplicationSlotMarkDirty(), ReplicationSlotSave(), RS_PERSISTENT, SpinLockAcquire, and SpinLockRelease.
Referenced by copy_replication_slot(), CreateReplicationSlot(), pg_create_logical_replication_slot(), and update_and_persist_local_synced_slot().
| void ReplicationSlotRelease | ( | void | ) |
Definition at line 764 of file slot.c.
References ReplicationSlot::active_cv, ReplicationSlot::active_pid, am_walsender, Assert(), ConditionVariableBroadcast(), ReplicationSlot::data, DEBUG1, ReplicationSlot::effective_xmin, ereport, errmsg(), GetCurrentTimestamp(), InvalidTransactionId, LOG, log_replication_commands, LW_EXCLUSIVE, LWLockAcquire(), LWLockRelease(), ReplicationSlot::mutex, MyProc, MyReplicationSlot, ReplicationSlotPersistentData::name, NameStr, now(), ReplicationSlotPersistentData::persistency, pfree(), PGPROC::pgxactoff, ProcGlobal, pstrdup(), ReplicationSlotDropAcquired(), ReplicationSlotsComputeRequiredXmin(), ReplicationSlotSetInactiveSince(), RS_EPHEMERAL, RS_PERSISTENT, SlotIsLogical, SpinLockAcquire, SpinLockRelease, PGPROC::statusFlags, PROC_HDR::statusFlags, TransactionIdIsValid, and ReplicationSlotPersistentData::xmin.
Referenced by binary_upgrade_create_conflict_detection_slot(), binary_upgrade_logical_slot_has_caught_up(), copy_replication_slot(), CreateReplicationSlot(), InvalidatePossiblyObsoleteSlot(), pg_create_logical_replication_slot(), pg_create_physical_replication_slot(), pg_logical_slot_get_changes_guts(), pg_replication_slot_advance(), PostgresMain(), ReplicationSlotAlter(), ReplicationSlotShmemExit(), slotsync_failure_callback(), slotsync_worker_onexit(), StartLogicalReplication(), StartReplication(), synchronize_one_slot(), and WalSndErrorCleanup().
| void ReplicationSlotReserveWal | ( | void | ) |
Definition at line 1572 of file slot.c.
References Assert(), ReplicationSlot::data, GetRedoRecPtr(), GetXLogInsertRecPtr(), GetXLogReplayRecPtr(), ReplicationSlot::last_saved_restart_lsn, LogStandbySnapshot(), ReplicationSlot::mutex, MyReplicationSlot, RecoveryInProgress(), ReplicationSlotsComputeRequiredLSN(), ReplicationSlotPersistentData::restart_lsn, SlotIsLogical, SlotIsPhysical, SpinLockAcquire, SpinLockRelease, wal_segment_size, XLByteToSeg, XLogFlush(), XLogGetLastRemovedSegno(), and XLogRecPtrIsValid.
Referenced by create_physical_replication_slot(), CreateInitDecodingContext(), and CreateReplicationSlot().
| void ReplicationSlotSave | ( | void | ) |
Definition at line 1121 of file slot.c.
References Assert(), ReplicationSlot::data, ERROR, MAXPGPATH, MyReplicationSlot, ReplicationSlotPersistentData::name, NameStr, PG_REPLSLOT_DIR, SaveSlotToPath(), and sprintf.
Referenced by copy_replication_slot(), create_physical_replication_slot(), CreateDecodingContext(), CreateInitDecodingContext(), CreateReplicationSlot(), init_conflict_slot_xmin(), InvalidatePossiblyObsoleteSlot(), LogicalConfirmReceivedLocation(), ReplicationSlotAlter(), ReplicationSlotPersist(), synchronize_one_slot(), and update_local_synced_slot().
| XLogRecPtr ReplicationSlotsComputeLogicalRestartLSN | ( | void | ) |
Definition at line 1304 of file slot.c.
References ReplicationSlot::data, i, ReplicationSlot::in_use, ReplicationSlotPersistentData::invalidated, InvalidXLogRecPtr, ReplicationSlot::last_saved_restart_lsn, LW_SHARED, LWLockAcquire(), LWLockRelease(), max_replication_slots, ReplicationSlot::mutex, ReplicationSlotPersistentData::persistency, ReplicationSlotCtlData::replication_slots, ReplicationSlotCtl, ReplicationSlotPersistentData::restart_lsn, RS_INVAL_NONE, RS_PERSISTENT, SlotIsLogical, SpinLockAcquire, SpinLockRelease, and XLogRecPtrIsValid.
Referenced by CheckPointLogicalRewriteHeap(), and CheckPointSnapBuild().
| void ReplicationSlotsComputeRequiredLSN | ( | void | ) |
Definition at line 1234 of file slot.c.
References Assert(), ReplicationSlot::data, i, ReplicationSlot::in_use, ReplicationSlotPersistentData::invalidated, InvalidXLogRecPtr, ReplicationSlot::last_saved_restart_lsn, LW_SHARED, LWLockAcquire(), LWLockRelease(), max_replication_slots, ReplicationSlot::mutex, ReplicationSlotPersistentData::persistency, ReplicationSlotCtlData::replication_slots, ReplicationSlotCtl, ReplicationSlotPersistentData::restart_lsn, RS_INVAL_NONE, RS_PERSISTENT, SpinLockAcquire, SpinLockRelease, XLogRecPtrIsValid, and XLogSetReplicationSlotMinimumLSN().
Referenced by CheckPointReplicationSlots(), copy_replication_slot(), InvalidateObsoleteReplicationSlots(), LogicalConfirmReceivedLocation(), pg_replication_slot_advance(), PhysicalConfirmReceivedLocation(), ReplicationSlotDropPtr(), ReplicationSlotReserveWal(), reserve_wal_for_local_slot(), StartupReplicationSlots(), and update_local_synced_slot().
| void ReplicationSlotsComputeRequiredXmin | ( | bool | already_locked | ) |
Definition at line 1178 of file slot.c.
References Assert(), ReplicationSlot::data, ReplicationSlot::effective_catalog_xmin, ReplicationSlot::effective_xmin, i, ReplicationSlot::in_use, ReplicationSlotPersistentData::invalidated, InvalidTransactionId, LW_SHARED, LWLockAcquire(), LWLockRelease(), max_replication_slots, ReplicationSlot::mutex, ProcArraySetReplicationSlotXmin(), ReplicationSlotCtlData::replication_slots, ReplicationSlotCtl, RS_INVAL_NONE, SpinLockAcquire, SpinLockRelease, TransactionIdIsValid, and TransactionIdPrecedes().
Referenced by copy_replication_slot(), CreateInitDecodingContext(), init_conflict_slot_xmin(), InvalidateObsoleteReplicationSlots(), LogicalConfirmReceivedLocation(), pg_replication_slot_advance(), PhysicalReplicationSlotNewXmin(), ReplicationSlotDropPtr(), ReplicationSlotRelease(), StartupReplicationSlots(), synchronize_one_slot(), update_conflict_slot_xmin(), and update_local_synced_slot().
| bool ReplicationSlotsCountDBSlots | ( | Oid | dboid, |
| int * | nslots, | ||
| int * | nactive | ||
| ) |
Definition at line 1383 of file slot.c.
References ReplicationSlot::active_pid, ReplicationSlot::data, ReplicationSlotPersistentData::database, i, ReplicationSlot::in_use, LW_SHARED, LWLockAcquire(), LWLockRelease(), max_replication_slots, ReplicationSlot::mutex, ReplicationSlotCtlData::replication_slots, ReplicationSlotCtl, SlotIsLogical, SpinLockAcquire, and SpinLockRelease.
Referenced by dropdb().
| void ReplicationSlotsDropDBSlots | ( | Oid | dboid | ) |
Definition at line 1441 of file slot.c.
References ReplicationSlot::active_pid, ReplicationSlot::data, ReplicationSlotPersistentData::database, ereport, errcode(), errmsg(), ERROR, i, ReplicationSlot::in_use, LW_SHARED, LWLockAcquire(), LWLockRelease(), max_replication_slots, ReplicationSlot::mutex, MyProcPid, MyReplicationSlot, ReplicationSlotPersistentData::name, NameStr, ReplicationSlotCtlData::replication_slots, ReplicationSlotCtl, ReplicationSlotDropAcquired(), SlotIsLogical, SpinLockAcquire, and SpinLockRelease.
Referenced by dbase_redo(), and dropdb().
|
inlinestatic |
Definition at line 303 of file slot.h.
References ReplicationSlot::data, ReplicationSlot::inactive_since, ReplicationSlotPersistentData::invalidated, ReplicationSlot::mutex, RS_INVAL_NONE, SpinLockAcquire, and SpinLockRelease.
Referenced by ReplicationSlotAcquire(), ReplicationSlotRelease(), RestoreSlotFromDisk(), and update_synced_slots_inactive_since().
| void ReplicationSlotsShmemInit | ( | void | ) |
Definition at line 206 of file slot.c.
References ReplicationSlot::active_cv, ConditionVariableInit(), i, ReplicationSlot::io_in_progress_lock, LWLockInitialize(), max_replication_slots, MemSet, ReplicationSlot::mutex, ReplicationSlotCtlData::replication_slots, ReplicationSlotCtl, ReplicationSlotsShmemSize(), ShmemInitStruct(), and SpinLockInit.
Referenced by CreateOrAttachShmemStructs().
| Size ReplicationSlotsShmemSize | ( | void | ) |
Definition at line 188 of file slot.c.
References add_size(), max_replication_slots, and mul_size().
Referenced by CalculateShmemSize(), and ReplicationSlotsShmemInit().
| bool ReplicationSlotValidateName | ( | const char * | name, |
| bool | allow_reserved_name, | ||
| int | elevel | ||
| ) |
Definition at line 266 of file slot.c.
References ereport, errcode(), errhint_internal(), errmsg_internal(), name, pfree(), and ReplicationSlotValidateNameInternal().
Referenced by parse_subscription_options(), ReplicationSlotCreate(), and StartupReorderBuffer().
| bool ReplicationSlotValidateNameInternal | ( | const char * | name, |
| bool | allow_reserved_name, | ||
| int * | err_code, | ||
| char ** | err_msg, | ||
| char ** | err_hint | ||
| ) |
Definition at line 311 of file slot.c.
References _, CONFLICT_DETECTION_SLOT, IsSlotForConflictCheck(), name, NAMEDATALEN, and psprintf().
Referenced by check_primary_slot_name(), ReplicationSlotValidateName(), and validate_sync_standby_slots().
| ReplicationSlot * SearchNamedReplicationSlot | ( | const char * | name, |
| bool | need_lock | ||
| ) |
Definition at line 546 of file slot.c.
References ReplicationSlot::data, i, ReplicationSlot::in_use, LW_SHARED, LWLockAcquire(), LWLockRelease(), max_replication_slots, name, ReplicationSlotPersistentData::name, NameStr, ReplicationSlotCtlData::replication_slots, and ReplicationSlotCtl.
Referenced by acquire_conflict_slot_if_exists(), get_replslot_index(), pg_ls_replslotdir(), pgstat_reset_replslot(), ReadReplicationSlot(), ReplicationSlotAcquire(), StandbySlotsHaveCaughtup(), and synchronize_one_slot().
| bool SlotExistsInSyncStandbySlots | ( | const char * | slot_name | ) |
Definition at line 2869 of file slot.c.
References i, SyncStandbySlotsConfigData::nslotnames, SyncStandbySlotsConfigData::slot_names, and synchronized_standby_slots_config.
Referenced by PhysicalWakeupLogicalWalSnd().
| bool StandbySlotsHaveCaughtup | ( | XLogRecPtr | wait_for_lsn, |
| int | elevel | ||
| ) |
Definition at line 2902 of file slot.c.
References ReplicationSlot::active_pid, Assert(), ReplicationSlot::data, ereport, errcode(), errdetail(), errhint(), errmsg(), i, ReplicationSlotPersistentData::invalidated, InvalidXLogRecPtr, LW_SHARED, LWLockAcquire(), LWLockRelease(), ReplicationSlot::mutex, name, SyncStandbySlotsConfigData::nslotnames, RecoveryInProgress(), ReplicationSlotPersistentData::restart_lsn, RS_INVAL_NONE, SearchNamedReplicationSlot(), SyncStandbySlotsConfigData::slot_names, SlotIsLogical, SpinLockAcquire, SpinLockRelease, ss_oldest_flush_lsn, synchronized_standby_slots_config, and XLogRecPtrIsValid.
Referenced by NeedToWaitForStandbys(), and WaitForStandbyConfirmation().
| void StartupReplicationSlots | ( | void | ) |
Definition at line 2198 of file slot.c.
References AllocateDir(), dirent::d_name, DEBUG1, elog, ereport, errmsg(), FreeDir(), fsync_fname(), get_dirent_type(), max_replication_slots, MAXPGPATH, PG_REPLSLOT_DIR, pg_str_endswith(), PGFILETYPE_DIR, PGFILETYPE_ERROR, ReadDir(), ReplicationSlotsComputeRequiredLSN(), ReplicationSlotsComputeRequiredXmin(), RestoreSlotFromDisk(), rmtree(), snprintf, and WARNING.
Referenced by StartupXLOG().
| void WaitForStandbyConfirmation | ( | XLogRecPtr | wait_for_lsn | ) |
Definition at line 3050 of file slot.c.
References CHECK_FOR_INTERRUPTS, ConditionVariableCancelSleep(), ConditionVariablePrepareToSleep(), ConditionVariableTimedSleep(), ConfigReloadPending, ReplicationSlot::data, ReplicationSlotPersistentData::failover, MyReplicationSlot, PGC_SIGHUP, ProcessConfigFile(), StandbySlotsHaveCaughtup(), synchronized_standby_slots_config, WalSndCtlData::wal_confirm_rcv_cv, WalSndCtl, and WARNING.
Referenced by LogicalSlotAdvanceAndCheckSnapState(), and pg_logical_slot_get_changes_guts().
|
extern |
Definition at line 158 of file slot.c.
Referenced by CanInvalidateIdleSlot(), DetermineSlotInvalidationCause(), and ReportSlotInvalidation().
|
extern |
Definition at line 151 of file slot.c.
Referenced by check_new_cluster_replication_slots(), CheckPointReplicationSlots(), CheckSlotRequirements(), copy_replication_slot(), get_local_synced_slots(), InvalidateObsoleteReplicationSlots(), pg_get_replication_slots(), ReplicationSlotCleanup(), ReplicationSlotCreate(), ReplicationSlotIndex(), ReplicationSlotsComputeLogicalRestartLSN(), ReplicationSlotsComputeRequiredLSN(), ReplicationSlotsComputeRequiredXmin(), ReplicationSlotsCountDBSlots(), ReplicationSlotsDropDBSlots(), ReplicationSlotsShmemInit(), ReplicationSlotsShmemSize(), RestoreSlotFromDisk(), SearchNamedReplicationSlot(), StartupReplicationSlots(), and update_synced_slots_inactive_since().
|
extern |
Definition at line 148 of file slot.c.
Referenced by ApplyLauncherMain(), binary_upgrade_logical_slot_has_caught_up(), compute_min_nonremovable_xid(), copy_replication_slot(), create_logical_replication_slot(), create_physical_replication_slot(), CreateConflictDetectionSlot(), CreateDecodingContext(), CreateInitDecodingContext(), CreateReplicationSlot(), init_conflict_slot_xmin(), InvalidatePossiblyObsoleteSlot(), LogicalConfirmReceivedLocation(), LogicalIncreaseRestartDecodingForSlot(), LogicalIncreaseXminForSlot(), logicalrep_worker_launch(), LogicalReplicationSlotHasPendingWal(), LogicalSlotAdvanceAndCheckSnapState(), NeedToWaitForStandbys(), pg_create_logical_replication_slot(), pg_create_physical_replication_slot(), pg_logical_slot_get_changes_guts(), pg_physical_replication_slot_advance(), pg_replication_slot_advance(), PhysicalConfirmReceivedLocation(), PhysicalReplicationSlotNewXmin(), PhysicalWakeupLogicalWalSnd(), PostgresMain(), ProcessStandbyHSFeedbackMessage(), ProcessStandbyReplyMessage(), ReorderBufferAllocate(), ReorderBufferFree(), ReorderBufferRestoreChanges(), ReorderBufferRestoreCleanup(), ReorderBufferSerializedPath(), ReorderBufferSerializeTXN(), ReplicationSlotAcquire(), ReplicationSlotAlter(), ReplicationSlotCleanup(), ReplicationSlotCreate(), ReplicationSlotDrop(), ReplicationSlotDropAcquired(), ReplicationSlotMarkDirty(), ReplicationSlotPersist(), ReplicationSlotRelease(), ReplicationSlotReserveWal(), ReplicationSlotSave(), ReplicationSlotsDropDBSlots(), ReplicationSlotShmemExit(), reserve_wal_for_local_slot(), slotsync_failure_callback(), slotsync_worker_onexit(), StartLogicalReplication(), StartReplication(), StartupDecodingContext(), synchronize_one_slot(), update_and_persist_local_synced_slot(), update_conflict_slot_xmin(), update_local_synced_slot(), update_slotsync_skip_stats(), WaitForStandbyConfirmation(), and WalSndErrorCleanup().
|
extern |
Definition at line 145 of file slot.c.
Referenced by CheckPointReplicationSlots(), copy_replication_slot(), get_local_synced_slots(), InvalidateObsoleteReplicationSlots(), pg_get_replication_slots(), ReplicationSlotCleanup(), ReplicationSlotCreate(), ReplicationSlotIndex(), ReplicationSlotName(), ReplicationSlotsComputeLogicalRestartLSN(), ReplicationSlotsComputeRequiredLSN(), ReplicationSlotsComputeRequiredXmin(), ReplicationSlotsCountDBSlots(), ReplicationSlotsDropDBSlots(), ReplicationSlotsShmemInit(), RestoreSlotFromDisk(), SearchNamedReplicationSlot(), and update_synced_slots_inactive_since().
|
extern |