MemoryContextSwitchTo(old_context);
}
+static Oid
+lookup_relid(const char *relname, Oid schema_oid)
+{
+ Oid relid;
+
+ relid = get_relname_relid(relname, schema_oid);
+
+ if (!relid)
+ elog(ERROR, "cache lookup failed for relation public.%s", relname);
+
+ return relid;
+}
+
/*
* Make sure all required extensions are installed in the correct version for
* the current database.
schema_oid = get_namespace_oid("bdr", false);
if (schema_oid != InvalidOid)
{
- QueuedDDLCommandsRelid = get_relname_relid("bdr_queued_commands",
- schema_oid);
+ QueuedDDLCommandsRelid = lookup_relid("bdr_queued_commands",
+ schema_oid);
+
+ BdrSequenceValuesRelid = lookup_relid("bdr_sequence_values",
+ schema_oid);
+
+ BdrSequenceElectionsRelid = lookup_relid("bdr_sequence_elections",
+ schema_oid);
+
+ BdrVotesRelid = lookup_relid("bdr_votes", schema_oid);
}
+ else
+ elog(ERROR, "cache lookup failed for schema bdr");
elog(LOG, "bdr.bdr_queued_commands OID set to %u", QueuedDDLCommandsRelid);
/* DDL replication support */
extern Oid QueuedDDLCommandsRelid;
+/* sequencer support */
+extern Oid BdrSequenceValuesRelid;
+extern Oid BdrSequenceElectionsRelid;
+extern Oid BdrVotesRelid;
+
/* apply support */
extern void process_remote_begin(StringInfo s);
extern void process_remote_commit(StringInfo s);
static void
check_sequencer_wakeup(Relation rel)
{
- if (strcmp(RelationGetRelationName(rel), "bdr_sequence_values") == 0 ||
- strcmp(RelationGetRelationName(rel), "bdr_sequence_elections") == 0 ||
- strcmp(RelationGetRelationName(rel), "bdr_votes") == 0)
+ Oid reloid = RelationGetRelid(rel);
+
+ if (reloid == BdrSequenceValuesRelid ||
+ reloid == BdrSequenceElectionsRelid ||
+ reloid == BdrVotesRelid)
request_sequencer_wakeup = true;
}
int64 end_value;
} BdrSequenceValues;
+/* cached relids */
+Oid BdrSequenceValuesRelid; /* bdr_sequence_values */
+Oid BdrSequenceElectionsRelid; /* bdr_sequence_elections */
+Oid BdrVotesRelid; /* bdr_votes */
+
static BdrSequencerControl *BdrSequencerCtl = NULL;
/* how many nodes have we built shmem for */
}
static void
-bdr_sequencer_lock_rel(char *relname)
+bdr_sequencer_lock_rel(char *relname, Oid relid)
{
- Oid nspoid;
- Oid relid;
-
- nspoid = get_namespace_oid("bdr", false);
- relid = get_relname_relid(relname, nspoid);
- if (!relid)
- elog(ERROR, "cache lookup failed for relation public.%s", relname);
-
SetCurrentStatementStartTimestamp();
pgstat_report_activity(STATE_RUNNING, relname);
LockRelationOid(relid, ExclusiveLock);
static void
bdr_sequencer_lock(void)
{
-
- bdr_sequencer_lock_rel("bdr_sequence_elections");
- bdr_sequencer_lock_rel("bdr_sequence_values");
- bdr_sequencer_lock_rel("bdr_votes");
+ bdr_sequencer_lock_rel("bdr_sequence_elections", BdrSequenceElectionsRelid);
+ bdr_sequencer_lock_rel("bdr_sequence_values", BdrSequenceValuesRelid);
+ bdr_sequencer_lock_rel("bdr_votes", BdrVotesRelid);
}
void