Hi, Peter! On Tue, Mar 3, 2020 at 3:04 AM Peter Geoghegan <p...@bowt.ie> wrote: > Apologies for the delayed response. I was a little tired from the > deduplication project.
No problem. Apologies for the delayed revision as well. > I taught pageinspect to display a "htid" field for pivot tuples > recently, making it easier to visualize this example. Great! > I think that you should say more about how "lowkey" is used here: > > > /* > > - * Record if page that is about to become target is the right half > > of > > - * an incomplete page split. This can go stale immediately in > > - * !readonly case. > > + * Copy current target low key as the high key of right sibling. > > + * Allocate memory in upper level context, so it would be cleared > > + * after reset of target context. > > + * > > + * We only need low key for parent check. > > */ > > - state->rightsplit = P_INCOMPLETE_SPLIT(opaque); > > + if (state->readonly && !P_RIGHTMOST(opaque)) > > + { > > Say something about concurrent page splits, since they're the only > case where we actually use lowkey. Maybe say something like: "We > probably won't end up doing anything with lowkey, but it's simpler for > readonly verification to always have it available". I've revised this comment. Hopefully it's better now. > * I think that these comments could still be clearer: > > > + /* > > + * We're going to try match child high key to "negative > > + * infinity key". This normally happens when the last child > > + * we visited for target's left sibling was an incomplete > > + * split. So, we must be still on the child of target's left > > + * sibling. Thus, we should match to target's left sibling > > + * high key. Thankfully we saved it, it's called a "low > > key". > > + */ > > Maybe start with "We cannot try to match child's high key to a > negative infinity key in target, since there is nothing to compare. > However...". Perhaps use terms like "cousin page" and "subtree", which > can be useful. Alternatively, mention this case in the diagram example > at the top of bt_child_highkey_check(). It's tough to write comments > like this, but I think it's worth it. I've updated this comment using terms "cousin page" and "subtree". I didn't refer the diagram example, because it doesn't contain appropriate case. And I wouldn't like this diagram to contain such case, because that probably makes this diagram too complex. I've also invented term "uncle page". BTW, should it be "aunt page"? I don't know. > Note that a high key is also a pivot tuple, so I wouldn't mention high > keys here: > > > +/* > > + * Check if two tuples are binary identical except the block number. So, > > + * this function is capable to compare high keys with pivot keys. > > + */ > > +static bool > > +bt_pivot_tuple_identical(IndexTuple itup1, IndexTuple itup2) > > +{ Sure, this comment is revised. > v7 looks pretty close to being commitable, though I'll probably want > to update some comments that you haven't touched when you commit this. > I should probably wait until you've committed the patch to go do that. > I'm thinking of things like old comments in bt_downlink_check(). > > I will test the patch properly one more time when you produce a new > revision. I haven't really tested it since the last time. Attached patch also has revised commit message. I'll wait for your response before commit. ------ Alexander Korotkov Postgres Professional: http://www.postgrespro.com The Russian Postgres Company