Fix bdr.bdr_replication_identifier table definition
authorPetr Jelinek <pjmodos@pjmodos.net>
Wed, 1 Apr 2015 16:45:54 +0000 (18:45 +0200)
committerPetr Jelinek <pjmodos@pjmodos.net>
Wed, 1 Apr 2015 16:46:40 +0000 (18:46 +0200)
The bdr.bdr_replication_identifier was mistakenly defined in extension
SQL file with two additonal columns, but the C code didn't expect them
this lead to memory corruption. It was identified by make check failures
with clang compiler.

Makefile.in
bdr_replication_identifier.c
expected/upgrade.out
extsql/bdr--0.9.0.3--0.9.0.4.sql [new file with mode: 0644]
extsql/bdr--0.9.0.4--0.10.0.0.sql [moved from extsql/bdr--0.9.0.3--0.10.0.0.sql with 100% similarity]
sql/upgrade.sql

index 55faf1b78179835551e43d14f627c42fae4de71f..738e5cfdd5a212a0c99528f5485c4b371d969676 100644 (file)
@@ -24,7 +24,8 @@ DATA = \
    extsql/bdr--0.9.0.0--0.9.0.1.sql \
    extsql/bdr--0.9.0.1--0.9.0.2.sql \
    extsql/bdr--0.9.0.2--0.9.0.3.sql \
-   extsql/bdr--0.9.0.3--0.10.0.0.sql
+   extsql/bdr--0.9.0.3--0.9.0.4.sql \
+   extsql/bdr--0.9.0.4--0.10.0.0.sql
 
 DATA_built = \
    extsql/bdr--0.8.0.1.sql \
@@ -38,6 +39,7 @@ DATA_built = \
    extsql/bdr--0.9.0.1.sql \
    extsql/bdr--0.9.0.2.sql \
    extsql/bdr--0.9.0.3.sql \
+   extsql/bdr--0.9.0.4.sql \
    extsql/bdr--0.10.0.0.sql
 
 DOCS = bdr.conf.sample README.bdr
@@ -161,7 +163,11 @@ extsql/bdr--0.9.0.3.sql: extsql/bdr--0.9.0.2.sql extsql/bdr--0.9.0.2--0.9.0.3.sq
    mkdir -p extsql
    cat $^ > $@
 
-extsql/bdr--0.10.0.0.sql: extsql/bdr--0.9.0.3.sql extsql/bdr--0.9.0.3--0.10.0.0.sql
+extsql/bdr--0.9.0.4.sql: extsql/bdr--0.9.0.3.sql extsql/bdr--0.9.0.3--0.9.0.4.sql
+   mkdir -p extsql
+   cat $^ > $@
+
+extsql/bdr--0.10.0.0.sql: extsql/bdr--0.9.0.4.sql extsql/bdr--0.9.0.4--0.10.0.0.sql
    mkdir -p extsql
    cat $^ > $@
 
index 7c3870e75aeca8d4411d1fd606937953a5cd6fb9..7423b2c14826b16a02ac4278bd2e4239f31b8b7e 100644 (file)
@@ -157,7 +157,7 @@ GetReplicationIdentifier(char *riname, bool missing_ok)
 
        heap_deform_tuple(tuple, RelationGetDescr(rel),
                          values, nulls);
-       riident = DatumGetObjectId(values[0]);
+       riident = DatumGetObjectId(values[Anum_pg_replication_riident - 1]);
 
    }
    else if (!missing_ok)
index 005912309c15d7b1c64ff81e6c30af09d7fd5174..de2283efe4ba2f755127e1b7efbbea46d50a20d3 100644 (file)
@@ -31,6 +31,8 @@ CREATE EXTENSION bdr VERSION '0.9.0.2';
 DROP EXTENSION bdr;
 CREATE EXTENSION bdr VERSION '0.9.0.3';
 DROP EXTENSION bdr;
+CREATE EXTENSION bdr VERSION '0.9.0.4';
+DROP EXTENSION bdr;
 CREATE EXTENSION bdr VERSION '0.10.0.0';
 DROP EXTENSION bdr;
 -- evolve version one by one from the oldest to the newest one
@@ -46,6 +48,7 @@ ALTER EXTENSION bdr UPDATE TO '0.9.0.0';
 ALTER EXTENSION bdr UPDATE TO '0.9.0.1';
 ALTER EXTENSION bdr UPDATE TO '0.9.0.2';
 ALTER EXTENSION bdr UPDATE TO '0.9.0.3';
+ALTER EXTENSION bdr UPDATE TO '0.9.0.4';
 ALTER EXTENSION bdr UPDATE TO '0.10.0.0';
 -- Should never have to do anything: You missed adding the new version above.
 ALTER EXTENSION bdr UPDATE;
diff --git a/extsql/bdr--0.9.0.3--0.9.0.4.sql b/extsql/bdr--0.9.0.3--0.9.0.4.sql
new file mode 100644 (file)
index 0000000..4cac283
--- /dev/null
@@ -0,0 +1,32 @@
+-- Data structures for BDR's dynamic configuration management
+
+SET LOCAL search_path = bdr;
+SET bdr.permit_unsafe_ddl_commands = true;
+SET bdr.skip_ddl_replication = true;
+
+---
+--- Replication identifier emulation
+---
+DO $DO$BEGIN
+IF bdr.bdr_variant() = 'UDR' THEN
+
+   ALTER TABLE bdr.bdr_replication_identifier RENAME TO bdr_replication_identifier_old;
+   CREATE TABLE bdr.bdr_replication_identifier (
+       riident oid NOT NULL,
+       riname text
+   );
+   INSERT INTO bdr.bdr_replication_identifier SELECT riident, riname FROM bdr.bdr_replication_identifier_old;
+
+   DROP TABLE bdr.bdr_replication_identifier_old;
+
+   PERFORM pg_catalog.pg_extension_config_dump('bdr_replication_identifier', '');
+   CREATE UNIQUE INDEX bdr_replication_identifier_riiident_index ON bdr.bdr_replication_identifier(riident);
+   CREATE UNIQUE INDEX bdr_replication_identifier_riname_index ON bdr.bdr_replication_identifier(riname varchar_pattern_ops);
+
+END IF;
+END;$DO$;
+
+
+RESET bdr.permit_unsafe_ddl_commands;
+RESET bdr.skip_ddl_replication;
+RESET search_path;
index a31af188c58e9a1efac521bfe444b89aa1ab37eb..b3a195fec1ef66ffdbd0efdfe248ca80111a1e3f 100644 (file)
@@ -45,6 +45,9 @@ DROP EXTENSION bdr;
 CREATE EXTENSION bdr VERSION '0.9.0.3';
 DROP EXTENSION bdr;
 
+CREATE EXTENSION bdr VERSION '0.9.0.4';
+DROP EXTENSION bdr;
+
 CREATE EXTENSION bdr VERSION '0.10.0.0';
 DROP EXTENSION bdr;
 
@@ -61,6 +64,7 @@ ALTER EXTENSION bdr UPDATE TO '0.9.0.0';
 ALTER EXTENSION bdr UPDATE TO '0.9.0.1';
 ALTER EXTENSION bdr UPDATE TO '0.9.0.2';
 ALTER EXTENSION bdr UPDATE TO '0.9.0.3';
+ALTER EXTENSION bdr UPDATE TO '0.9.0.4';
 ALTER EXTENSION bdr UPDATE TO '0.10.0.0';