diff options
author | Kevin Grittner <kgrittn@postgresql.org> | 2016-06-03 11:13:28 -0500 |
---|---|---|
committer | Kevin Grittner <kgrittn@postgresql.org> | 2016-06-03 11:13:28 -0500 |
commit | 370a46fc015115bfeccde4eb208d82049f792f9f (patch) | |
tree | 8759f7d23084d2d3d8fa1a92f2b7fde968bb7726 | |
parent | 6436a853f11952495f10e62d8b52b465e119155c (diff) | |
download | postgresql-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.c | 6 |
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) |