On Fri, Jun 26, 2015 at 2:46 PM, Michael Paquier <michael.paqu...@gmail.com> wrote: > On Thu, Jun 25, 2015 at 8:32 PM, Simon Riggs wrote: >> Let's start with a complex, fully described use case then work out how to >> specify what we want. > > Well, one of the most simple cases where quorum commit and this > feature would be useful for is that, with 2 data centers: > - on center 1, master A and standby B > - on center 2, standby C and standby D > With the current synchronous_standby_names, what we can do now is > ensuring that one node has acknowledged the commit of master. For > example synchronous_standby_names = 'B,C,D'. But you know that :) > What this feature would allow use to do is for example being able to > ensure that a node on the data center 2 has acknowledged the commit of > master, meaning that even if data center 1 completely lost for a > reason or another we have at least one node on center 2 that has lost > no data at transaction commit. > > Now, regarding the way to express that, we need to use a concept of > node group for each element of synchronous_standby_names. A group > contains a set of elements, each element being a group or a single > node. And for each group we need to know three things when a commit > needs to be acknowledged: > - Does my group need to acknowledge the commit? > - If yes, how many elements in my group need to acknowledge it? > - Does the order of my elements matter? > > That's where the micro-language idea makes sense to use. For example, > we can define a group using separators and like (elt1,...eltN) or > [elt1,elt2,eltN]. Appending a number in front of a group is essential > as well for quorum commits. Hence for example, assuming that '()' is > used for a group whose element order does not matter, if we use that: > - k(elt1,elt2,eltN) means that we need for the k elements in the set > to return true (aka commit confirmation). > - k[elt1,elt2,eltN] means that we need for the first k elements in the > set to return true. > > When k is not defined for a group, k = 1. Using only elements > separated by commas for the upper group means that we wait for the > first element in the set (for backward compatibility), hence: > 1(elt1,elt2,eltN) <=> elt1,elt2,eltN >
I think that you meant "1[elt1,elt2,eltN] <=> elt1,elt2,eltN" in this case (for backward compatibility), right? Regards, -- Sawada Masahiko -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers