]> granicus.if.org Git - postgresql/commitdiff
Mark correctly initial slot snapshots with MVCC type when built
authorMichael Paquier <michael@paquier.xyz>
Wed, 20 Feb 2019 03:31:07 +0000 (12:31 +0900)
committerMichael Paquier <michael@paquier.xyz>
Wed, 20 Feb 2019 03:31:07 +0000 (12:31 +0900)
When building an initial slot snapshot, snapshots are marked with
historic MVCC snapshots as type with the marker field being set in
SnapBuildBuildSnapshot() but not overriden in SnapBuildInitialSnapshot().
Existing callers of SnapBuildBuildSnapshot() do not care about the type
of snapshot used, but extensions calling it actually may, as reported.

While on it, mark correctly the snapshot type when importing one.  This
is cosmetic as the field is enforced to 0.

Author: Antonin Houska
Reviewed-by: Álvaro Herrera, Michael Paquier
Discussion: https://postgr.es/m/23215.1527665193@localhost
Backpatch-through: 9.4

src/backend/replication/logical/snapbuild.c
src/backend/utils/time/snapmgr.c

index ad44b2bf43c9c260e46e55fa40e0a690e95e9239..a59896f0825424a91969d08ec13af1bb1f0495f0 100644 (file)
@@ -616,6 +616,8 @@ SnapBuildInitialSnapshot(SnapBuild *builder)
                TransactionIdAdvance(xid);
        }
 
+       /* adjust remaining snapshot fields as needed */
+       snap->snapshot_type = SNAPSHOT_MVCC;
        snap->xcnt = newxcnt;
        snap->xip = newxip;
 
index 6e02585e10e50f7ae53d0744ff8f88bc9d6fa6a5..3b442935bb65368161a3c423af6ae0adbecf9bab 100644 (file)
@@ -1509,6 +1509,8 @@ ImportSnapshot(const char *idstr)
        src_isolevel = parseIntFromText("iso:", &filebuf, path);
        src_readonly = parseIntFromText("ro:", &filebuf, path);
 
+       snapshot.snapshot_type = SNAPSHOT_MVCC;
+
        snapshot.xmin = parseXidFromText("xmin:", &filebuf, path);
        snapshot.xmax = parseXidFromText("xmax:", &filebuf, path);