aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin Grittner <kgrittn@postgresql.org>2016-06-03 11:13:28 -0500
committerKevin Grittner <kgrittn@postgresql.org>2016-06-03 11:13:28 -0500
commit370a46fc015115bfeccde4eb208d82049f792f9f (patch)
tree8759f7d23084d2d3d8fa1a92f2b7fde968bb7726
parent6436a853f11952495f10e62d8b52b465e119155c (diff)
downloadpostgresql-370a46fc015115bfeccde4eb208d82049f792f9f.tar.gz
postgresql-370a46fc015115bfeccde4eb208d82049f792f9f.zip
Add new snapshot fields to serialize/deserialize functions.
The "snapshot too old" condition was not being recognized when using a copied snapshot, since the original timestamp and lsn were not being passed along. Noticed when testing the combination of "snapshot too old" with parallel query execution.
-rw-r--r--src/backend/utils/time/snapmgr.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/backend/utils/time/snapmgr.c b/src/backend/utils/time/snapmgr.c
index db85cf6f32c..3a3d9845f3b 100644
--- a/src/backend/utils/time/snapmgr.c
+++ b/src/backend/utils/time/snapmgr.c
@@ -239,6 +239,8 @@ typedef struct SerializedSnapshotData
bool suboverflowed;
bool takenDuringRecovery;
CommandId curcid;
+ int64 whenTaken;
+ XLogRecPtr lsn;
} SerializedSnapshotData;
Size
@@ -1936,6 +1938,8 @@ SerializeSnapshot(Snapshot snapshot, char *start_address)
serialized_snapshot->suboverflowed = snapshot->suboverflowed;
serialized_snapshot->takenDuringRecovery = snapshot->takenDuringRecovery;
serialized_snapshot->curcid = snapshot->curcid;
+ serialized_snapshot->whenTaken = snapshot->whenTaken;
+ serialized_snapshot->lsn = snapshot->lsn;
/*
* Ignore the SubXID array if it has overflowed, unless the snapshot was
@@ -2002,6 +2006,8 @@ RestoreSnapshot(char *start_address)
snapshot->suboverflowed = serialized_snapshot->suboverflowed;
snapshot->takenDuringRecovery = serialized_snapshot->takenDuringRecovery;
snapshot->curcid = serialized_snapshot->curcid;
+ snapshot->whenTaken = serialized_snapshot->whenTaken;
+ snapshot->lsn = serialized_snapshot->lsn;
/* Copy XIDs, if present. */
if (serialized_snapshot->xcnt > 0)