bdr: refactored use Oids to identify and refer to relations
authorChristian Kruse <cjk@defunct.ch>
Wed, 26 Mar 2014 10:06:53 +0000 (11:06 +0100)
committerAndres Freund <andres@anarazel.de>
Thu, 3 Jul 2014 15:55:21 +0000 (17:55 +0200)
contrib/bdr/bdr.c
contrib/bdr/bdr.h
contrib/bdr/bdr_apply.c
contrib/bdr/bdr_seq.c

index c5b4dbf3a41705fce27f59110e6f8e8400c3ff20..6ba46286454dca4bb64af880c9f59eb68cc80a11 100644 (file)
@@ -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);
 
index dbb4f79798036c0072b813e97531939c82e1677f..6951fd61a4380e739a96e0a4336c8c76873ae506 100644 (file)
@@ -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);
index febb5146bc7ca1b2eca13783079355970d05139d..67ffcc519af180e1d7335cd0bf5c3975d4510acd 100644 (file)
@@ -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;
 }
 
index b04579a9ee740cbcb13d598b12d071b17e8c96a3..b4a853196beb0b4609617682c438428086655196 100644 (file)
@@ -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