From: Christian Kruse Date: Wed, 26 Mar 2014 10:06:53 +0000 (+0100) Subject: bdr: refactored use Oids to identify and refer to relations X-Git-Url: http://waps.l3s.uni-hannover.de/gitweb/?a=commitdiff_plain;h=63ba4ade9c67dc0644192c753af424218365c3a5;p=users%2Fandresfreund%2Fpostgres.git bdr: refactored use Oids to identify and refer to relations --- diff --git a/contrib/bdr/bdr.c b/contrib/bdr/bdr.c index c5b4dbf3a4..6ba4628645 100644 --- a/contrib/bdr/bdr.c +++ b/contrib/bdr/bdr.c @@ -833,6 +833,19 @@ out: 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. @@ -886,9 +899,19 @@ bdr_maintain_schema(void) 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); diff --git a/contrib/bdr/bdr.h b/contrib/bdr/bdr.h index dbb4f79798..6951fd61a4 100644 --- a/contrib/bdr/bdr.h +++ b/contrib/bdr/bdr.h @@ -51,6 +51,11 @@ extern BDRSequencerCon *bdr_sequencer_con; /* 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); diff --git a/contrib/bdr/bdr_apply.c b/contrib/bdr/bdr_apply.c index febb5146bc..67ffcc519a 100644 --- a/contrib/bdr/bdr_apply.c +++ b/contrib/bdr/bdr_apply.c @@ -732,9 +732,11 @@ process_remote_delete(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; } diff --git a/contrib/bdr/bdr_seq.c b/contrib/bdr/bdr_seq.c index b04579a9ee..b4a853196b 100644 --- a/contrib/bdr/bdr_seq.c +++ b/contrib/bdr/bdr_seq.c @@ -56,6 +56,11 @@ typedef struct BdrSequenceValues { 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 */ @@ -543,16 +548,8 @@ bdr_sequencer_init(void) } 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); @@ -561,10 +558,9 @@ bdr_sequencer_lock_rel(char *relname) 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