Re: [HACKERS] WAL consistency check facility
От | Michael Paquier |
---|---|
Тема | Re: [HACKERS] WAL consistency check facility |
Дата | |
Msg-id | CAB7nPqQwBHEA46Shf00BGn0uJfSgg0BGZ36S7K-aDPVNm5b6Cw@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: [HACKERS] WAL consistency check facility (Robert Haas <robertmhaas@gmail.com>) |
Ответы |
Re: [HACKERS] WAL consistency check facility
(Kuntal Ghosh <kuntalghosh.2007@gmail.com>)
Re: [HACKERS] WAL consistency check facility (Robert Haas <robertmhaas@gmail.com>) |
Список | pgsql-hackers |
On Wed, Feb 1, 2017 at 1:06 AM, Robert Haas <robertmhaas@gmail.com> wrote: > On Thu, Jan 5, 2017 at 12:54 AM, Kuntal Ghosh > <kuntalghosh.2007@gmail.com> wrote: >> I've attached the patch with the modified changes. PFA. > > Can this patch check contrib/bloom? Only full pages are applied at redo by the generic WAL facility. So you would finish by comparing a page with itself in generic_redo. > + /* > + * For a speculative tuple, the content of t_ctid is conflicting > + * between the backup page and current page. Hence, we set it > + * to the current block number and current offset. > + */ > > Why does it differ? Is that a bug? This has been discussed twice in this thread, once by me, once by Alvaro: https://www.postgresql.org/message-id/CAM3SWZQC8nUgp8SjKDY3d74VLpdf9puHc7-n3zf4xcr_bghPzg%40mail.gmail.com https://www.postgresql.org/message-id/CAB7nPqQTLGvn_XePjS07kZMMw46kS6S7LfsTocK%2BgLpTN0bcZw%40mail.gmail.com > + /* > + * Leave if no masking functions defined, this is possible in the case > + * resource managers generating just full page writes, comparing an > + * image to itself has no meaning in those cases. > + */ > + if (RmgrTable[rmid].rm_mask == NULL) > + return; > > ...and also... > > + /* > + * This feature is enabled only for the resource managers where > + * a masking function is defined. > + */ > + for (i = 0; i <= RM_MAX_ID; i++) > + { > + if (RmgrTable[i].rm_mask != NULL) > > Why do we assume that the feature is only enabled for RMs that have a > mask function? Why not instead assume that if there's no masking > function, no masking is required? Not all RMs work on full pages. Tracking in smgr.h the list of RMs that are no-ops when masking things is easier than having empty routines declared all over the code base. Don't you think so> > + void (*rm_mask) (char *page, BlockNumber blkno); > > Could the page be passed as type "Page" rather than a "char *" to make > things more convenient for the masking functions? If not, could those > functions at least do something like "Page page = (Page) pagebytes;" > rather than "Page page_norm = (Page) page;"? xlog_internal.h is used as well by frontends, this makes the header dependencies cleaner. (I have looked at using Page when hacking this stuff, but the header dependencies are not worth it, I don't recall all the details though this was a couple of months back). -- Michael
В списке pgsql-hackers по дате отправления:
Следующее
От: Kyotaro HORIGUCHIДата:
Сообщение: Re: [HACKERS] Logical Replication and Character encoding