Re: [PATCH 10/16] Introduce the concept that wal has a 'origin' node - Mailing list pgsql-hackers
From | Simon Riggs |
---|---|
Subject | Re: [PATCH 10/16] Introduce the concept that wal has a 'origin' node |
Date | |
Msg-id | CA+U5nM+fPynmZ+L_qB1fFMkkVc8k3vyKYxXBGEmEO5A5Nt7qhw@mail.gmail.com Whole thread Raw |
In response to | Re: [PATCH 10/16] Introduce the concept that wal has a 'origin' node ("Kevin Grittner" <Kevin.Grittner@wicourts.gov>) |
List | pgsql-hackers |
On 20 June 2012 23:34, Kevin Grittner <Kevin.Grittner@wicourts.gov> wrote: > Simon Riggs <simon@2ndQuadrant.com> wrote: >> Kevin Grittner <Kevin.Grittner@wicourts.gov> wrote: >>>> Heikki Linnakangas wrote: >>> >>>> I don't like the idea of adding the origin id to the record >>>> header. It's only required in some occasions, and on some record >>>> types. >>> >>> Right. >> >> Wrong, as explained. > > The point is not wrong; you are simply not responding to what is > being said. Heikki said that the origin ID was not required for all MMR configs/scenarios. IMHO that is wrong, with explanation given. By agreeing with him, I assumed you were sharing that assertion, rather than saying something else. > You have not explained why an origin ID is required when there is no > replication, or if there is master/slave logical replication, or ... You're right; I never claimed it was needed. Origin Id is only needed for multi-master replication and that is the only context I've discussed it. >> This is not transaction metadata, it is WAL record metadata >> required for multi-master replication, see later point. >> >> We need to add information to every WAL record that is used as the >> source for generating LCRs. > > If the origin ID of a transaction doesn't count as transaction > metadata (i.e., data about the transaction), what does? It may be a > metadata element about which you have special concerns, but it is > transaction metadata. You don't plan on supporting individual WAL > records within a transaction containing different values for origin > ID, do you? If not, why is it something to store in every WAL > record rather than once per transaction? That's not intended to be > a rhetorical question. I think it's because you're still thinking > of the WAL stream as *the medium* for logical replication data > rather than *the source* of logical replication data. > As long as the WAL stream is the medium, options are very > constrained. You can code a very fast engine to handle a single > type of configuration that way, and perhaps that should be a > supported feature, but it's not a configuration I've needed yet. > (Well, on reflection, if it had been available and easy to use, I > can think of *one* time I *might* have used it for a pair of nodes.) > It seems to me that you are so focused on this one use case that you > are not considering how design choices which facilitate fast > development of that use case paint us into a corner in terms of > expanding to other use cases. >>> I think removing origin ID from this patch and submitting a >>> separate patch for a generalized transaction metadata system is >>> the sensible way to go. >> >> We already have a very flexible WAL system for recording data of >> interest to various resource managers. If you wish to annotate a >> transaction, you can either generate a new kind of WAL record or >> you can enhance a commit record. > > Right. Like many of us are suggesting should be done for origin ID. > >> XLOG_NOOP records can already be generated by your application if >> you wish to inject additional metadata to the WAL stream. So no >> changes are required for you to implement the generalised >> transaction metadata scheme you say you require. > > I'm glad it's that easy. Are there SQL functions to for that yet? Yes, another possible design is to generate a new kind of WAL record for the origin id. Doing it that way will slow down multi-master by a measurable amount, and slightly bloat the WAL stream. The proposed way uses space that is currently wasted and likely to remain so. Only 2 bytes of 6 bytes available are proposed for use, with a flag design that allows future extension if required. When MMR is not in use, the WAL records would look completely identical to the way they look now, in size, settings and speed of writing them. Putting the origin id onto each WAL record allows very fast and simple stateless filtering. I suggest using it because those bytes have been sitting there unused for close to 10 years now and no better use springs to mind. The proposed design is the fastest way of implementing MMR, without any loss for non-users. As I noted before, slowing down MMR by a small amount causes geometric losses in performance across the whole cluster. >> Not sure how or why that relates to requirements for multi-master. > > That depends on whether you want to leave the door open to other > logical replication than the one use case on which you are currently > focused. I even consider some of those other cases multi-master, > especially when multiple databases are replicating to a single table > on another server. I'm not clear on your definition -- it seems to > be rather more narrow. Maybe we need to define some terms somewhere > to facilitate discussion. Is there a Wiki page where that would > make sense? The project is called BiDirectional Replication to ensure that people understood this is not just multi-master. But that doesn't mean that multi-master can't have its own specific requirements. Adding originid is also useful for the use case you mention, since its useful to know where the data came from for validation. So having an originid on each insert record would be important. That case must also handle conflicts from duplicate inserts, and originid priority is then an option for conflict handling. -- Simon Riggs http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services
pgsql-hackers by date: