bdr: Introduce bdr_get_local_nodeid()
authorCraig Ringer <craig@2ndquadrant.com>
Thu, 20 Nov 2014 06:21:28 +0000 (14:21 +0800)
committerCraig Ringer <craig@2ndquadrant.com>
Wed, 4 Feb 2015 12:24:24 +0000 (23:24 +1100)
Makefile.in
bdr--0.8.0.5--0.8.0.6.sql [new file with mode: 0644]
bdr.c
bdr.control
expected/identifier.out [new file with mode: 0644]
expected/upgrade.out
sql/identifier.sql [new file with mode: 0644]
sql/upgrade.sql

index cf5b351e645b47e9b5ba34d4147c8ecb9947af00..eb41c8b2ee6548b200015bd399bf387533bbab99 100644 (file)
@@ -11,10 +11,11 @@ DATA = bdr--0.8.0.sql \
    bdr--0.8.0.1--0.8.0.2.sql \
    bdr--0.8.0.2--0.8.0.3.sql \
    bdr--0.8.0.3--0.8.0.4.sql \
-   bdr--0.8.0.4--0.8.0.5.sql
+   bdr--0.8.0.4--0.8.0.5.sql \
+   bdr--0.8.0.5--0.8.0.6.sql
 
 DATA_built = bdr--0.8.0.1.sql bdr--0.8.0.2.sql  bdr--0.8.0.3.sql \
-   bdr--0.8.0.4.sql bdr--0.8.0.5.sql
+   bdr--0.8.0.4.sql bdr--0.8.0.5.sql bdr--0.8.0.6.sql
 
 DOCS = bdr.conf.sample README.bdr
 SCRIPTS = scripts/bdr_initial_load bdr_init_copy bdr_resetxlog bdr_dump
@@ -113,6 +114,12 @@ bdr--0.8.0.5.sql: bdr--0.8.0.sql bdr--0.8.0--0.8.0.1.sql \
    bdr--0.8.0.3--0.8.0.4.sql bdr--0.8.0.4--0.8.0.5.sql
    cat $^ > $@
 
+bdr--0.8.0.6.sql: bdr--0.8.0.sql bdr--0.8.0--0.8.0.1.sql \
+   bdr--0.8.0.1--0.8.0.2.sql bdr--0.8.0.2--0.8.0.3.sql \
+   bdr--0.8.0.3--0.8.0.4.sql bdr--0.8.0.4--0.8.0.5.sql \
+   bdr--0.8.0.5--0.8.0.6.sql
+   cat $^ > $@
+
 bdr_resetxlog: pg_resetxlog.o
    $(CC) $(CFLAGS) $^ $(LDFLAGS) $(LDFLAGS_EX) $(libpq_pgport) $(LIBS) -o $@$(X)
 
@@ -162,6 +169,7 @@ endif
 REGRESSCHECKS= \
    init \
    upgrade \
+   identifier \
    $(DDLREGRESSCHECKS) \
    dml/basic dml/contrib dml/delete_pk dml/extended dml/missing_pk dml/toasted
 
diff --git a/bdr--0.8.0.5--0.8.0.6.sql b/bdr--0.8.0.5--0.8.0.6.sql
new file mode 100644 (file)
index 0000000..53b4f7c
--- /dev/null
@@ -0,0 +1,12 @@
+SET LOCAL search_path = bdr;
+SET bdr.permit_unsafe_ddl_commands = true;
+SET bdr.skip_ddl_replication = true;
+
+CREATE FUNCTION bdr_get_local_nodeid( sysid OUT oid, timeline OUT oid, dboid OUT oid)
+RETURNS record LANGUAGE c AS 'MODULE_PATHNAME';
+
+-- bdr_get_local_nodeid is intentionally not revoked from all, it's read-only
+
+RESET bdr.permit_unsafe_ddl_commands;
+RESET bdr.skip_ddl_replication;
+RESET search_path;
diff --git a/bdr.c b/bdr.c
index 1e62196700e0efd1afb2228466ade72e274b0dd9..913f6d0034e6da3a44c3b90b32620ba4c130ffdf 100644 (file)
--- a/bdr.c
+++ b/bdr.c
@@ -110,11 +110,13 @@ Datum bdr_apply_pause(PG_FUNCTION_ARGS);
 Datum bdr_apply_resume(PG_FUNCTION_ARGS);
 Datum bdr_version(PG_FUNCTION_ARGS);
 Datum bdr_variant(PG_FUNCTION_ARGS);
+Datum bdr_get_local_nodeid(PG_FUNCTION_ARGS);
 
 PG_FUNCTION_INFO_V1(bdr_apply_pause);
 PG_FUNCTION_INFO_V1(bdr_apply_resume);
 PG_FUNCTION_INFO_V1(bdr_version);
 PG_FUNCTION_INFO_V1(bdr_variant);
+PG_FUNCTION_INFO_V1(bdr_get_local_nodeid);
 
 static void
 bdr_sigterm(SIGNAL_ARGS)
