I looked at v14.

(1)
+               /* Get the total number of blocks for the supplied relation's 
fork */
+               for (j = 0; j < nforks; j++)
+               {
+                       BlockNumber             block = smgrnblocks(smgr_reln, 
forkNum[j]);
+                       nblocks += block;
+               }

Why do you sum all forks?


(2)
+                       if ((nblocks / (uint32)NBuffers) < 
BUF_DROP_FULLSCAN_THRESHOLD &&
+                               BlockNumberIsValid(nblocks))
+                       {

The division by NBuffers is not necessary, because both sides of = are number 
of blocks.
Why is BlockNumberIsValid(nblocks)) call needed?


(3)
        if (reln->smgr_cached_nblocks[forknum] == blocknum)
                reln->smgr_cached_nblocks[forknum] = blocknum + 1;
        else
+       {
+               /*
+                * DropRelFileNodeBuffers relies on the behavior that cached 
nblocks
+                * won't be invalidated by file extension while recovering.
+                */
+               Assert(!InRecovery);
                reln->smgr_cached_nblocks[forknum] = InvalidBlockNumber;
+       }

I think this change is not directly related to this patch and can be a separate 
patch, but I want to leave the decision up to a committer.


Regards
Takayuki Tsunakawa




Reply via email to