Hi Current implementation of pg_flush_data when called with zero offset and zero nbytes is assumed to flush all file. In osx it uses mmap with these arguments, but according to man:
"[EINVAL] The len argument was negative or zero. Historically, the
system call would not return an
error if the argument was zero. See other potential
additional restrictions in the COMPAT-
IBILITY section below."
so it is generate a lot of warnings:
"WARNING: could not mmap while flushing dirty data: Invalid argument"
Call to pg_flush_data with zero offset and nbytes happens when replica starts
from base backup and fsync=on. TAP test to reproduce is attached.
One possible solution for that is just fallback to pg_fdatasync in case when
offset = nbytes = 0.
Also there are no default ifdef inside this function, is there any check that
will guarantee that pg_flush_data will not end up with empty body on some
platform?
---
Stas Kelvich
Postgres Professional: http://www.postgrespro.com
Russian Postgres Company
# Minimal test testing streaming replication
use strict;
use warnings;
use PostgresNode;
use TestLib;
use Test::More tests => 1;
# Initialize master node
my $node_master = get_new_node('master');
$node_master->init(allows_streaming => 1);
$node_master->append_conf(
'postgresql.conf', qq(
fsync = 'on'
));
$node_master->start;
my $backup_name = 'my_backup';
# Take backup
$node_master->backup($backup_name);
# Create streaming standby linking to master
my $node_standby = get_new_node('standby');
$node_standby->init_from_backup($node_master, $backup_name);
$node_standby->start;
flushdata.patch
Description: Binary data
-- Sent via pgsql-hackers mailing list ([email protected]) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers
