AMD FX 8120 / centos 6.2 / latest source (git head)

It seems to be quite easy to force a 'sync' replica to not be equal to master by
recreating+loading a table in a while loop.


For this test I compiled+checked+installed three separate instances on the same 
machine.  The
replica application_name are names 'wal_receiver_$copy' where $copy is 01, 
resp. 02.

$ ./sync_state.sh
  pid  | application_name |   state   | sync_state
-------+------------------+-----------+------------
 19520 | wal_receiver_01  | streaming | sync
 19567 | wal_receiver_02  | streaming | async
(2 rows)

 port | synchronous_commit | synchronous_standby_names
------+--------------------+---------------------------
 6564 | on                 | wal_receiver_01
(1 row)

 port | synchronous_commit | synchronous_standby_names
------+--------------------+---------------------------
 6565 | off                |
(1 row)

 port | synchronous_commit | synchronous_standby_names
------+--------------------+---------------------------
 6566 | off                |
(1 row)



The test consists of creating a table and loading tab-separated data from file 
with COPY and then
taking the rowcount of that table (13 MB, almost 200k rows) in all three 
instances:


# wget 
http://flybase.org/static_pages/downloads/FB2012_03/genes/fbgn_annotation_ID_fb_2012_03.tsv.gz

slurp_file=fbgn_annotation_ID_fb_2012_03.tsv.gz

zcat $slurp_file \
 | grep -v '^#' \
 | grep -Ev '^[[:space:]]*$' \
 | psql -c "
    drop table if exists $table cascade;
    create table $table (
             gene_symbol      text
        ,    primary_fbgn     text
        ,    secondary_fbgns  text
        ,    annotation_id    text
        ,    secondary_annotation_ids text
    );
    copy $table from stdin csv delimiter E'\t';
 ";

# count on master:
echo "select current_setting('port') port,count(*) from $table"|psql -qtXp 6564

# count on wal_receiver_01 (sync replica):
echo "select current_setting('port') port,count(*) from $table"|psql -qtXp 6565

# count on wal_receiver_02 (async replica):
echo "select current_setting('port') port,count(*) from $table"|psql -qtXp 6566



I expected the rowcounts from master and sync replica to always be the same.

Initially this seemed to be the case, but when I run the above sequence in a 
while loop for a few
minutes about 10% of rowcounts from the sync-replica are not equal to the 
master.

Perhaps not a likely scenario, but surely such a deviating rowcount on a sync 
replica should not
be possible?


thank you,


Erik Rijkers





-- 
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