aboutsummaryrefslogtreecommitdiff
path: root/src/test/modules/test_slot_timelines/test_slot_timelines.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/modules/test_slot_timelines/test_slot_timelines.c')
-rw-r--r--src/test/modules/test_slot_timelines/test_slot_timelines.c133
1 files changed, 0 insertions, 133 deletions
diff --git a/src/test/modules/test_slot_timelines/test_slot_timelines.c b/src/test/modules/test_slot_timelines/test_slot_timelines.c
deleted file mode 100644
index 1f074881d2f..00000000000
--- a/src/test/modules/test_slot_timelines/test_slot_timelines.c
+++ /dev/null
@@ -1,133 +0,0 @@
-/*--------------------------------------------------------------------------
- *
- * test_slot_timelines.c
- * Test harness code for slot timeline following
- *
- * Copyright (c) 2016, PostgreSQL Global Development Group
- *
- * IDENTIFICATION
- * src/test/modules/test_slot_timelines/test_slot_timelines.c
- *
- * -------------------------------------------------------------------------
- */
-#include "postgres.h"
-
-#include "access/transam.h"
-#include "fmgr.h"
-#include "miscadmin.h"
-#include "replication/slot.h"
-#include "utils/builtins.h"
-#include "utils/pg_lsn.h"
-
-PG_MODULE_MAGIC;
-
-PG_FUNCTION_INFO_V1(test_slot_timelines_create_logical_slot);
-PG_FUNCTION_INFO_V1(test_slot_timelines_advance_logical_slot);
-
-static void clear_slot_transient_state(void);
-
-/*
- * Create a new logical slot, with invalid LSN and xid, directly. This does not
- * use the snapshot builder or logical decoding machinery. It's only intended
- * for creating a slot on a replica that mirrors the state of a slot on an
- * upstream master.
- *
- * Note that this is test harness code. You shouldn't expose slot internals
- * to SQL like this for any real world usage. See the README.
- */
-Datum
-test_slot_timelines_create_logical_slot(PG_FUNCTION_ARGS)
-{
- char *slotname = text_to_cstring(PG_GETARG_TEXT_P(0));
- char *plugin = text_to_cstring(PG_GETARG_TEXT_P(1));
-
- CheckSlotRequirements();
-
- ReplicationSlotCreate(slotname, true, RS_PERSISTENT);
-
- /* register the plugin name with the slot */
- StrNCpy(NameStr(MyReplicationSlot->data.plugin), plugin, NAMEDATALEN);
-
- /*
- * Initialize persistent state to placeholders to be set by
- * test_slot_timelines_advance_logical_slot .
- */
- MyReplicationSlot->data.xmin = InvalidTransactionId;
- MyReplicationSlot->data.catalog_xmin = InvalidTransactionId;
- MyReplicationSlot->data.restart_lsn = InvalidXLogRecPtr;
- MyReplicationSlot->data.confirmed_flush = InvalidXLogRecPtr;
-
- clear_slot_transient_state();
-
- ReplicationSlotRelease();
-
- PG_RETURN_VOID();
-}
-
-/*
- * Set the state of a slot.
- *
- * This doesn't maintain the non-persistent state at all,
- * but since the slot isn't in use that's OK.
- *
- * There's intentionally no check to prevent slots going backwards
- * because they can actually go backwards if the master crashes when
- * it hasn't yet flushed slot state to disk then we copy the older
- * slot state after recovery.
- *
- * There's no checking done for xmin or catalog xmin either, since
- * we can't really do anything useful that accounts for xid wrap-around.
- *
- * Note that this is test harness code. You shouldn't expose slot internals
- * to SQL like this for any real world usage. See the README.
- */
-Datum
-test_slot_timelines_advance_logical_slot(PG_FUNCTION_ARGS)
-{
- char *slotname = text_to_cstring(PG_GETARG_TEXT_P(0));
- TransactionId new_xmin = DatumGetTransactionId(PG_GETARG_DATUM(1));
- TransactionId new_catalog_xmin = DatumGetTransactionId(PG_GETARG_DATUM(2));
- XLogRecPtr restart_lsn = PG_GETARG_LSN(3);
- XLogRecPtr confirmed_lsn = PG_GETARG_LSN(4);
-
- CheckSlotRequirements();
-
- ReplicationSlotAcquire(slotname);
-
- if (MyReplicationSlot->data.database != MyDatabaseId)
- elog(ERROR, "trying to update a slot on a different database");
-
- MyReplicationSlot->data.xmin = new_xmin;
- MyReplicationSlot->data.catalog_xmin = new_catalog_xmin;
- MyReplicationSlot->data.restart_lsn = restart_lsn;
- MyReplicationSlot->data.confirmed_flush = confirmed_lsn;
-
- clear_slot_transient_state();
-
- ReplicationSlotMarkDirty();
- ReplicationSlotSave();
- ReplicationSlotRelease();
-
- ReplicationSlotsComputeRequiredXmin(false);
- ReplicationSlotsComputeRequiredLSN();
-
- PG_RETURN_VOID();
-}
-
-static void
-clear_slot_transient_state(void)
-{
- Assert(MyReplicationSlot != NULL);
-
- /*
- * Make sure the slot state is the same as if it were newly loaded from
- * disk on recovery.
- */
- MyReplicationSlot->effective_xmin = MyReplicationSlot->data.xmin;
- MyReplicationSlot->effective_catalog_xmin = MyReplicationSlot->data.catalog_xmin;
-
- MyReplicationSlot->candidate_catalog_xmin = InvalidTransactionId;
- MyReplicationSlot->candidate_xmin_lsn = InvalidXLogRecPtr;
- MyReplicationSlot->candidate_restart_lsn = InvalidXLogRecPtr;
- MyReplicationSlot->candidate_restart_valid = InvalidXLogRecPtr;
-}