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


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to