On 3/19/2007 8:48 PM, [EMAIL PROTECTED] wrote:
On Mon, 19 Mar 2007, Andrew Sullivan wrote:

This piece of functionality seems to me to be exactly the sort of area
where using savepoints on the remote note might be a good idea, but
I'm worried about the potential for really nasty locks.  I think in
the medium term, we probably need a complete proposal on how to
improve EXECUTE SCRIPT's safety, or some sort of comprehensive
discussion about the various locks that are being taken and the like.
I'm slightly worried that some of the design in that area is happening
a little _ad hoc_, and I think a more complete idea of what the
trade-offs are, and which ones we can countenance, would be really
nice to have.

In this case are we better off instead having slonik connect to the subscriber that the script is destined for and applying it there directly?

The original idea to ship the DDL script inside of the event stream from the origin was that to ensure that the DDL is executed at the same logical point in time (with respect to changes to the data) on all subscribers, as it happened on the origin. This of course is pretty pointless in the case of "execute only on", because it implies that the time, when (or even if) these changes have been applied to the origin is unknown to Slony.

Yes, in the case of "execute only on" we would be better off if slonik would operate directly on that node and that node alone.


Jan



For example if only_on is specified to be a subscriber then allow the event node to be a subscriber as well? You should be able to get this behavior today by creating an empty set on your subscriber/target where that subscriber is the origin to that set. There are certain use-cases that this approach would disallow (Cases where slonik can't connect directly to the subscriber, if in the future we had a all_nodes_except_origin option to execute script; but I'm not sure if these use cases are realistic enough to be concerned about)

Once you start performing execute scripts only on some nodes then your data and/or schema won't be the same everywhere in the cluster and in any master/slave replication system if you don't do this very carefully your going to get burned.

Maybe we should start with trying to decide what the purpose of execute script is.

The main uses for execute script that I see are:

1. DDL changes
2. If you want to change a run a query that changes data without having to replicate the results statement by statement. Ie something like 'INSERT INTO x ...SELECT FROM y' 3. You want to fire off a stored procedure on all nodes that might have side effects that need to executed on all nodes

Feel free to add what I've missed.


The manual says, "Executes a script containing arbitrary SQL statements on all nodes that are subscribed to a set at a common controlled point within the replication transaction stream"

It's that 'arbitrary' part that makes this very hard.

At this stage in the discussion I think we want to review the thread on 2pc from last June.
http://lists.slony.info/pipermail/slony1-general/2006-July/004609.html

Nothing has really changed since then. In some circumstances a global outage is acceptable so you can run the script on all nodes before committing to any of them. In other environments this isn't always an option (log-shipping among others) and there wil always be 'some' risk of things failing on a subscriber. The more your subscriber is different than your provider the more this risk goes up.

Steve




--
Andrew Sullivan                         204-4141 Yonge Street
Afilias Canada                        Toronto, Ontario Canada
<[EMAIL PROTECTED]>                              M2P 2A8
jabber: [EMAIL PROTECTED]                 +1 416 646 3304 x4110
_______________________________________________
Slony1-general mailing list
[email protected]
http://lists.slony.info/mailman/listinfo/slony1-general


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


--
#======================================================================#
# It's easier to get forgiveness for being wrong than for being right. #
# Let's break this rule - forgive me.                                  #
#================================================== [EMAIL PROTECTED] #
_______________________________________________
Slony1-general mailing list
[email protected]
http://lists.slony.info/mailman/listinfo/slony1-general

Reply via email to