mirror of
https://github.com/postgres/postgres.git
synced 2025-11-10 17:42:29 +03:00
Replace XLogRecPtr struct with a 64-bit integer.
This simplifies code that needs to do arithmetic on XLogRecPtrs. To avoid changing on-disk format of data pages, the LSN on data pages is still stored in the old format. That should keep pg_upgrade happy. However, we have XLogRecPtrs embedded in the control file, and in the structs that are sent over the replication protocol, so this changes breaks compatibility of pg_basebackup and server. I didn't do anything about this in this patch, per discussion on -hackers, the right thing to do would to be to change the replication protocol to be architecture-independent, so that you could use a newer version of pg_receivexlog, for example, against an older server version.
This commit is contained in:
@@ -516,7 +516,7 @@ XLogWalRcvWrite(char *buf, Size nbytes, XLogRecPtr recptr)
|
||||
}
|
||||
|
||||
/* Calculate the start offset of the received logs */
|
||||
startoff = recptr.xrecoff % XLogSegSize;
|
||||
startoff = recptr % XLogSegSize;
|
||||
|
||||
if (startoff + nbytes > XLogSegSize)
|
||||
segbytes = XLogSegSize - startoff;
|
||||
@@ -601,8 +601,8 @@ XLogWalRcvFlush(bool dying)
|
||||
char activitymsg[50];
|
||||
|
||||
snprintf(activitymsg, sizeof(activitymsg), "streaming %X/%X",
|
||||
LogstreamResult.Write.xlogid,
|
||||
LogstreamResult.Write.xrecoff);
|
||||
(uint32) (LogstreamResult.Write >> 32),
|
||||
(uint32) LogstreamResult.Write);
|
||||
set_ps_display(activitymsg, false);
|
||||
}
|
||||
|
||||
@@ -657,9 +657,9 @@ XLogWalRcvSendReply(void)
|
||||
reply_message.sendTime = now;
|
||||
|
||||
elog(DEBUG2, "sending write %X/%X flush %X/%X apply %X/%X",
|
||||
reply_message.write.xlogid, reply_message.write.xrecoff,
|
||||
reply_message.flush.xlogid, reply_message.flush.xrecoff,
|
||||
reply_message.apply.xlogid, reply_message.apply.xrecoff);
|
||||
(uint32) (reply_message.write >> 32), (uint32) reply_message.write,
|
||||
(uint32) (reply_message.flush >> 32), (uint32) reply_message.flush,
|
||||
(uint32) (reply_message.apply >> 32), (uint32) reply_message.apply);
|
||||
|
||||
/* Prepend with the message type and send it. */
|
||||
buf[0] = 'r';
|
||||
|
||||
Reference in New Issue
Block a user