BUG #13910: synchronous replication not sync data occasionally - Mailing list pgsql-bugs

From wangzilong@yeezon.com
Subject BUG #13910: synchronous replication not sync data occasionally
Date
Msg-id 20160204004511.2780.1045@wrigleys.postgresql.org
Whole thread Raw
Responses Re: BUG #13910: synchronous replication not sync data occasionally
List pgsql-bugs
The following bug has been logged on the website:

Bug reference:      13910
Logged by:          chris
Email address:      wangzilong@yeezon.com
PostgreSQL version: 9.5.0
Operating system:   CentOS 6
Description:

I am suffering this problem since postgresql v9.3.
Most of the time, synchronous replication works great, occasionally, the
standby is not synchronous.

Demo Code:
env: ruby 2.2.2, centos 6, postgresql95-devel
require 'sequel'
require 'pg'

Sequel::Model.plugin(:schema)
Sequel::Model.plugin(:validation_helpers)
Sequel::Model.raise_on_save_failure = true
Sequel::Model.db = DB = Sequel.postgres(:host => '192.168.2.126',
                                         :user => 'test',
                                         :password => '123456',
                                         :database => 'test',
                                         :pool_timeout => 30,

:servers=>{:read_only=>{:host=>'192.168.2.113'}})
/ *
CREATE TABLE public.test_data
(
  id integer NOT NULL DEFAULT nextval('test_data_id_seq'::regclass),
  field_one text,
  field_two text,
  field_three text,
  field_four text,
  field_five text,
  CONSTRAINT test_data_pkey PRIMARY KEY (id)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE public.test_data
  OWNER TO test;
* /
class TestData < Sequel::Model(:test_data)
end
(1..10000).each do |a|
  id = ''
  #DB.transaction do
    n = TestData.new(:field_one => 'hello')
    n.save
    id = n.id
  #end
  d = TestData.first(:id => id)
  if d.nil?
    puts "#{id} first nil catch"
    (1..100).each do |i|
      t = TestData.first(:id => id)
      if t.nil?
        puts "#{id} time:#{i.to_s} nil catch"
      else
        break
      end
    end
  end
end

puts 'done'

If write transaction is synchronous to standby, as the document shows, the
program should output 'done'.
But, there always 1 or 2 record, are not synchronous. Retry them several
times could get correct data.
There is no error in program or postgresql.

The program shows, master does not confirm the write transaction synchronous
to standby, and returns the result. It's not correct according to the
document.

pgsql-bugs by date:

Previous
From: "David G. Johnston"
Date:
Subject: Re: BUG #13908: Query returns too few rows
Next
From: Thomas Munro
Date:
Subject: Re: BUG #13910: synchronous replication not sync data occasionally