[Bucardo-general] Concurrency errors when replicating a master to two slaves and installation experiences
Greg Sabino Mullane
greg at endpoint.com
Mon Nov 1 16:21:05 UTC 2010
> 1) Reading password from ~/.pgpass will fail if SELINUX is in
> enforcing mode with it's "permission denied" message. I had to
> disable SELINUX to allow bucardo to read the file and connect to
> databases
Good to know, worth a doc patch if anyone wants to step up (or
just edit the wiki).
> 2) There seems to be an undocumented ~20 character limit to the
> length of a sync name. If I create a sync with a name 25 characters
> long, it will be accepted by bucardo_ctl and even perform an initial
> sync but future updates will fail with key constraint errors like
> this:
> [Thu Oct 21 17:53:33 2010] CTL Controller exiting at
> cleanup_controller. Reason: DBD::Pg::st execute failed: ERROR
> : insert or update on table "q" violates foreign key
> constraint "q_tdb_fk"
> DETAIL: Key (targetdb)=(jefferson_a) is not present in table
> "db". at /usr/lib/perl5/vendor_perl/5.8.8/Bucardo.pm line
> 3235.
> The database did exist in the db table but bucardo had truncated the
> name it was searching for for some reason. To fix the error, I just
> had to alter sync to have a name of 20 or less characters. (bug?)
There should be no length limit. There is some munging of the auto-generated
trigger and notification names and the like to avoid running into the
compiled 63 character limit on names of things in the database, but I can't
see how that would affect the above. Are any of the syncs using uppercase
characters by chance? That's caused some issues in the past.
> Looking at all other triggers, the
> bucardo.bucardo_triggerkick_SYNCNAME one was missing the "SECURITY
> DEFINER" keywords to take on the role of the bucardo user. Once I
> added this, validated syncs and restarted bucardo I was able to
> truncate tables as normal.
Not sure I understand this one yet. The triggerkick functions should
only be doing a NOTIFY, which requires no extra perms. Can you verify
what those functions are doing with a \df+?
> It looks like there's a race condition between the two sync triggers
> as they each try to execute:
> DELETE FROM bucardo.bucardo_delta WHERE txntime <= now() AND
> tablename = $g->{oid}
Thanks, this is a known problem that probably won't get fixed in the
current version, but will be avoided in future ones. Obviously, limiting
the number of sync will help this out.
> The previously executed SQL was:
> $SQL = 'UPDATE bucardo.bucardo_sequences SET value=?,
> iscalled=? WHERE tablename=?';
> I couldn't see a failed SQL statement that would cause this in the
> postgres logs, although there were some errors about failing to
> insert some records with duplicate primary keys. I tried running
> the same SQL again and I didn't get the error from bucardo.
There's definitely a bad race condition with the sequences table.
I've not back-patched it yet, but need to. Keep reminding me. :)
> When I do a bucardo_ctl status on any of my syncs, I always get a
> date in the future, eg a moment ago I got:
...
> Our servers are in Tasmania, Australia which is currently GMT +10. I
> suspect this has something to do with it but I'm not sure what.
Thanks, I'll dig into this, probably related to that +10. A bug filing
would be great.
> Does anyone have an idea of how to fix the concurrency problems I'm
> experiencing?
The best thing for now is to use a single sync, and have the master
go to a targetgroup consisting of the two slaves.
--
Greg Sabino Mullane greg at endpoint.com
End Point Corporation
PGP Key: 0x14964AC8
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 163 bytes
Desc: not available
Url : https://mail.endcrypt.com/pipermail/bucardo-general/attachments/20101101/bcd7769a/attachment.bin
More information about the Bucardo-general
mailing list