Oops! Sorry for the mistake.

At Fri, 09 Oct 2020 11:12:01 +0900 (JST), Kyotaro Horiguchi 
<horikyota....@gmail.com> wrote in 
> At Fri, 9 Oct 2020 00:41:24 +0000, "tsunakawa.ta...@fujitsu.com" 
> <tsunakawa.ta...@fujitsu.com> wrote in 
> > From: Jamison, Kirk/ジャミソン カーク <k.jami...@fujitsu.com>
> > > > (6)
> > > > +                                       bufHdr->tag.blockNum >=
> > > > firstDelBlock[j])
> > > > +                                       InvalidateBuffer(bufHdr);       
> > > > /*
> > > > releases spinlock */
> > > >
> > > > The right side of >= should be cur_block.
> > > 
> > > Fixed.
> > 
> > >= should be =, shouldn't it?
> > 
> > Please measure and let us see just the recovery performance again because 
> > the critical part of the patch was modified.  If the performance is good as 
> > the previous one, and there's no review interaction with others in 
> > progress, I'll mark the patch as ready for committer in a few days.
> 
> The performance is expected to be kept since smgrnblocks() is called
> in a non-hot code path and actually it is called at most four times
> per a buffer drop in this patch. But it's better making it sure.
> 
> I have some comments on the latest patch.
> 
> @@ -445,6 +445,7 @@ BlockNumber
>  visibilitymap_prepare_truncate(Relation rel, BlockNumber nheapblocks)
>  {
>       BlockNumber newnblocks;
> +     bool    cached;
> 
> All the added variables added by 0002 is useless because all the
> caller sites are not interested in the value. smgrnblocks should
> accept NULL as isCached. (I'm agree with Tsunakawa-san that the
> camel-case name is not common there.)
> 
> +             nForkBlocks[i] = smgrnblocks(smgr_reln, forkNum[i], &isCached);
> +
> +             if (!isCached)
> 
> "is cached" is not the property that code is interested in. No other callers 
> to smgrnblocks are interested in that property. The need for caching is 
> purely internal of smgrnblocks().
> 
> On the other hand, we are going to utilize the property of "accuracy"
> that is a biproduct of reducing fseek calls, and, again, not
> interested in how it is achieved.
> 
> So I suggest that the name should be "accurite" or something that is
> not suggest the mechanism used under the hood.
> 
> +     if (nTotalBlocks != InvalidBlockNumber &&
> +             nBlocksToInvalidate < BUF_DROP_FULL_SCAN_THRESHOLD)
> 
> I don't think nTotalBlocks is useful. What we need here is only total
> blocks for every forks (nForkBlocks[]) and the total number of buffers
> to be invalidated for all forks (nBlocksToInvalidate).
> 
> 
> > > > The right side of >= should be cur_block.
> > > 
> > > Fixed.
> > 
> > >= should be =, shouldn't it?
> 
> It's just from a paranoia. What we are going to invalidate is blocks
> blockNum of which >= curBlock. Although actually there's no chance of

Sorry. What we are going to invalidate is blocks that are blocNum >=
firstDelBlock[i]. So what I wanted to suggest was the condition should
be

+                               if (RelFileNodeEquals(bufHdr->tag.rnode, 
rnode.node) &&
+                                       bufHdr->tag.forkNum == forkNum[j] &&
+                                       bufHdr->tag.blockNum >= 
firstDelBlock[j])

> any other processes having replaced the buffer with another page (with
> lower blockid) of the same relation after BugTableLookup(), that
> condition makes it sure not to leave blocks to be invalidated left
> alone.

And I forgot to mention the patch names. I think many of us name the
patches using -v option of git-format-patch, and assign the version to
a patch-set thus the version number of all files that are posted at
once is same.

regards.

-- 
Kyotaro Horiguchi
NTT Open Source Software Center


Reply via email to