[Bucardo-general] How to skip a failing command ?

Kiriakos Tsourapas ktsour at gmail.com
Tue Jul 5 09:07:54 UTC 2011


Hi, 

I patched Bucardo.pm as you suggested.

Here are the changes :
                                        ## Build a list of all PK values
                                        my $pkvals = '';
                                        for my $row (@$info) {
                                                #my $inner = join ',' => map { s/\'/''/go; qq{'$_'}; } @$row;
                                                my $inner = join ',' => map { s{\'}{''}go; s{\\}{\\\\}go; qq{'$_'}; } @$row;
                                                $pkvals .= $g->{pkcols} > 1 ? "($inner)," : "$inner,";
                                        }
                                        chop $pkvals;

and

                                                                my $deletebatch = 10_000;
                                                                my $dcount = 0;
                                                                my $delcount = 0;
                                                                for my $row (@$info) {
                                                                        #my $inner = join ',' => map { s/\'/''/go; qq{'$_'}; } @$row;
                                                                        my $inner = join ',' => map { s/\'/''/go; s{\\}{\\\\}; qq{'$_'}; } @$row;
                                                                        ## Put this group of pks into a temporary array
                                                                        $delchunks[$delcount] .= $g->{pkcols} > 1 ? "($inner)," : "$inner,";
                                                                        ## Once we reach out limit, start appending to the next bit of the array
                                                                        if ($dcount++ >= $deletebatch) {
                                                                                $delcount++;
                                                                                $dcount = 0;
                                                                        }
                                                                }


But the error comes from another line :
syntax error at or near "90360" LINE 1: ... IN (('90360','G[?4??X?('),('90360','???fei7\'),('90360','?x...                                                              ^ at /usr/lib/perl5/site_perl/5.10.0/Bucardo.pm line 5724.  main error: none source error: 7 target error: none States:/4260

which I quote here :
                                while (@srcdelete) {
                                        $x=0;
                                        my $list = '';
                                  LOOP: {
                                                my $row = shift @srcdelete;
                                                last LOOP if ! defined $row or ! defined $row->[0];
                                                if ($g->{pkcols} > 1) {
                                                        $list .= sprintf '(%s),' => join ',' => @$row;
                                                }
                                                else {
                                                        $list .= "$row->[0],";
                                                }
                                                last LOOP if $x++ >= $config{max_delete_clause};
                                                redo LOOP;
                                        }
                                        chop $list;
                                        if (length $list) {
                                                $self->glog("Deleting from source: $SQL ($list)");
                                                $dmlcount{D}{source}{$S}{$T} += $sourcedbh->do("$SQL ($list)");
                                        }
                                }

Can you please help me figure out what I need to change to make it work ?
I am also attaching my Bucardo.pm

Also, is there anywhere a guide on how to upgrade from 4.5.0 to 5.0 ?




Thank you very much for your help !!



On Jul 4, 2011, at 21:16, Greg Sabino Mullane wrote:

> On Mon, Jul 04, 2011 at 11:15:10AM +0300, Kiriakos Tsourapas wrote:
>> Hi,
>> 
>> I faced a problem that is obviously solved in version 4.4.4
>> The problem has to do with the fact that bucardo is not escaping the backslash.
>> 
>> So, I will upgrade to latest version, but until then, is there a 
>> way to skip the failing command, so that replication has continue from there on ?
> 
> No, there is no way - Bucardo need to delete all the records at once.
> If you don't want to do a full upgrade, you could simply patch 
> your current version of Bucardo.pm to escape the backslash.
> 
> See:
> 
> https://github.com/bucardo/bucardo/commit/9a4d650166606a0e486211431e5c294d2112e5a3
> https://github.com/bucardo/bucardo/commit/92e228d313b9803e9ef7515fc278300f4876362d
> 
> -- 
> Greg Sabino Mullane greg at endpoint.com
> End Point Corporation
> PGP Key: 0x14964AC8

-------------- next part --------------
An HTML attachment was scrubbed...
URL: https://mail.endcrypt.com/pipermail/bucardo-general/attachments/20110705/2e8f67c3/attachment-0001.html 


More information about the Bucardo-general mailing list