On 2016-07-14 13:46:23 +0200, Magnus Hagander wrote:
> Currently, if you run pg_xlogdump with -f, you have to specify an end
> position in an existing file, or if you don't it will only follow until the
> end of the current file.
That's because specifying a file explicitly says that you only want to
look at that file, specifying two files that you want the range
inclusively between the two files. -f works if you just use -s.
> I'd appreciate a review of that by someone who's done more work on the xlog
> stuff, but it seems trivial to me. Not sure I can argue it's a bugfix
> though, since the usecase simply did not work...
I'd say it's working as intended, and you want to change that
intent. That's fair, but I'd not call it a bug, and I'd say it's not
really 9.6 material.
> diff --git a/src/bin/pg_xlogdump/pg_xlogdump.c b/src/bin/pg_xlogdump/pg_xlogdump.c
> index c0a6816..2f1018b 100644
> --- a/src/bin/pg_xlogdump/pg_xlogdump.c
> +++ b/src/bin/pg_xlogdump/pg_xlogdump.c
> @@ -901,8 +901,14 @@ main(int argc, char **argv)
> goto bad_argument;
> }
>
> - /* no second file specified, set end position */
> - if (!(optind + 1 < argc) && XLogRecPtrIsInvalid(private.endptr))
> + /*
> + * No second file specified, so unless we are in follow mode,
> + * set the end position to the end of the same segment as
> + * the start position.
> + */
> + if (!(optind + 1 < argc) &&
> + XLogRecPtrIsInvalid(private.endptr) &&
> + !config.follow)
> XLogSegNoOffsetToRecPtr(segno + 1, 0, private.endptr);
>
> /* parse ENDSEG if passed */
> @@ -933,7 +939,8 @@ main(int argc, char **argv)
> }
>
>
> - if (!XLByteInSeg(private.endptr, segno) &&
> + if (!XLogRecPtrIsInvalid(private.endptr) &&
> + !XLByteInSeg(private.endptr, segno) &&
> private.endptr != (segno + 1) * XLogSegSize)
> {
> fprintf(stderr,
Other than that it looks reasonable from a quick glance.
Andres