On Sun, Oct 23, 2016 at 10:28 PM, Magnus Hagander <magnus@hagander.net> wrote: > It also broke the tests and invalidated some documentation. But it was easy > enough to fix. > > I've now applied this, so next time you get to do the merging :P Joking > aside, please review and let me know if you can spot something I messed up > in the final merge.
Just had another look at it.. +static int +tar_fsync(Walfile f) +{ + Assert(f != NULL); + tar_clear_error(); + + /* + * Always sync the whole tarfile, because that's all we can do. This makes + * no sense on compressed files, so just ignore those. + */ + if (tar_data->compression) + return 0; + + return fsync(tar_data->fd); +} fsync() should not be called here if --no-sync is used.
+ /* sync the empty blocks as well, since they're after the last file */ + fsync(tar_data->fd); Similarly, the fsync call of tar_finish() should not happen when --no-sync is used.
Yeah, agreed.
+ if (format == 'p') + stream.walmethod = CreateWalDirectoryMethod(param->xlog, do_sync); + else + stream.walmethod = CreateWalTarMethod(param->xlog, compresslevel, do_sync); LogStreamerMain() exits immediately once it is done, but I think that we had better be tidy here and clean up the WAL methods that have been allocated. I am thinking here about a potentially retry method on failure, though the best shot in this area would be with ReceiveXlogStream().
Wouldn't the same be needed in pg_receivexlog.c in that case?