Received: from malur.postgresql.org ([2a02:16a8:dc51::56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1fcELi-0005xk-IJ for pgsql-hackers@arkaria.postgresql.org; Sun, 08 Jul 2018 18:23:54 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1fcELh-0007VW-07 for pgsql-hackers@arkaria.postgresql.org; Sun, 08 Jul 2018 18:23:53 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1fcELg-0007VP-M8 for pgsql-hackers@lists.postgresql.org; Sun, 08 Jul 2018 18:23:52 +0000 Received: from out1-smtp.messagingengine.com ([66.111.4.25]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1fcELd-0006Ri-Oq for pgsql-hackers@postgresql.org; Sun, 08 Jul 2018 18:23:51 +0000 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailout.nyi.internal (Postfix) with ESMTP id CAC3E21785; Sun, 8 Jul 2018 14:23:48 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute4.internal (MEProxy); Sun, 08 Jul 2018 14:23:48 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:content-type :date:from:message-id:mime-version:subject:to:x-me-sender :x-me-sender:x-sasl-enc; s=fm3; bh=BXmyF0Tg9tGRWywbcdmuOb/U26HcU q1QWfEZLDNB4wc=; b=pOpY1hSATAxnvYTeP9PnGKFuvvS+g4ma14tADSS1CCRMe i6+7U6r/XwuaIM65x2tclMdpA8zBpyr0snvSUpyubqLxr8PfZErIqVPoWMGPGgxH uzFOARwhQH4b2FJwU8HzT27F9/ElDMeyqBQp6uuqlvw/AxWtef3EZdx66e64WaeG HDlsv+VuLpG/RJJOuuq4+QIVjZPQiHK4fzlDWwwaSBqkIJ++A2aeAG74D2TuV7hq x8cIBOE4LAYEp76gXevQqBz6U9SqJAQir214N/W6yeDNVtnmkqNLPoonzhOe8zJT LWtyyEnZp3fMFi8krUIp50gTh7wZtN8e/khEUzWMA== X-ME-Proxy: X-ME-Sender: Received: from alvin.alvh.no-ip.org (unknown [201.186.80.250]) by mail.messagingengine.com (Postfix) with ESMTPA id BAC041025D; Sun, 8 Jul 2018 14:23:47 -0400 (EDT) Received: by alvin.alvh.no-ip.org (Postfix, from userid 1000) id E6BE8454; Sun, 8 Jul 2018 14:23:45 -0400 (-04) Date: Sun, 8 Jul 2018 14:23:45 -0400 From: Alvaro Herrera To: Pg Hackers Cc: Andres Freund Subject: XLogSegNoOffsetToRecPtr fixup Message-ID: <20180708182345.imdgovmkffgtihhk@alvherre.pgsql> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="3yl44ksfinn6kemu" Content-Disposition: inline Content-Transfer-Encoding: 8bit User-Agent: NeoMutt/20170306-137-4415bd-dirty (1.8.0) List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --3yl44ksfinn6kemu Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit Pursuant to closing comment in https://postgr.es/m/20180306214239.ospkf6ie7aa5gm4j@alvherre.pgsql here's a quick patch to change the order of arguments in XLogSegNoOffsetToRecPtr. Commit fc49e24fa69a ("Make WAL segment size configurable at initdb time.") put the walsegsz as last argument, *after* its output argument, which is downright weird. I propose to apply this to pg11 and master, to avoid an unnecessary API change in pg12. -- Álvaro Herrera http://www.flickr.com/photos/alvherre/ --3yl44ksfinn6kemu Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="XLogSegNoOffsetToRecPtr.patch" diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index d6b5b05425..f251989f0b 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -1971,7 +1971,7 @@ XLogBytePosToRecPtr(uint64 bytepos) seg_offset += fullpages * XLOG_BLCKSZ + bytesleft + SizeOfXLogShortPHD; } - XLogSegNoOffsetToRecPtr(fullsegs, seg_offset, result, wal_segment_size); + XLogSegNoOffsetToRecPtr(fullsegs, seg_offset, wal_segment_size, result); return result; } @@ -2017,7 +2017,7 @@ XLogBytePosToEndRecPtr(uint64 bytepos) seg_offset += fullpages * XLOG_BLCKSZ + bytesleft + SizeOfXLogShortPHD; } - XLogSegNoOffsetToRecPtr(fullsegs, seg_offset, result, wal_segment_size); + XLogSegNoOffsetToRecPtr(fullsegs, seg_offset, wal_segment_size, result); return result; } diff --git a/src/backend/access/transam/xlogreader.c b/src/backend/access/transam/xlogreader.c index dd96cef8f0..4c633c6c49 100644 --- a/src/backend/access/transam/xlogreader.c +++ b/src/backend/access/transam/xlogreader.c @@ -747,7 +747,7 @@ XLogReaderValidatePageHeader(XLogReaderState *state, XLogRecPtr recptr, XLByteToSeg(recptr, segno, state->wal_segment_size); offset = XLogSegmentOffset(recptr, state->wal_segment_size); - XLogSegNoOffsetToRecPtr(segno, offset, recaddr, state->wal_segment_size); + XLogSegNoOffsetToRecPtr(segno, offset, state->wal_segment_size, recaddr); if (hdr->xlp_magic != XLOG_PAGE_MAGIC) { diff --git a/src/backend/replication/logical/reorderbuffer.c b/src/backend/replication/logical/reorderbuffer.c index d3ec137051..9b55b94227 100644 --- a/src/backend/replication/logical/reorderbuffer.c +++ b/src/backend/replication/logical/reorderbuffer.c @@ -2782,7 +2782,7 @@ ReorderBufferSerializedPath(char *path, ReplicationSlot *slot, TransactionId xid { XLogRecPtr recptr; - XLogSegNoOffsetToRecPtr(segno, 0, recptr, wal_segment_size); + XLogSegNoOffsetToRecPtr(segno, 0, wal_segment_size, recptr); snprintf(path, MAXPGPATH, "pg_replslot/%s/xid-%u-lsn-%X-%X.snap", NameStr(MyReplicationSlot->data.name), diff --git a/src/bin/pg_basebackup/pg_receivewal.c b/src/bin/pg_basebackup/pg_receivewal.c index 071b32d19d..ed9d7f6378 100644 --- a/src/bin/pg_basebackup/pg_receivewal.c +++ b/src/bin/pg_basebackup/pg_receivewal.c @@ -352,7 +352,7 @@ FindStreamingStart(uint32 *tli) if (!high_ispartial) high_segno++; - XLogSegNoOffsetToRecPtr(high_segno, 0, high_ptr, WalSegSz); + XLogSegNoOffsetToRecPtr(high_segno, 0, WalSegSz, high_ptr); *tli = high_tli; return high_ptr; diff --git a/src/bin/pg_resetwal/pg_resetwal.c b/src/bin/pg_resetwal/pg_resetwal.c index 8cff535692..d63a3a27f6 100644 --- a/src/bin/pg_resetwal/pg_resetwal.c +++ b/src/bin/pg_resetwal/pg_resetwal.c @@ -933,8 +933,8 @@ RewriteControlFile(void) * Adjust fields as needed to force an empty XLOG starting at * newXlogSegNo. */ - XLogSegNoOffsetToRecPtr(newXlogSegNo, SizeOfXLogLongPHD, - ControlFile.checkPointCopy.redo, WalSegSz); + XLogSegNoOffsetToRecPtr(newXlogSegNo, SizeOfXLogLongPHD, WalSegSz, + ControlFile.checkPointCopy.redo); ControlFile.checkPointCopy.time = (pg_time_t) time(NULL); ControlFile.state = DB_SHUTDOWNED; diff --git a/src/bin/pg_rewind/parsexlog.c b/src/bin/pg_rewind/parsexlog.c index b4c1f827a6..1689279767 100644 --- a/src/bin/pg_rewind/parsexlog.c +++ b/src/bin/pg_rewind/parsexlog.c @@ -248,7 +248,7 @@ SimpleXLogPageRead(XLogReaderState *xlogreader, XLogRecPtr targetPagePtr, XLogSegNo targetSegNo; XLByteToSeg(targetPagePtr, targetSegNo, WalSegSz); - XLogSegNoOffsetToRecPtr(targetSegNo + 1, 0, targetSegEnd, WalSegSz); + XLogSegNoOffsetToRecPtr(targetSegNo + 1, 0, WalSegSz, targetSegEnd); targetPageOff = XLogSegmentOffset(targetPagePtr, WalSegSz); /* diff --git a/src/bin/pg_waldump/pg_waldump.c b/src/bin/pg_waldump/pg_waldump.c index 5c4f38e597..d41b831b18 100644 --- a/src/bin/pg_waldump/pg_waldump.c +++ b/src/bin/pg_waldump/pg_waldump.c @@ -1039,7 +1039,7 @@ main(int argc, char **argv) XLogFromFileName(fname, &private.timeline, &segno, WalSegSz); if (XLogRecPtrIsInvalid(private.startptr)) - XLogSegNoOffsetToRecPtr(segno, 0, private.startptr, WalSegSz); + XLogSegNoOffsetToRecPtr(segno, 0, WalSegSz, private.startptr); else if (!XLByteInSeg(private.startptr, segno, WalSegSz)) { fprintf(stderr, @@ -1053,7 +1053,7 @@ main(int argc, char **argv) /* no second file specified, set end position */ if (!(optind + 1 < argc) && XLogRecPtrIsInvalid(private.endptr)) - XLogSegNoOffsetToRecPtr(segno + 1, 0, private.endptr, WalSegSz); + XLogSegNoOffsetToRecPtr(segno + 1, 0, WalSegSz, private.endptr); /* parse ENDSEG if passed */ if (optind + 1 < argc) @@ -1076,8 +1076,8 @@ main(int argc, char **argv) argv[optind + 1], argv[optind]); if (XLogRecPtrIsInvalid(private.endptr)) - XLogSegNoOffsetToRecPtr(endsegno + 1, 0, private.endptr, - WalSegSz); + XLogSegNoOffsetToRecPtr(endsegno + 1, 0, WalSegSz, + private.endptr); /* set segno to endsegno for check of --end */ segno = endsegno; diff --git a/src/include/access/xlog_internal.h b/src/include/access/xlog_internal.h index 7c766836db..30610b3ea9 100644 --- a/src/include/access/xlog_internal.h +++ b/src/include/access/xlog_internal.h @@ -101,7 +101,7 @@ typedef XLogLongPageHeaderData *XLogLongPageHeader; #define XLogSegmentsPerXLogId(wal_segsz_bytes) \ (UINT64CONST(0x100000000) / (wal_segsz_bytes)) -#define XLogSegNoOffsetToRecPtr(segno, offset, dest, wal_segsz_bytes) \ +#define XLogSegNoOffsetToRecPtr(segno, offset, wal_segsz_bytes, dest) \ (dest) = (segno) * (wal_segsz_bytes) + (offset) #define XLogSegmentOffset(xlogptr, wal_segsz_bytes) \ --3yl44ksfinn6kemu--