Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

additional and useless loop for each relation file when do ptrack_get_pagemapset query #12

Closed
vegebird opened this issue Oct 9, 2021 · 1 comment
Assignees
Labels
enhancement New feature or request

Comments

@vegebird
Copy link
Contributor

vegebird commented Oct 9, 2021

Hello developers, it seems that I found an issue accidentally.

When do ptrack_get_pagemapset() query, this function will get all relation files and then retrieve each file to construct its page map information.

  1. ptrack_filelist_getnext() is to get the next relation file's info, please notice this two lines (just consider only one segment file case)
    ctx->bid.blocknum = 0;
    ctx->relsize = fst.st_size / BLCKSZ;
  2. ptrack_get_pagemapset() will do loop to check whether there're this block's update lsn or not, please notice the loop condition:
    /* Stop traversal if there are no more segments */
    if (ctx->bid.blocknum > ctx->relsize) { complete this segment to output, and get next relation file to loop }

Obviously, if (ctx->bid.blocknum > ctx->relsize) should be if (ctx->bid.blocknum + 1 >= ctx->relsize) ?

And another small question: maybe ctx->relsize will be better named blknums?

If I miss some points and this is not an issue, apology for my disturbance.

Regards,
Bird

@vegebird
Copy link
Contributor Author

vegebird commented Oct 9, 2021

And another small question:

In function ptrack_get_pagemapset()

while (true)
{
    /* Stop traversal if there are no more segments */
    if (ctx->bid.blocknum > ctx->relsize)
    {
        /* We completed a segment and there is a bitmap to return */
        if (pagemap.bitmap != NULL)
        {
              /* make tuple output */
                       **<------------------------- also need to get the next relation file ?**
        }
        else        **<------------------------ remove the "else" ?** 
        {
            /* We have just processed unchanged file, let's pick next */
            if (ptrack_filelist_getnext(ctx) < 0)
                 SRF_RETURN_DONE(funcctx);
        }
    }
    // do hash, get update lsn
   ctx->bid.blocknum += 1;
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

3 participants