Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit83cb7da

Browse files
committed
Fix bug in wasender's xlogid boundary handling, reported by Erik Rijkers.
LogwrtRqst.Write can be set to non-existent FF log segment, we mustn'ttry to send that in XLogSend().Also fix similar bug in ReadRecord(), which I just introduced in theReadRecord() refactoring patch.
1 parent1bb2558 commit83cb7da

File tree

2 files changed

+21
-5
lines changed

2 files changed

+21
-5
lines changed

‎src/backend/access/transam/xlog.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* Portions Copyright (c) 1996-2010, PostgreSQL Global Development Group
88
* Portions Copyright (c) 1994, Regents of the University of California
99
*
10-
* $PostgreSQL: pgsql/src/backend/access/transam/xlog.c,v 1.362 2010/01/2715:27:50 heikki Exp $
10+
* $PostgreSQL: pgsql/src/backend/access/transam/xlog.c,v 1.363 2010/01/2716:41:09 heikki Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -3574,6 +3574,12 @@ ReadRecord(XLogRecPtr *RecPtr, int emode_arg, bool fetching_ckpt)
35743574
NextLogPage(tmpRecPtr);
35753575
/* We will account for page header size below */
35763576
}
3577+
3578+
if (tmpRecPtr.xrecoff >=XLogFileSize)
3579+
{
3580+
(tmpRecPtr.xlogid)++;
3581+
tmpRecPtr.xrecoff=0;
3582+
}
35773583
}
35783584
else
35793585
{

‎src/backend/replication/walsender.c

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
*
3131
*
3232
* IDENTIFICATION
33-
* $PostgreSQL: pgsql/src/backend/replication/walsender.c,v 1.3 2010/01/21 08:19:57 heikki Exp $
33+
* $PostgreSQL: pgsql/src/backend/replication/walsender.c,v 1.4 2010/01/27 16:41:09 heikki Exp $
3434
*
3535
*-------------------------------------------------------------------------
3636
*/
@@ -610,8 +610,8 @@ XLogSend(StringInfo outMsg)
610610
return true;
611611

612612
/*
613-
* We gather multiple records together by issuing just oneread() of
614-
* a suitable size, and send them as one CopyData message. Repeat
613+
* We gather multiple records together by issuing just oneXLogRead()
614+
*ofa suitable size, and send them as one CopyData message. Repeat
615615
* until we've sent everything we can.
616616
*/
617617
while (XLByteLT(sentPtr,SendRqstPtr))
@@ -628,11 +628,21 @@ XLogSend(StringInfo outMsg)
628628
* The rounding is not only for performance reasons. Walreceiver
629629
* relies on the fact that we never split a WAL record across two
630630
* messages. Since a long WAL record is split at page boundary into
631-
* continuation records, page boundary isalwayssafe cut-off point.
631+
* continuation records, page boundary isalways a safe cut-off point.
632632
* We also assume that SendRqstPtr never points in the middle of a
633633
* WAL record.
634634
*/
635635
startptr=sentPtr;
636+
if (startptr.xrecoff >=XLogFileSize)
637+
{
638+
/*
639+
* crossing a logid boundary, skip the non-existent last log
640+
* segment in previous logical log file.
641+
*/
642+
startptr.xlogid+=1;
643+
startptr.xrecoff=0;
644+
}
645+
636646
endptr=startptr;
637647
XLByteAdvance(endptr,MAX_SEND_SIZE);
638648
/* round down to page boundary. */

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp