On 10/27/2008 2:04 PM, Michael Lorenz wrote:
OK, so blowing away all of the records in sl_event *did* get replication started again.

However, as I said in the original post, this is not something I want to try in production. Can anyone provide any information as to how to get Slony back on track when replication gets messed up as I described below? Of particular use would be how to identify problem sl_event records (if doing that is the best way).

The best way is not to mess it up like that.

The docs have been wrong about how to wait for a SUBSCRIBE SET. The trick is that subscribing to a set involves an event that is not generated by any slonik script, but by the sets Origin when it receives the SUBSCRIBE_SET event. That is the event to wait for. Another annoying detail is that WAIT FOR EVENT has a default timeout, and since subscribing can take a while, timeouts are bad. So assuming that set 1 has Origin 1 and direct subscriber 2 with cascaded subscriber 3, the proper sequence of slonik commands to subscribe and merge another set is this:

    SUBSCRIBE SET (ID = 999, PROVIDER = 1, RECEIVER = 2);
    WAIT FOR EVENT (ORIGIN = 2, CONFIRMED = 1, WAIT ON = 1,
                    TIMEOUT = 0);
    SYNC (ID = 1);
    WAIT FOR EVENT (ORIGIN = 1, CONFIRMED = 2, WAIT ON = 1,
                    TIMEOUT = 0);

    SUBSCRIBE SET (ID = 999, PROVIDER = 2, RECEIVER = 3);
    WAIT FOR EVENT (ORIGIN = 3, CONFIRMED = 1, WAIT ON = 1,
                    TIMEOUT = 0);
    SYNC (ID=1);
    WAIT FOR EVENT (ORIGIN = 1, CONFIRMED = 3, WAIT ON = 1,
                    TIMEOUT = 0);
    MERGE SET ( ID = 1, ADD ID = 999, ORIGIN = 1 );

The WAIT after the SUBSCRIBE must wait until the SUBSCRIBE_SET has been processed by the Origin of the set, which means that the ENABLE_SUBSCRIPTION event has been created by the Origin. The following SYNC and WAIT then generate another event on the Origin which is known to slonik, and which it waits for to be processed by the new subscriber. When that is done, the subscriber not only has done the subscription itself but also the initial SYNC after that.


Jan

--
Anyone who trades liberty for security deserves neither
liberty nor security. -- Benjamin Franklin

_______________________________________________
Slony1-general mailing list
[email protected]
http://lists.slony.info/mailman/listinfo/slony1-general

Reply via email to