Remove BufFile's isTemp flag.
authorAndres Freund <andres@anarazel.de>
Fri, 17 Nov 2017 01:52:57 +0000 (17:52 -0800)
committerAndres Freund <andres@anarazel.de>
Fri, 17 Nov 2017 01:52:57 +0000 (17:52 -0800)
The isTemp flag controls whether buffile.c chops BufFile data up into
1GB segments on disk.  Since it was badly named and always true, get
rid of it.

Author: Thomas Munro (based on suggestion by Peter Geoghegan)
Reviewed-By: Peter Geoghegan, Andres Freund
Discussion: https://postgr.es/m/CAH2-Wz%3D%2B9Rfqh5UdvdW9rGezdhrMGGH-JL1X9FXXVZdeeGeOJA%40mail.gmail.com

src/backend/storage/file/buffile.c

index a73c025c81591757edbd51d4fe5a751994046b50..b527d38b05b0c4ebe51d93ee712aba0313cc9d04 100644 (file)
@@ -68,7 +68,6 @@ struct BufFile
     * avoid making redundant FileSeek calls.
     */
 
-   bool        isTemp;         /* can only add files if this is true */
    bool        isInterXact;    /* keep open over transactions? */
    bool        dirty;          /* does buffer need to be written? */
 
@@ -99,7 +98,7 @@ static int    BufFileFlush(BufFile *file);
 
 /*
  * Create a BufFile given the first underlying physical file.
- * NOTE: caller must set isTemp and isInterXact if appropriate.
+ * NOTE: caller must set isInterXact if appropriate.
  */
 static BufFile *
 makeBufFile(File firstfile)
@@ -111,7 +110,6 @@ makeBufFile(File firstfile)
    file->files[0] = firstfile;
    file->offsets = (off_t *) palloc(sizeof(off_t));
    file->offsets[0] = 0L;
-   file->isTemp = false;
    file->isInterXact = false;
    file->dirty = false;
    file->resowner = CurrentResourceOwner;
@@ -136,7 +134,6 @@ extendBufFile(BufFile *file)
    oldowner = CurrentResourceOwner;
    CurrentResourceOwner = file->resowner;
 
-   Assert(file->isTemp);
    pfile = OpenTemporaryFile(file->isInterXact);
    Assert(pfile >= 0);
 
@@ -173,7 +170,6 @@ BufFileCreateTemp(bool interXact)
    Assert(pfile >= 0);
 
    file = makeBufFile(pfile);
-   file->isTemp = true;
    file->isInterXact = interXact;
 
    return file;
@@ -288,10 +284,12 @@ BufFileDumpBuffer(BufFile *file)
     */
    while (wpos < file->nbytes)
    {
+       off_t       availbytes;
+
        /*
         * Advance to next component file if necessary and possible.
         */
-       if (file->curOffset >= MAX_PHYSICAL_FILESIZE && file->isTemp)
+       if (file->curOffset >= MAX_PHYSICAL_FILESIZE)
        {
            while (file->curFile + 1 >= file->numFiles)
                extendBufFile(file);
@@ -304,13 +302,10 @@ BufFileDumpBuffer(BufFile *file)
         * write as much as asked...
         */
        bytestowrite = file->nbytes - wpos;
-       if (file->isTemp)
-       {
-           off_t       availbytes = MAX_PHYSICAL_FILESIZE - file->curOffset;
+       availbytes = MAX_PHYSICAL_FILESIZE - file->curOffset;
 
-           if ((off_t) bytestowrite > availbytes)
-               bytestowrite = (int) availbytes;
-       }
+       if ((off_t) bytestowrite > availbytes)
+           bytestowrite = (int) availbytes;
 
        /*
         * May need to reposition physical file.
@@ -543,20 +538,18 @@ BufFileSeek(BufFile *file, int fileno, off_t offset, int whence)
     * above flush could have created a new segment, so checking sooner would
     * not work (at least not with this code).
     */
-   if (file->isTemp)
+
+   /* convert seek to "start of next seg" to "end of last seg" */
+   if (newFile == file->numFiles && newOffset == 0)
    {
-       /* convert seek to "start of next seg" to "end of last seg" */
-       if (newFile == file->numFiles && newOffset == 0)
-       {
-           newFile--;
-           newOffset = MAX_PHYSICAL_FILESIZE;
-       }
-       while (newOffset > MAX_PHYSICAL_FILESIZE)
-       {
-           if (++newFile >= file->numFiles)
-               return EOF;
-           newOffset -= MAX_PHYSICAL_FILESIZE;
-       }
+       newFile--;
+       newOffset = MAX_PHYSICAL_FILESIZE;
+   }
+   while (newOffset > MAX_PHYSICAL_FILESIZE)
+   {
+       if (++newFile >= file->numFiles)
+           return EOF;
+       newOffset -= MAX_PHYSICAL_FILESIZE;
    }
    if (newFile >= file->numFiles)
        return EOF;