@@ -1591,3 +1593,24 @@ bdr_variant(PG_FUNCTION_ARGS)
 {
    PG_RETURN_TEXT_P(cstring_to_text(BDR_VARIANT));
 }
+
+/* Return a tuple of (sysid oid, tlid oid, dboid oid) */
+Datum
+bdr_get_local_nodeid(PG_FUNCTION_ARGS)
+{
+   Datum       values[3];
+   bool        isnull[3] = {false, false, false};
+   TupleDesc   tupleDesc;
+   HeapTuple   returnTuple;
+
+   if (get_call_result_type(fcinfo, NULL, &tupleDesc) != TYPEFUNC_COMPOSITE)
+       elog(ERROR, "return type must be a row type");
+
+   values[0] = ObjectIdGetDatum(GetSystemIdentifier());
+   values[1] = ObjectIdGetDatum(ThisTimeLineID);
+   values[2] = ObjectIdGetDatum(MyDatabaseId);
+
+   returnTuple = heap_form_tuple(tupleDesc, values, isnull);
+
+   PG_RETURN_DATUM(HeapTupleGetDatum(returnTuple));
+}
index 659f65ebe924f3bee24fbf4a35f604a18e2c2683..c4758fe4b14356e9e7ed820dfc90f0c30bea35e9 100644 (file)
@@ -1,6 +1,6 @@
 # bdr extension
 comment = 'bdr support functions'
-default_version = '0.8.0.5'
+default_version = '0.8.0.6'
 module_pathname = '$libdir/bdr'
 relocatable = false
 requires = btree_gist
diff --git a/expected/identifier.out b/expected/identifier.out
new file mode 100644 (file)
index 0000000..2d2e38b
--- /dev/null
@@ -0,0 +1,8 @@
+-- No real way to test the sysid, so ignore it
+SELECT timeline= 1, dboid = (SELECT oid FROM pg_database WHERE datname = current_database())
+FROM bdr.bdr_get_local_nodeid();
+ ?column? | ?column? 
+----------+----------
+ t        | t
+(1 row)
+
index 2491449c37cfaa83450ad46e407785e5f6a967bf..55fc27972c94895496c02d0ceead0068143b8f22 100644 (file)
@@ -19,6 +19,8 @@ CREATE EXTENSION bdr VERSION '0.8.0.4';
 DROP EXTENSION bdr;
 CREATE EXTENSION bdr VERSION '0.8.0.5';
 DROP EXTENSION bdr;
+CREATE EXTENSION bdr VERSION '0.8.0.6';
+DROP EXTENSION bdr;
 -- evolve version one by one from the oldest to the newest one
 CREATE EXTENSION bdr VERSION '0.8.0';
 ALTER EXTENSION bdr UPDATE TO '0.8.0.1';
@@ -26,8 +28,9 @@ ALTER EXTENSION bdr UPDATE TO '0.8.0.2';
 ALTER EXTENSION bdr UPDATE TO '0.8.0.3';
 ALTER EXTENSION bdr UPDATE TO '0.8.0.4';
 ALTER EXTENSION bdr UPDATE TO '0.8.0.5';
+ALTER EXTENSION bdr UPDATE TO '0.8.0.6';
 -- Should never have to do anything: You missed adding the new version above.
 ALTER EXTENSION bdr UPDATE;
-NOTICE:  version "0.8.0.5" of extension "bdr" is already installed
+NOTICE:  version "0.8.0.6" of extension "bdr" is already installed
 \c postgres
 DROP DATABASE extension_upgrade;
diff --git a/sql/identifier.sql b/sql/identifier.sql
new file mode 100644 (file)
index 0000000..4d73aec
--- /dev/null
@@ -0,0 +1,3 @@
+-- No real way to test the sysid, so ignore it
+SELECT timeline= 1, dboid = (SELECT oid FROM pg_database WHERE datname = current_database())
+FROM bdr.bdr_get_local_nodeid();
index 2599d0f28f46267f11639e23f8932e6a146f6bfe..4275ffa25ad3493789c9d425717b10a3de4d644a 100644 (file)
@@ -27,6 +27,9 @@ DROP EXTENSION bdr;
 CREATE EXTENSION bdr VERSION '0.8.0.5';
 DROP EXTENSION bdr;
 
+CREATE EXTENSION bdr VERSION '0.8.0.6';
+DROP EXTENSION bdr;
+
 -- evolve version one by one from the oldest to the newest one
 CREATE EXTENSION bdr VERSION '0.8.0';
 ALTER EXTENSION bdr UPDATE TO '0.8.0.1';
@@ -34,6 +37,7 @@ ALTER EXTENSION bdr UPDATE TO '0.8.0.2';
 ALTER EXTENSION bdr UPDATE TO '0.8.0.3';
 ALTER EXTENSION bdr UPDATE TO '0.8.0.4';
 ALTER EXTENSION bdr UPDATE TO '0.8.0.5';
+ALTER EXTENSION bdr UPDATE TO '0.8.0.6';
 
 
 -- Should never have to do anything: You missed adding the new version above.